repos

Mark Phase 12 complete in PLAN.md — MVP shipped and deployed

0fa232d4 by Isaac Bythewood · 1 month ago

modified PLAN.md
@@ -32,9 +32,9 @@ and resume cleanly from this file alone, keeping token use low._Last updated: 2026-05-22_**Current phase:** Phases 0 through 11 complete and verified. Phase 12(Polish + ship) is underway: the ship infrastructure is done; the final UIpolish pass is the one remaining item.**Current phase:** Phases 0 through 12 complete and verified. The MVP isshipped and **live in production at https://finance.bythewood.me** (deployed2026-05-22). Next work is the post-MVP backlog, phases 13 through 19.**Roadmap (restructured 2026-05-22, see decisions log):** the home-pageredesign and commodities are pre-ship MVP phases. Order: 9 Search +
@@ -416,8 +416,7 @@ schema, unused for now.    (1280px) and phone (390px) both render with no horizontal overflow and    zero console errors.- **Phase 12 ship infrastructure.** Done — the final UI polish pass below is  the remainder of the phase.- **Phase 12 polish + ship.** Complete, verified, and live in production.  - `Dockerfile`: multi-stage `rust:alpine` builder + `alpine:3.23` runtime,    modelled on `analytics` but with no chromium and no Typst (finance renders    no PDFs). The runtime stage copies the binary, `dist/`, `templates/`,
@@ -432,28 +431,50 @@ schema, unused for now.  - Sitemap bug fixed: `routes/seo.rs` still listed the dropped `watchlists`    page; it now emits `/` and `/search` only. The favicon was already done    in Phase 4 (an inline SVG served at `/favicon.ico`).  - `git init -b master` plus an initial commit (71 files; `.env`, `data/`,    `dist/`, `target/`, `node_modules/` all correctly gitignored). No remote    configured and nothing pushed — creating the GitHub repo and the `server`    remote is left to the user.  - `git init -b master` plus an initial commit (`.env`, `data/`, `dist/`,    `target/`, `node_modules/` all correctly gitignored). A `server` remote    (`root@bythewood.me:/srv/git/finance.git`) was added for the deploy. No    GitHub repo yet — the user deferred GitHub.  - Verified: `docker build` produces a 49.9MB image; the container boots    (migrations apply, scheduler starts, listens on 8000), serves `/` and    `/health` with 200 and resolved `/static/` assets, and degrades    gracefully when `STOOQ_APIKEY` / `SEC_CONTACT_EMAIL` are unset (seed and    SEC jobs disabled, prune still runs).  - Final Paper Ledger polish pass: `base.scss` makes `<body>` a flex column    with `main` flex-growing, so the footer pins to the bottom of the    viewport on short pages (404, empty states) instead of floating mid-page    over bare paper; `home.scss` lays the nine home sparkline cards 2-up on    phones (they were one long column) while wider screens keep the existing    auto-fill flow. Verified at 360 / 390 / 1280 px — desktop unchanged, no    overflow, no new console errors.  - taproot registration (done at the user's request — the plan had left    this as a manual step): `finance|overshard/finance|master|yes|no` added    to `projects.conf`, a `finance.bythewood.me` block added to the Caddyfile,    `finance.bythewood.me` added to the caddy network aliases, and the taproot    `CLAUDE.md` project table updated. A latent `quickstart.sh` bug was fixed    in the same pass: it created `/srv/data/<name>` root-owned, so a uid-1000    container could not write its db — it now `chown`s the dir to 1000 (this    bit the finance deploy; see the decisions log).  - Deployed to production at **https://finance.bythewood.me** on 2026-05-22.    The server (alpine, `root@bythewood.me`) was provisioned the GitHub-free    way: a bare repo `/srv/git/finance.git`, a working clone `/srv/docker/finance`    whose `origin` is that bare repo, `/srv/data/finance` (chowned 1000), a    hand-written `.env` (real `STOOQ_APIKEY`, `SEC_CONTACT_EMAIL`,    `BASE_URL=https://finance.bythewood.me`), and the standard post-receive    hook. `git push server master` deploys: the hook rebuilds the image,    recreates the container, and reattaches it to `bythewood-edge`. Caddy was    updated (Caddyfile + alias) and recreated. Verified: `/` and `/health`    return 200 over HTTPS with a valid cert and the page renders the Paper    Ledger UI; the first-run seed backfills on the live box.**Resuming, next action****Phase 12 (Polish + ship) — final UI polish pass.** The ship infrastructureshipped (see the Phase 12 entry in the Done list and the decisions log): thesitemap fix, Dockerfile + docker-compose + .dockerignore, the Caddyfile andpost-receive sample files, README.md, the project CLAUDE.md, and `git init`plus the initial commit. The favicon was already done in Phase 4. The oneitem left in Phase 12 is the final Paper Ledger polish pass deferred fromPhase 4 — a dedicated pass over the running app (home, symbol, search,health, 404; phone + desktop) to tighten spacing, hierarchy, and rough edgesbefore ship. It is deliberately a look-at-it-together pass: run the app andreview it with the user. Registering the project in `taproot` is a manualstep left to the user.**The MVP is shipped and live at https://finance.bythewood.me.** Phases 0through 12 are complete, verified, and deployed. No phase is in progress.Future work is the post-MVP backlog, phases 13 through 19 below. Redeploysare `git push server master` from this repo (the `server` remote is set).There is still no GitHub repo for finance — the user deferred that; if one iscreated later, add it as `origin` and the `overshard/finance` slug already intaproot's `projects.conf` lines up.Note: because `^RUT`/`^VIX` stay historyless, `meta.seed_completed` is neverset, so the boot seed re-runs on every restart (cheap: ~2 Stooq calls that
@@ -669,11 +690,11 @@ Timestamps are UTC epoch-ms; trading dates are `TEXT` `YYYY-MM-DD`.  shrunk, or moved off the landing view; decide when building). It is also  where user-added symbols (Phase 9) find their place on the home view.  Built in the Paper Ledger system.- [ ] **Phase 12 — Polish + ship.** Ship infrastructure done (sitemap fix,  Dockerfile, docker-compose, sample files, README, CLAUDE.md, `git init`);  the favicon was already done in Phase 4. Remaining: the final Paper Ledger  polish pass (deferred from Phase 4 — see decisions log). Registering the  project in `taproot` is left as a manual step for the user.- [x] **Phase 12 — Polish + ship.** Sitemap fix, Dockerfile, docker-compose,  sample files, README, CLAUDE.md, `git init`, the final Paper Ledger polish  pass, taproot registration, and a live production deploy to  https://finance.bythewood.me. Complete and verified — see the Phase 12  entry in the Status section and the decisions log.Phases 13 through 19 are the post-MVP backlog: ideas captured during planning,to be built after the Phase 12 ship. Order among them is loose, and several
@@ -1020,11 +1041,28 @@ finance/  `env.sample` in `samplefiles/`. A `README.md` and a project `CLAUDE.md`  were written. The sitemap in `routes/seo.rs` still listed the dropped  `watchlists` page — fixed to emit `/` and `/search` only. `git init` plus  an initial commit (71 files). Per the workspace convention the project is  NOT registered in `taproot` (`projects.conf` / Caddyfile) and no GitHub  remote was created — both are manual steps for the user. The favicon was  already done in Phase 4. The one Phase 12 item left is the final Paper  Ledger UI polish pass.  an initial commit (71 files). The favicon was already done in Phase 4.- **2026-05-22: Phase 12 polish pass + production deploy — MVP shipped.**  Final Paper Ledger polish pass: a flex-column `<body>` so the footer pins  to the viewport bottom on short pages instead of floating over bare paper  (the 404 had a visible dead band), and a 2-up phone grid for the home  sparkline cards (they were one long column — the candidate noted in the  Phase 11 entry above). Desktop layout unchanged. Then, at the user's  request (overriding the plan's "taproot is a manual step"), finance was  registered in `taproot` and deployed live to **https://finance.bythewood.me**.  taproot: a `projects.conf` line, a Caddyfile block, a caddy network alias,  the CLAUDE.md table. Server provisioning was done GitHub-free — the working  clone's `origin` is the local bare repo `/srv/git/finance.git`, not GitHub,  so `git push server master` is the whole deploy loop (the user deferred  GitHub). One real bug surfaced and was fixed: `quickstart.sh` created  `/srv/data/<name>` root-owned, but project containers run as a uid-1000  user and a bind mount keeps the host dir's ownership, so finance  crash-looped on "Permission denied" until the data dir was `chown`ed to  1000; `quickstart.sh` now does that `chown` itself. The deploy is verified:  HTTPS 200 on `/` and `/health` with a valid cert, the Paper Ledger UI  renders, and the first-run seed backfills on the live box. This closes  Phase 12; the MVP is shipped. Remaining work is the post-MVP backlog  (phases 13-19).---