2184a1892f
- schema.ts: zod schemas per DATA_MODEL (profile, projects, experience, skills, meta)
- nested {en,no} model: invariant facts once, prose twice; validated at build
- content: profile, skills, experience (with apprentice->developer progression),
JobTrack + InboxIntel case studies with data-driven arch diagrams, homelab capability page
- per-page SEO meta (EN/NO)
- content.ts: locale-resolved view models; CV PDFs wired
- deviation from literal Astro-collections logged in PROJECT_STATUS with rationale
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
3.4 KiB
3.4 KiB
PROJECT_STATUS.md
Living status of the Phase 3 implementation. Updated continuously.
Current phase: Phase 3 — implementation
Branch strategy: feature branches → PR → main (never commit directly to main)
Last updated: 2026-07-03
Milestones
| # | Milestone | Status |
|---|---|---|
| 0 | Repo, tooling, tracking (git, pnpm, docs moved to docs/) |
🟡 in progress |
| 1 | Astro base config + token/style layer | ⬜ not started |
| 2 | i18n layer (locales, slug map, dictionaries) | ⬜ not started |
| 3 | Content collections + schemas + EN/NO data | ⬜ not started |
| 4 | UI atoms + core layout (Header, Footer, SEO) | ⬜ not started |
| 5 | Home page sections | ⬜ not started |
| 6 | Case-study + capability templates | ⬜ not started |
| 7 | Remaining pages (about, experience, contact, cv, colophon, 404) | ⬜ not started |
| 8 | Behaviour modules (theme, nav, observer, lightbox, form) | ⬜ not started |
| 9 | SEO layer (meta, hreflang, JSON-LD, OG, sitemap) | ⬜ not started |
| 10 | Contact relay (.NET 9) | ⬜ not started |
| 11 | Tests (vitest + playwright) | ⬜ not started |
| 12 | Docker + CI | ⬜ not started |
| 13 | Verification pass against acceptance criteria | ⬜ not started |
Legend: ⬜ not started · 🟡 in progress · ✅ done · ⛔ blocked
Environment
- Node v22.23.1 · pnpm 9.15.9 · .NET SDK 10.0.201 (relay targets
net9.0) · Docker 29.3.1 - Repo initialised locally; remote
git.cesnimda.uk/cesnimda/ResumeSite.git(push when instructed).
Deviations from spec (with rationale)
- Content stored as typed TS modules validated by zod, not Astro content-collection
entries (DATA_MODEL / I18N_SPEC §3 described "content collections with per-locale
entries"). Rationale: the content is highly structured (not markdown documents) and the
nested
{en,no}single-entry model serves the spec's own stated goal — "facts exist once, prose exists twice" — better than Astro's parallel per-locale entries, which can't express author-once invariance natively. All required properties are preserved: zod schema validation at build (src/lib/schema.ts), structural EN/NO parity by construction, and CI-testable getters (src/lib/content.ts). Same validation guarantee, cleaner authoring, no duplication. - Sitemap hand-rolled from the slug map instead of
@astrojs/sitemap. Rationale: the slug map is the single route contract (ARCHITECTURE A5) and localised slugs (prosjekter vs projects) don't fit the integration's parallel-slug assumption. Hand-rolling keeps one source of truth and correct hreflang alternates.
Prerequisite substitutions in place (interim, non-blocking)
- Portrait + project screenshots use a
placeholder:scheme (styled skeletons) until the seeded-data capture pass and real headshot are provided. Real assets drop straight into the same content refs. - CV download targets are the current PDFs (
public/cv/…); the ATS-safe rework replaces the files at the same URLs.
Open questions / blocked-on-user
None yet.
Prerequisites carried from Phase 1/2 (not blocking scaffold)
- Screenshot capture pass on seeded demo data (JobTrack, InboxIntel) — placeholders used until provided.
- ATS-safe CV rework (EN/NO) — current PDFs wired as download targets meanwhile.
- Native-Norwegian review pass of NO content — launch gate.
- Legacy WordPress URL inventory for redirect/410 map.