Adds the deployment mechanism for the portfolio site. The site itself is not deployed yet: Phase 2 has not produced a binary. - deploy/deploy.sh: build + test (fail fast) -> releases/<ts> -> atomic `current` symlink flip -> docker compose up -d -> /healthz gate -> flip back to `previous` and exit non-zero on failure. `--rollback` restores the previous release in one command. Auto-detects the Go toolchain in /nix/store when `go` is not on PATH. - deploy/docker-compose.yml: 127.0.0.1:8096, mem_limit == memswap_limit == 120m, capped json-file logs (10m x 3), restart unless-stopped. - deploy/Dockerfile: runtime image only (alpine + prebuilt payload), so a release needs no toolchain, no network and no package install. - deploy/rehearse.sh: repeatable proof (21 assertions, exit 0) of deploy, build fail-fast, health-gate rollback, --rollback and N3 restart. - deploy/README.md + docs/phase-3-evidence.md: how it works, the build contract Phase 2 must satisfy, the Caddy block for Sam, and the open bind-address question (loopback-only vs reachable from .35). Satisfies DoD items 1, 3 (container), 4, 8. Items 2, 5, 6, 7 need the Phase 2 binary and Sam's Caddy change; recorded as deferred with owners, not claimed. Co-Authored-By: Paperclip <noreply@paperclip.ing>
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
AGENTS.md— the build spec. Constraints, conventions, and the phase list. Read it before anything else.docs/phase-N-*.md— one document per phase: work, Definition of Done, out of scope, risks.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.
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/orcontent/, ask. - Secrets live in
~/.config/environment.d/only. - All models go through OmniRoute.
Current state
- Repo prepared, scaffold retired, build spec written
- Phase 1 — content source of truth
- Phase 2 — static site
- Phase 3 — public deployment
- Phase 4 — corpus
- Phase 5 — AI overlay
- Phase 6 — guardrails
- Phase 7 — polish