# INFORMATION_ARCHITECTURE.md ## 1. Site map ``` / Home (EN default) /no Hjem (Bokmål) │ ├── /projects Projects index (teaser cards) /no/prosjekter │ ├── /projects/jobtrack Case study: JobTrack /no/prosjekter/jobtrack │ ├── /projects/inboxintel Case study: InboxIntel /no/prosjekter/inboxintel │ └── /projects/homelab Capability page: Self-hosted /no/prosjekter/hjemmelab │ infrastructure lab ├── /experience Experience & timeline /no/erfaring ├── /about About + photo + languages + interests /no/om-meg ├── /contact Contact (form + direct channels) /no/kontakt └── /cv CV hub (EN/NO download, web-readable /no/cv version, ATS note) 404 Styled, bilingual, links home ``` **Depth rule:** nothing is more than 2 levels deep. Home teases everything; dedicated pages carry depth. This replaces the current one-pager because case studies need URLs of their own (shareable by recruiters into ATS/Slack, individually indexable per language). **Home remains a narrative one-page scroll** (hero → proof → skills → featured projects → experience summary → about teaser → contact CTA) so the P1 fast lane never requires navigation. Deep pages serve P2/P4. ## 2. Navigation model **Header (persistent, all pages):** ``` [CB monogram] Projects Experience About Contact | [EN/NO] [☾/☀] [Download CV ▾] ``` - Monogram → home. 4 nav items max — recruiters don't explore menus. - `Download CV ▾` is a split-button: primary action downloads the CV matching current locale; the chevron reveals the other language. Persistent = criterion "CV in ≤1 interaction from any scroll position". - Header is sticky, shrinks on scroll (see SCROLL_EXPERIENCE.md); backdrop blurs over content. - Mobile: monogram + CV button + hamburger (full-screen overlay panel, large tap targets, language + theme controls inside the panel top). **Footer (all pages):** e-mail, LinkedIn, git.cesnimda.uk, CV both languages, language switch repeat, "Built by me — [how this site works]" link (small meta-page or case-study footnote; a deliberate P2 hook). **Local navigation inside case studies:** right-side "On this page" mini-TOC (desktop ≥1200px only): Problem · Architecture · Decisions · Security · Outcome · Next. ## 3. Homepage section order & rationale | # | Section | Serves | First-fact placement | |---|---|---|---| | 1 | **Hero** — name, role line, 2-line summary, location/permit/availability chips, CTAs (View projects / Download CV), portrait | P1 P3 | Everything from RECRUITER §2.1 | | 2 | **Proof strip** — 4 compact stat/fact tiles: `8+ yrs experience` · `UK public sector` · `.NET / React / Docker` · `Based in Tønsberg, NO` | P1 | Reinforces scan pass | | 3 | **Skills matrix** — 3 columns (Development / DevOps & Infrastructure / Practices), grouped chips with context lines, no percentage bars | P1 P2 | Keyword match | | 4 | **Featured projects** — 2 large case-study cards (JobTrack, InboxIntel) + 1 slim homelab card; each: screenshot, 1-line problem, stack chips, "Read case study →" | P2 P4 | Deep-lane entry | | 5 | **Experience** — compact vertical timeline (System Developer 2015–2023 emphasised; earlier roles collapsed one-liners) | P1 P3 | Employment verification | | 6 | **About teaser** — photo, 3 sentences, language levels, "More about me →" | P3 | Human trust | | 7 | **Contact CTA band** — "Looking for a systems developer in Norway?" + e-mail button + form link | all | Conversion | ## 4. Case study page template (both projects share it) ``` 1. Header: project mark + name, one-line value prop, status chip (Active / In development), stack chips, links (live demo if applicable · repository) 2. Hero screenshot (framed browser mock, themed) 3. TL;DR box — 4 bullets: What / Why / Stack / My role ← the only part P1 reads 4. Problem & context 5. Architecture — diagram first, then short prose (frontend / API / data / workers / integrations) 6. Key decisions & trade-offs — 3–5 numbered decisions, each: choice, alternative, why 7. Security & production notes — auth, secrets, encryption-at-rest, backups, CI 8. Screenshots gallery — 3–5 annotated captures 9. What I'd improve next — honest, specific 10. Footer nav: ← other project | All projects ``` Content per project sourced from `website_details.md` (JobTrack) and InboxIntel README/docs — see CONTENT_STRATEGY.md §4. ## 5. Bilingual architecture (conceptual) - **URL strategy:** path-prefix locales. English at root (`/projects/jobtrack`), Norwegian under `/no/` with **localised slugs** (`/no/prosjekter/jobtrack`). Rationale: root-EN keeps existing inbound links and international reach; `/no/` prefix is the conventional, SEO-clean pattern; localised slugs signal genuine Norwegian content. - **Language switch behaviour:** switches to the *same page* in the other language (per-page mapping table), never to the other homepage. Preference remembered for return visits; first visit may show a one-time, dismissible "Denne siden finnes på norsk" hint if the browser prefers Norwegian — never an auto-redirect (recruiters share links across languages; links must stay stable). - **Parity rule:** every page exists in both languages; content is *equivalent, not identical* (CONTENT_STRATEGY §5). If a page ever ships EN-first, the NO version shows a short native-Norwegian summary + "full versjon på engelsk" link — never machine output, never a broken switch. - **SEO (conceptual):** `hreflang` pairs on every page + `x-default` → EN; per-language titles/descriptions/OpenGraph; per-language sitemap entries; canonical per locale (no cross-language canonicals — the versions are alternates, not duplicates). ## 6. Content model (design-level, informs Phase 2 data model) ``` Profile name, roleLine ×2 lang, summary ×2, chips (location, permit, availability, languages), photo variants, links SkillGroup title ×2, ordered skills[] {name, contextLine ×2 (optional)} Project slug ×2, name, valueProp ×2, status, stack[], links[], tldr ×2, sections[] ×2 (problem/architecture/decisions/ security/next), media[] {image, alt ×2, caption ×2}, diagram ExperienceItem employer, role ×2, period, location, summary ×2, highlights[] ×2, emphasis (featured | compact) Page meta title ×2, description ×2, ogImage per lang ``` Every user-visible string exists per-language by construction — this is the "avoid duplication issues" answer: one structural source, two content channels, no forked page trees.