From c47611dd178b299f2aeca9710e5f2f8da97b110f Mon Sep 17 00:00:00 2001 From: nmemmert <67961292+nmemmert@users.noreply.github.com> Date: Thu, 29 Oct 2026 09:02:53 -0400 Subject: [PATCH] Family board: compact Pick your chores row on the wall display, picker header avatar Co-Authored-By: Claude Sonnet 5.5 --- public/board.html | 2 ++ public/board.js | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/public/board.html b/public/board.html index 7e2f95a..cc0e103 100644 --- a/public/board.html +++ b/public/board.html @@ -80,6 +80,8 @@ .bdtop h1 { font-size: 28px; } .bdclock { font-size: 32px; } .bdtop p { margin: 0; } .ann { margin: 8px 0; padding: 8px 14px; font-size: 20px; } .who { margin: 8px 0; } .who h2 { margin-bottom: 6px; font-size: 15px; } .tiles { flex-wrap: nowrap; overflow-x: auto; scrollbar-width: none; gap: 10px; } .tile { width: 92px; padding: 8px 4px; border-radius: 16px; flex: none; } .tile .av { width: 44px; height: 44px; font-size: 20px; } .tile b { font-size: 14px; } + .who h2 { display: none; } .who .tile small { display: none; } .who .tile { width: 78px; padding: 6px 4px; } .who .tile .av { width: 36px; height: 36px; font-size: 17px; } + .pickrow { margin: 6px 0 2px; } .pickrow h2 { margin-bottom: 4px; font-size: 15px; } .pickrow .tiles { flex-wrap: nowrap; overflow-x: auto; } .pickrow .pk { padding: 6px 12px; min-width: 0; flex: none; gap: 10px; border-radius: 16px; } .pickrow .pk .av { width: 38px; height: 38px; font-size: 18px; } .pickrow .pk b { font-size: 16px; } .pickrow .pk small { font-size: 12px; } .grid { flex: 1; min-height: 0; grid-template-columns: repeat(2, 1fr); grid-template-rows: minmax(0, 1.4fr) repeat(3, minmax(0, 1fr)); gap: 10px; } .card.wide { grid-column: 1 / -1; } .card.wide { display: flex; flex-direction: column; } .chcols { flex: 1; min-height: 0; display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); gap: 10px; align-items: stretch; } .chcols .chp { display: flex; flex-direction: column; min-height: 0; } .chl { flex: 1; min-height: 0; overflow-y: auto; -webkit-overflow-scrolling: touch; display: flex; flex-direction: column; align-items: stretch; overscroll-behavior: contain; } .chl .pill { margin: 3px 0; justify-content: flex-start; } .chl .pill.more { justify-content: center; } .chcols .chp { margin-top: 6px; min-width: 0; } diff --git a/public/board.js b/public/board.js index f43fd0f..78d2178 100644 --- a/public/board.js +++ b/public/board.js @@ -119,7 +119,7 @@ function toast(msg) { let t = document.getElementById('bt'); if (!t) { t = docum // ---- Pick your chores: tap your name, enter your PIN once (a child with no PIN goes straight in), then do, take or put back as many chores as you like function choreHub(p) { if (!p) return; let pin = ''; - const { box, close } = sheet(''), today = ymd(new Date()), head = `
${avatar(p)}

${esc(p.name.split(' ')[0])}'s chores

`; + const { box, close } = sheet(''), today = ymd(new Date()), head = `
${esc((p.name.trim()[0] || '?').toUpperCase())}

${esc(p.name.split(' ')[0])}'s chores

`; const act = async (c, action) => { const r = await fetch('/api/board/chore', { method: 'POST', body: JSON.stringify({ uid: p.id, pin, chore: c.chore, action, date: today }) }), j = await r.json().catch(() => ({})); if (!r.ok) { if (p.pin && /pin/i.test(j.error || '')) { pin = ''; return askPin(j.error); } box.querySelector('#e').textContent = j.error || 'That did not work'; return; } await load(); paint(); }; const paint = () => { const mine = data.chores.filter(c => c.user === p.id), todo = mine.filter(c => !c.done), done = mine.filter(c => c.done), pool = data.chores.filter(c => c.claimable && !c.done), me = (data.week && data.week.people.find(x => x.id === p.id)) || { points: 0 };