- Turn the Today card into a day navigator (‹/› arrows + "back to today")
so users can step back and check off a day they forgot. Editable range is
the active image's start through today; reveal recomputes from the whole
log, so backfilling a missed day re-bridges that habit's streak and paints
the pixels it earns.
- Add a Changelog tab to Settings (after About): dated release notes distilled
from the project's beans, one concise sentence each, newest first.
- Add a "Feedback? Email pop@elijah.run" line to the About tab.
Updated DESIGN.md and ARCHITECTURE.md to match. Validated with Playwright
(backfill streak-bridging 4→10px, nav bounds, changelog render) — no console
errors, no non-file:// requests.
title: 'bit-by-bit: backfill missed days via a day navigator on the Today card'
status: completed
type: feature
created_at: 2026-07-18T17:26:52Z
updated_at: 2026-07-18T17:26:52Z
---
Let users step back to an earlier day and check off habits they forgot, so a missed day no longer permanently breaks a streak. The Today card became a day navigator (‹/› arrows + a 'back to today' link); editable range is the active image's start through today. Reveal is derived from the whole log with each habit's streak counted backwards from its own day, so backfilling a missed day automatically re-bridges the streak and paints the pixels it earns. Updated index.html (selectedDay state, clampSelectedDay, nav wiring, per-day streak display, About copy), DESIGN.md (§2, §3.1, §9), and ARCHITECTURE.md. Validated with Playwright: backfilling one gap day bridged the streak and grew reveal 4→10 pixels, nav bounds and back-to-today work, no console errors or non-file requests.
Added a Changelog tab to the Settings modal (after About) listing released changes as dated entries, one concise sentence each, newest first. Content is distilled from the project's beans issues (release dates from each bean's completion). Implemented as a CHANGELOG data array + renderChangelog() rendering into #panel-changelog, with styling matching the app. Updated DESIGN.md §2 settings sections list. Validated with Playwright + screenshot: tab switches, four date groups render, no console errors or non-file requests.
@ -5,10 +5,10 @@ Everything lives in one file, `index.html`, organized into sections:
| Component | Responsibility |
|---|---|
| **State** | Single JSON document under localStorage key `bitbybit.v1`; load/save with corruption guards; versioned for future migration. |
| **Mechanics** | Habit check/uncheck logging, daily rollover, per-habit streak math, seeded (mulberry32) reveal-order permutation, and log-derived reveal: each habit reveals pixels equal to its own current streak length (1 the first day, 2 the next consecutive day, and so on), independent of any other habit. |
| **Mechanics** | Habit check/uncheck logging for the selected day (today or a backfilled past day, bounded by the active image's start), daily rollover, per-habit streak math, seeded (mulberry32) reveal-order permutation, and log-derived reveal: each habit reveals pixels equal to its own current streak length (1 the first day, 2 the next consecutive day, and so on), independent of any other habit. Because reveal recomputes from the whole log, backfilling a missed day re-bridges that habit's streak automatically. |
| **Rendering** | Canvas renderer for the artwork (revealed pixels, checkerboard for hidden, pop-in animation for deltas); DOM renderer for checklist, stats, settings. |
| **UI wiring** | Onboarding, settings dialog (habits / artwork / data / about), theme cycling (auto→light→dark via `data-theme` + CSS custom properties), export/import/wipe, confetti celebration, and a page footer disclosing authorship. |
| **UI wiring** | Onboarding, day navigator on the Today card (backfill past days), settings dialog (habits / artwork / data / about / changelog), theme cycling (auto→light→dark via `data-theme` + CSS custom properties), export/import/wipe, confetti celebration, and a page footer disclosing authorship. |
Data flows one way: user action → mutate state → persist → re-render. The
reveal permutation is derived from a stored seed, never persisted, so exports