Stand up the full SQLite content layer: all 7 tables from the authoritative schema with WAL + foreign-keys enforced per-connection, entity dataclasses plus row mappers, hand-rolled versioned migrations tracked in schema_migrations, and an idempotent Python seed (system user + welcome post + About page). Add a Markdown->HTML service using markdown-it-py with a strict bleach allowlist (tables intentionally omitted on both sides). Add a typed in-process TTLCache[K,V] and wire it into real DB-backed PostService and PageService, both exposing invalidate_all() for Phase 4 admin writes. Rewire / and /about to read from the DB; homepage renders the seeded welcome post, About renders page.title + sanitized body_html_cached. Update the Phase 1 route tests accordingly. Mark Phase 2 complete in docs/ROADMAP.md.
Documentation Folder
This folder contains business planning, architecture decisions, and documentation.
No application code belongs here.
Contents
| Document | Purpose |
|---|---|
ROADMAP.md |
Phased build plan, data model (dataclasses), SQL schema, visual design, env-var contract |
code_guidelines.md |
Generic Python coding standards (FastAPI overrides its Flask default for this project) |
security.md |
Python security baseline (OWASP-aligned) |
MANUAL_TESTING.md (added in Phase 1) |
Manual test checklist for the public site + admin |
Related Docs (in repo root)
| Document | Purpose |
|---|---|
../CLAUDE.md |
Project instructions — stack, topology, security must-haves, git flow |
Guidelines
- Keep documents focused and concise.
- Update docs when architecture decisions change.
- Use markdown tables for structured information.
- Link to external documentation where relevant.