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.

49 lines
2.4 KiB
Markdown

# pages — Planning
## Phases
| Phase | Content | Status |
|---|---|---|
| 0 | Security analysis + design (`plans/2026-07-12-pages-design.md`) | done |
| 1 | v0 implementation on branch `pages-v0` (beans below) | done |
| 2 | Deploy + manual QA against real Cloudflare account | deployed; manual QA (login/upload/delete) pending |
| 3 | v1 candidates: per-page subdomains, page overwrite, Yew UI, OpenAPI | not started |
## v0 tickets (beans, serial)
1. scaffold — crate skeleton, wrangler.toml, hello-world worker builds
2. core — slug/mime/upload/header policy modules + unit tests
3. db — D1 schema + query layer
4. auth — GitHub OAuth, sessions, auth middleware
5. api — pages + users JSON API
6. serve — page content serving from R2
7. frontend — embedded management UI
8. infra — OpenTofu + deployment docs
## Work log
- **2026-07-12** — Project initialized. Security analysis and v0 design
written; beans created; implementation pipeline started (Sonnet
implementation agents, Opus review agents, one commit per ticket).
- **2026-07-13** — infra ticket (pages-ihlp) done: `infra/*.tf` (R2 bucket,
D1 database, DNS placeholder record, rate limiting ruleset) mirroring
`../quotesdb/infra` style, `infra/README.md` deployment guide, `tofu fmt`
+ `tofu validate` passing.
- **2026-07-13** — v0 implementation complete: all 8 beans done on
`pages-v0`, one reviewed commit per ticket (Sonnet implementation, Opus
review). 142 unit tests + 17 doctests; both-target clippy clean. Next:
phase 2 (real deploy + manual QA per `infra/README.md`).
- **2026-07-13** — Deployed. tofu applied R2 + D1 + DNS (rate-limit ruleset
deliberately NOT applied — quotesdb's live http_ratelimit ruleset owns
the zone's single slot; merge required if wanted). Remote schema applied;
GITHUB_CLIENT_SECRET secret set; route pages.elijah.run/* live. Smoke
tests pass (/, /api/me, /auth/login 302, reserved + unknown slugs 404
with sandbox CSP). Pending manual QA: GitHub login as admin, upload,
view, delete.
- **2026-07-13** — pages-shqc: per-page/per-user "trusted" escape hatch from
the CSP sandbox (`pages.trusted OR owner's users.trusted`, computed at
serve time). `migrations/0002-trust.sql` added for the live DB (not yet
applied remotely — manual step); schema.sql, db.rs, api.rs, serve.rs,
core/headers.rs, and the admin UI all updated; 148 unit + 18 doctests,
both-target clippy clean.