{"$schema":"https://ui.shadcn.com/schema/registry-item.json","name":"daily-journal","type":"registry:component","title":"Daily Journal","description":"Write and revisit short dated journal entries in this browser.","author":"Notion Arena","categories":["trackers"],"tags":["widget","free","journal","daily notes","reflection","personal","offline"],"meta":{"kind":"widget","tier":"free","version":"1.0.0","updatedAt":"2026-10-11","notionPlan":"Free","emoji":"📔","delivery":["embed","html-block","download"],"capabilities":{"interactive":true,"offlineSafe":true,"persistsLocally":true,"writesToNotion":false,"needsNetwork":false},"embedUrl":"https://notionarena.vercel.app/embed/daily-journal","fileUrl":"https://notionarena.vercel.app/widgets/daily-journal.html","downloadUrl":"https://notionarena.vercel.app/api/widget/daily-journal","height":380,"minHeight":280,"maxHeight":560,"params":[{"key":"label","label":"Widget title","type":"text","default":"Daily journal"},{"key":"accent","label":"Accent","type":"color","default":"#6940a5"},{"key":"theme","label":"Theme","type":"select","default":"auto","options":[{"value":"auto","label":"Match Notion"},{"value":"light","label":"Light"},{"value":"dark","label":"Dark"}]}]},"files":[{"path":"widgets/daily-journal.html","type":"registry:file","target":"notion/widgets/daily-journal.html","content":"<!doctype html>\n<html lang=\"en\" data-theme=\"auto\">\n<head>\n<meta charset=\"utf-8\" /><meta name=\"viewport\" content=\"width=device-width,initial-scale=1\" />\n<title>Private Daily Journal</title>\n<style>\n:root{--bg:#fff;--fg:#37352f;--muted:#6b6a68;--surface:#f7f7f5;--border:#e9e9e7;--accent:#6940a5;--accent-ink:#fff;--accent-text:var(--accent);--danger:#c24136}\nhtml[data-theme=\"dark\"]{--bg:#191919;--fg:#e6e6e4;--muted:#9b9a97;--surface:#252525;--border:#343434;--danger:#ff7369}\n@media(prefers-color-scheme:dark){html[data-theme=\"auto\"]{--bg:#191919;--fg:#e6e6e4;--muted:#9b9a97;--surface:#252525;--border:#343434;--danger:#ff7369}}\n*{box-sizing:border-box}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}html,body{margin:0;height:100%}body{background:var(--bg);color:var(--fg);font-family:ui-sans-serif,-apple-system,BlinkMacSystemFont,\"Segoe UI\",Helvetica,Arial,sans-serif;-webkit-font-smoothing:antialiased;overflow:hidden}.wrap{height:100%;min-height:285px;display:flex;flex-direction:column;gap:8px;padding:13px;overflow:auto}.head{display:flex;align-items:center;justify-content:space-between;gap:8px}.kicker{font-size:9px;text-transform:uppercase;letter-spacing:.1em;color:var(--muted);font-weight:650}.title{font-size:14px;font-weight:650;margin-top:2px}.editor{display:flex;flex-direction:column;gap:5px}.fields{display:grid;grid-template-columns:110px minmax(0,1fr);gap:5px}.fields input,.editor textarea{width:100%;min-width:0;border:1px solid var(--border);border-radius:7px;background:var(--surface);color:var(--fg);padding:6px 8px;font:inherit;font-size:10px}.fields input{height:30px}.editor textarea{min-height:94px;flex:1;resize:vertical;line-height:1.45}.fields input:focus-visible,.editor textarea:focus-visible{outline:2px solid var(--accent);outline-offset:1px}.controls{display:flex;align-items:center;justify-content:space-between;gap:8px}.status{font-size:9px;color:var(--muted)}.save{min-height:29px;border:1px solid var(--accent);border-radius:7px;background:var(--accent);color:var(--accent-ink);font:inherit;font-size:9.5px;padding:4px 10px;cursor:pointer}.save:focus-visible,.entry button:focus-visible,.clear:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.list{display:flex;min-height:45px;flex-direction:column;gap:4px;overflow:auto}.entry{display:grid;grid-template-columns:minmax(0,1fr) auto 23px;gap:3px 6px;padding:6px 7px;border:1px solid var(--border);border-radius:7px;background:var(--surface)}.entry-title{min-width:0;overflow-wrap:anywhere;font-size:9.5px;font-weight:600}.entry-date{color:var(--accent-text);font-size:8.5px;white-space:nowrap}.preview{grid-column:1/3;overflow:hidden;color:var(--muted);font-size:8.5px;text-overflow:ellipsis;white-space:nowrap}.entry button{grid-column:3;grid-row:1/3;min-width:38px;height:24px;padding:0 4px;border:1px solid var(--border);border-radius:6px;background:var(--bg);color:var(--muted);font:inherit;font-size:8px;cursor:pointer}.empty{text-align:center;padding:7px;color:var(--muted);font-size:9px}.foot{display:flex;align-items:center;justify-content:space-between;gap:8px}.note{font-size:8.5px;color:var(--muted);line-height:1.35}.clear{min-height:25px;border:1px solid var(--border);border-radius:7px;background:var(--surface);color:var(--fg);font:inherit;font-size:8.5px;padding:3px 7px;cursor:pointer}@media(max-width:340px){.wrap{padding:10px}.fields{grid-template-columns:92px minmax(0,1fr)}}@media(prefers-reduced-motion:reduce){*,*::before,*::after{animation-duration:.01ms!important;transition-duration:.01ms!important;scroll-behavior:auto!important}}\n</style>\n</head>\n<body><main class=\"wrap\">\n  <header class=\"head\"><div><div class=\"kicker\">Browser-local notes</div><div class=\"title\" id=\"title\">Daily journal</div></div></header>\n  <section class=\"editor\"><div class=\"fields\"><label class=\"sr-only\" for=\"date\">Journal date</label><input id=\"date\" type=\"date\" /><label class=\"sr-only\" for=\"entryTitle\">Entry title</label><input id=\"entryTitle\" maxlength=\"60\" placeholder=\"Title (optional)\" /></div><label class=\"sr-only\" for=\"bodyText\">Journal entry</label><textarea id=\"bodyText\" maxlength=\"3000\" placeholder=\"Write a short note for this date\"></textarea></section>\n  <div class=\"controls\"><span class=\"status\" id=\"status\" aria-live=\"polite\">Journal stays in this browser and is not encrypted or synced.</span><button class=\"save\" id=\"save\" type=\"button\">Save entry</button></div>\n  <section class=\"list\" id=\"list\" aria-label=\"Recent journal entries\"></section>\n  <footer class=\"foot\"><span class=\"note\">Avoid passwords or sensitive details. Local browser storage is not encrypted.</span><button class=\"clear\" id=\"clear\" type=\"button\">Clear journal</button></footer>\n</main>\n<script>\n(function(){\n  var cfgEl=document.getElementById('bk-config'),base={};try{base=cfgEl?JSON.parse(cfgEl.textContent||'{}'):{};}catch(e){}var q=new URLSearchParams(location.search),c={};for(var k in base)c[k]=base[k];q.forEach(function(v,k){c[k]=v;});\n  function safeColor(v,d){return /^#[0-9a-f]{6}$/i.test(String(v||''))?String(v):d;}function rgb(h){var s=String(h).slice(1);return[0,2,4].map(function(i){return parseInt(s.slice(i,i+2),16);});}function lum(a){return a.map(function(v){v/=255;return v<=.04045?v/12.92:Math.pow((v+.055)/1.055,2.4);}).reduce(function(s,v,i){return s+v*[.2126,.7152,.0722][i];},0);}function ratio(a,b){var x=lum(a),y=lum(b);return(Math.max(x,y)+.05)/(Math.min(x,y)+.05);}function ink(h){var a=rgb(h);return ratio(a,[255,255,255])>=ratio(a,[0,0,0])?'#fff':'#000';}function textColor(h){var dark=theme==='dark'||(theme==='auto'&&window.matchMedia&&window.matchMedia('(prefers-color-scheme: dark)').matches),bg=rgb(dark?'#252525':'#f7f7f5'),a=rgb(h),to=dark?[255,255,255]:[0,0,0];if(ratio(a,bg)>=4.5)return h;for(var t=.02;t<=1;t+=.02){var m=a.map(function(v,i){return Math.round(v+(to[i]-v)*t);});if(ratio(m,bg)>=4.5)return'#'+m.map(function(v){return v.toString(16).padStart(2,'0');}).join('');}return dark?'#fff':'#191919';}function setText(){document.documentElement.style.setProperty('--accent-text',textColor(ACCENT));}\n  var theme=['auto','light','dark'].indexOf(String(c.theme||'auto'))>=0?String(c.theme||'auto'):'auto',ACCENT=safeColor(c.accent,'#6940a5'),LABEL=String(c.label||'Daily journal').slice(0,48),KEY='notion-arena.daily-journal.v1',items=[];\n  document.documentElement.setAttribute('data-theme',theme);document.documentElement.style.setProperty('--accent',ACCENT);document.documentElement.style.setProperty('--accent-ink',ink(ACCENT));setText();if(theme==='auto'&&window.matchMedia){var mq=window.matchMedia('(prefers-color-scheme: dark)');if(mq.addEventListener)mq.addEventListener('change',setText);else if(mq.addListener)mq.addListener(setText);}document.getElementById('title').textContent=LABEL;document.title=LABEL;\n  function dateKey(){var d=new Date();return new Date(d.getTime()-d.getTimezoneOffset()*60000).toISOString().slice(0,10);}var date=document.getElementById('date'),entryTitle=document.getElementById('entryTitle'),bodyText=document.getElementById('bodyText');date.value=dateKey();try{var a=JSON.parse(localStorage.getItem(KEY)||'[]');if(Array.isArray(a))items=a.filter(function(x){return x&&/^\\d{4}-\\d{2}-\\d{2}$/.test(x.date)&&typeof x.body==='string';}).slice(0,60);}catch(e){}\n  var list=document.getElementById('list'),status=document.getElementById('status');function saveData(){try{localStorage.setItem(KEY,JSON.stringify(items));status.textContent='Saved only in this browser. Local data is not encrypted or synced.';}catch(e){status.textContent='Storage is unavailable in this browser session.';}}function showDate(v){var d=new Date(v+'T00:00:00');return isNaN(d.getTime())?v:new Intl.DateTimeFormat(undefined,{month:'short',day:'numeric'}).format(d);}function loadDate(){var item=items.find(function(x){return x.date===date.value;});entryTitle.value=item?item.title:'';bodyText.value=item?item.body:'';}\n  function render(){list.textContent='';if(!items.length){var empty=document.createElement('div');empty.className='empty';empty.textContent='Saved entries will appear here.';list.appendChild(empty);return;}items.slice().sort(function(a,b){return b.date.localeCompare(a.date);}).forEach(function(item){var row=document.createElement('div');row.className='entry';var title=document.createElement('span');title.className='entry-title';title.textContent=item.title||'Journal entry';var day=document.createElement('span');day.className='entry-date';day.textContent=showDate(item.date);var preview=document.createElement('span');preview.className='preview';preview.textContent=item.body;var edit=document.createElement('button');edit.type='button';edit.textContent='Edit';edit.setAttribute('aria-label','Edit entry for '+showDate(item.date));edit.addEventListener('click',function(){date.value=item.date;loadDate();bodyText.focus();});row.append(title,day,preview,edit);list.appendChild(row);});}\n  date.addEventListener('change',loadDate);document.getElementById('save').addEventListener('click',function(){var day=date.value,title=entryTitle.value.trim().slice(0,60),body=bodyText.value.trim().slice(0,3000);if(!/^\\d{4}-\\d{2}-\\d{2}$/.test(day)||!body){status.textContent='Choose a date and write a note before saving.';return;}var existing=items.find(function(x){return x.date===day;});if(existing){existing.title=title;existing.body=body;}else{if(items.length>=60){status.textContent='Journal limit reached.';return;}items.push({date:day,title:title,body:body});}saveData();render();});document.getElementById('clear').addEventListener('click',function(){items=[];entryTitle.value='';bodyText.value='';saveData();render();});render();loadDate();\n})();\n</script>\n</body>\n</html>\n"}]}