# Portfolio Redesign — Phase 2 Deliverables (Architecture & Technical Specification, no code) Status: **complete, awaiting approval** · July 2026 · Builds on approved Phase 1 (`../design/`) ## Index - [TECH_SPEC.md](TECH_SPEC.md) — stack evaluation & recommendation (Astro 5 + Tailwind 4 tokens, CSS-first motion, no i18n library, .NET 9 contact relay, testing/quality gates) - [ARCHITECTURE.md](ARCHITECTURE.md) — system overview, repo layout, layering, ADR summary, performance/security posture, failure modes - [ROUTING_SPEC.md](ROUTING_SPEC.md) — canonical EN↔NO route table (slug map contract), redirects, legacy-WP handling, `/Linkedin` preservation - [I18N_SPEC.md](I18N_SPEC.md) — three-mechanism i18n (routes/dictionary/content), fallback rules, translation workflow - [DATA_MODEL.md](DATA_MODEL.md) — content collections, schemas, locale-invariant field inheritance, CI validation rules - [COMPONENT_ARCHITECTURE.md](COMPONENT_ARCHITECTURE.md) — component tree, 5 behaviour modules (≤15 kB total), token/data-attribute contracts - [ANIMATION_SPEC.md](ANIMATION_SPEC.md) — Phase 1 concepts A1–A10 mapped to CSS/observer mechanisms, reduced-motion layer, perf rules - [SEO_SPEC.md](SEO_SPEC.md) — metadata, hreflang from slug map, JSON-LD, build-time OG images, WP-migration protection - [DOCKER_SPEC.md](DOCKER_SPEC.md) — site (nginx static) + contact-relay images, dev containers, compose topology, env vars - [DEPLOYMENT_SPEC.md](DEPLOYMENT_SPEC.md) — Gitea Actions pipeline, staging, cutover plan from WordPress, rollback, DoD ## Headline decisions requiring sign-off before Phase 3 1. **Astro 5 (static output) over Next.js** — content site, zero runtime JS by default; React competence is proven by the case studies, judgement by this choice (TECH_SPEC §2) 2. **No animation/i18n/state libraries** — CSS + 5 tiny TS modules, ≤15 kB JS total (TECH_SPEC §4–6) 3. **Contact form = self-hosted .NET 9 relay container** with mailto/copy fallback (TECH_SPEC §7) 4. **Everything self-hosted**: Gitea Actions CI, Gitea container registry, deploy to existing server behind existing reverse proxy (DOCKER/DEPLOYMENT) 5. **Content lives in git** (schema-validated collections), no CMS (ARCHITECTURE A3) 6. **Staging env + dark-standby WP cutover** with redirect/410 map and `/Linkedin` redirect preserved (DEPLOYMENT §3, ROUTING §2) ## Phase 3 prerequisites carried forward - Screenshot capture pass on seeded demo data (JobTrack, InboxIntel) - ATS-safe CV rework (both languages) — becomes the download default - Native-Norwegian review pass of all NO content (launch gate) - Legacy WordPress URL inventory for the redirect map