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>
71 lines
3.4 KiB
Markdown
71 lines
3.4 KiB
Markdown
# 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.
|