A private, single-user visual memory archive of journal entries and photos, organized as a calendar.
This repo was reset to a clean slate on 2026-08-20. The prior effort (58-task governance roadmap, multi-agent coordination control plane) is preserved at the archive/generation-0 branch and gen0-final tag — see RESET-DECISION.md for why.
Milestones M1–M3 are implemented and runnable: the Calendar with its Museum Margin, the Journal Day page, and Daily Photos with reordering. Everything runs locally as one process serving HTML from one SQLite file. Nothing is deployed, and there is no authentication — the server binds to 127.0.0.1 only.
Phase 1.5 planning, work tickets, and the UI prototypes are described in HANDOVER-PHASE-1.5.md.
Requires Node 22 LTS. From a fresh clone:
npm install # better-sqlite3 and sharp compile here; give it a minute
npm run migrate # creates data/archive.sqlite
npm run seed # invented journals + generated photos, so there is something to look at
npm run devThen open http://127.0.0.1:3000/calendar.
The seed is idempotent — run it twice and the second run reports every file as a duplicate, because ingest deduplicates by content hash.
To load your own files instead, point ingest at a directory:
npm run ingest -- ~/some/inboxNothing in that directory is moved, renamed, or deleted; ingest only ever copies.
Other commands:
npm test # node:test, no watch mode, no CI
npm run typecheck # tsc --noEmit, strict
npm run build # tsc + copy static assets to dist/src/
npm start # run the built output instead of tsxLID_PORT overrides the port, LID_LOG_LEVEL the log level. Both default to
3000 and info.
data/ holds the database and the media archive. It is gitignored and never committed — see the privacy boundary in CLAUDE.md.
Read UI-DESIGN-INSTRUCTIONS.md first. Binding instructions for any agent touching frontend or UX.
reference/ holds notes salvaged from the archived effort — domain glossary, product requirements, UX spec, a static v10 prototype, and Hetzner deployment research. Background reading, not a spec to satisfy.
See CLAUDE.md.