Files
ResumeSite/PROJECT_STATUS.md
T
cesnimda 2184a1892f feat: content layer — zod schemas, validated bilingual data, locale view models
- 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>
2026-07-04 01:05:21 +02:00

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)

  1. 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.
  2. 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.