// Mobile companion view — for when Michelle is on the train. // Stripped to: today / burst-into-focus / quick capture. // 4 priorities collapsed, energy check, big "start burst" CTA. function Mobile() { const { state, setEnergy, startBurst, addBrainItem, toggleTask } = useStore(); const [tab, setTab] = React.useState('today'); const [capture, setCapture] = React.useState(''); const energies = [ { id: 'spent', label: 'Spent' }, { id: 'steady', label: 'Steady' }, { id: 'strong', label: 'Strong' }, { id: 'wired', label: 'Wired' }, ]; const submit = () => { if (!capture.trim()) return; addBrainItem(capture.trim(), 'dump'); setCapture(''); }; // pick first incomplete task across priorities for the big CTA let nextPriority = null, nextTask = null; for (const p of state.priorities) { if (nextTask) break; for (const t of p.tasks) { if (!t.done) { nextTask = t; nextPriority = p; break; } } } return (
{state.user.initials}
Hi, Michelle.
Week {state.week} · day 2 of 5
{tab === 'today' && ( <>
Energy {energies.map((e) => ( ))}
{nextTask && (
startBurst(nextPriority.id, nextTask.id, state.burst.length)}>
Next ⚡ burst
{nextTask.label}
From: {nextPriority.title}
)}
This week — 4 priorities
{state.priorities.slice(0, 4).map((p, i) => { const done = p.tasks.filter((t) => t.done).length; const pct = p.tasks.length ? Math.round(done / p.tasks.length * 100) : 0; return (
{i + 1}
{p.title}
{done}/{p.tasks.length} · {pct}%
); })}
Money in
{state.money.currency}{state.money.inMonth.toLocaleString()}
this month
Admin queue
{state.admin.length}
{state.admin.filter((a) => a.sev === 'crit').length} critical
)} {tab === 'capture' && ( <>
Brain zips