You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
3.1 KiB
3.1 KiB
| title | status | type | priority | created_at | updated_at |
|---|---|---|---|---|---|
| Footer, Data tab with wipe, streak-multiplier rewards, About pixel rules | completed | feature | normal | 2026-07-14T23:41:06Z | 2026-07-15T00:10:14Z |
Four changes to bit-by-bit index.html + DESIGN.md:
- Add a page footer disclosing it was written with Claude Code (Sonnet 5, Opus 4.8, Fable 5).
- Rename the 'Backup' settings tab to 'Data' and add a 'wipe all data' option there.
- Streak becomes a reward multiplier: units per day = streak-on-that-day x triangular(checks). Recalibrate pixelsPerCheck and the finish estimate; update DESIGN.md.
- About page: describe specifically how earning pixels works (per-check escalation + streak multiplier), encouraging finishing the whole day.
Summary of Changes
All four changes landed in index.html (+ docs/DESIGN.md, docs/ARCHITECTURE.md, README.md):
- Footer — added
<footer class="app-footer">(plain text, no external link) disclosing 'Written with Claude Code · Sonnet 5, Opus 4.8 & Fable 5'. - Data tab + wipe — renamed the 'Backup' settings tab to 'Data' (data-tab/panel id
data), added a 'Danger zone' with a double-confirm 'Wipe all data' button that clears the localStorage keys, resets todefaultState(), and returns to first-run onboarding. - Streak multiplier — reveal units per day are now
streakOnDay(d) × triangular(checks)(newstreakOnDayhelper). RecalibratedpixelsPerCheckForto divide bytriangular(30) × triangular(habitCount), and fixed the upload finish-day estimate to solve the triangular streak accumulation. - About page — added two paragraphs describing exactly how pixels are earned (per-check escalation + streak multiplier) and encouraging finishing the whole day's list; updated the version line to name all three models.
Validation
grepforhttp://|https://|fetch(→ no external references.- Playwright headless run: fresh load shows onboarding + footer; seeded 3-consecutive-day log on a 36px image renders '6 / 36 pixels' (confirms 1+2+3 streak-multiplied units, not the old flat 3); settings tabs are Habits/Artwork/Data/About (no Backup); wipe button clears localStorage and returns to onboarding; zero console errors, zero non-local network requests.
Follow-up: upload during onboarding
The onboarding 'Pick your first picture' step only offered presets — no way to upload an image on first setup (upload previously lived only in Settings → Artwork). Added the upload pipeline to onboarding step 2:
- New file input + grid-size select + name field + live preview/estimate in
#obStep2, reusingdownsampleImageFile/renderThumbnail. - Generalized the onboarding selection from
obSelectedPresettoobSelectedDef(preset or upload) plusobUploadResult; preset and upload selections mutually supersede each other; 'Start painting' commits either. - Validated via Playwright: uploading a PNG in onboarding shows the preview + '~N days' estimate, enables Start, and starts a 24×24
source:'upload'artwork named from the field — zero console errors, zero network requests. Preset/footer/data/wipe/streak regression suite still green. Updated DESIGN.md §2.