# Ai Resume — Paperclip build directory This is the **working directory for the Paperclip project `Resume Ai`**. Paperclip builds here. Everything needed to build is in this folder; nothing outside it is required. ## Relationship to the planning folder | Folder | Holds | Status | |---|---|---| | `/home/sam/paseo/projects/resume_ai_system/` | The *why* — research, cull decisions, stack rationale, evidence notes, content drafts | **Planning. Not the build.** Sam works here | | `/home/sam/paseo/projects/resume_ai_system_paperclip_build/` | The *what* — build spec, phase documents, reference material, and the site itself | **This folder. Paperclip works here** | The planning folder is read-only reference. Do not edit it from here, and do not make the build depend on it — anything needed must be copied in. ## Start here 1. **`AGENTS.md`** — the build spec. Constraints, conventions, and the phase list. Read it before anything else. 2. **`docs/phase-N-*.md`** — one document per phase: work, Definition of Done, out of scope, risks. 3. **`reference/`** — frozen decisions, stack and budgets, content map, acceptance tests. ## Phases | # | Phase | Ships | |---|---|---| | 1 | Content source of truth | `content/` + validator | | 2 | Mode A static site | Browsable pre-rendered site, no AI | | 3 | Public deployment | Live URL behind Caddy | | 4 | Corpus and retrieval | `content/` → Qdrant | | 5 | Mode B console | Streaming, cited answers | | 6 | Guardrails, cost, kill switch | Safe to leave public | | 7 | Polish | Logos, diagrams, code exhibits | Order is deliberate. Content first (both renderers need it). **Deploy at Phase 3, not last** — a live half-built URL is worth more than a perfect site that never ships. AI after deployment so it can never block launch. ## Repository This folder **is** the git working copy of `sam/ai-resume`. One repo, one product. Previously held an abandoned Vite/React scaffold. It was replaced by this build spec; the history is retained because it honestly records the false start, and it is referenced in the site's "alternatives considered" content. ## Build and run The site is one Go binary serving pre-rendered HTML. There is no Node, no bundler and no `node_modules`; `go.sum` is the only dependency lock. ```sh nix develop # go, templ, sqlite3, make, curl make validate # content gate: front-matter against the frozen schema make test # go test ./... plus the validator self-test make dist # templ generate → bin/ → pre-rendered dist/ make dev # build, then serve on http://127.0.0.1:8096 ``` `bin/resume-build` reads `content/` and writes `dist/` (pages, stage fragments, the fragment manifest, the SQLite FTS5 index, assets). `bin/resume-server` serves `dist/` and never reads `content/`, never calls a model, and never opens a socket to another service — that is what keeps acceptance test A1 true. The two things that are not files are `/search` (FTS5 over page titles and body text) and `/api/stage/stream` (the presentation panel driven by an event stream instead of a route). ## Ground rules - **Do not touch other systems.** No stopping containers, no editing other projects, no `nixos-rebuild`, no Caddy changes except the single block specified in Phase 3 — and that one Sam applies. - **Mode A must work with every AI service stopped.** Hard gate. - **Never invent facts about Sam's career.** If it is not in `reference/` or `content/`, ask. - **Secrets** live in `~/.config/environment.d/` only. - **All models** go through OmniRoute. ## Current state - [x] Repo prepared, scaffold retired, build spec written - [x] Phase 1 — content source of truth (40 documents across six areas, `make validate`) - [x] Phase 2 — static site (`make dist`, 45 pages, 86 stage fragments, FTS5 search) - [ ] Phase 3 — public deployment - [ ] Phase 4 — corpus - [ ] Phase 5 — AI overlay - [ ] Phase 6 — guardrails - [ ] Phase 7 — polish