feat: core layout, UI atoms, homepage + behaviour modules

- UI atoms: Chip, Button, SplitCvButton, LangSwitch, ThemeToggle, Card,
  SectionLabel, TraceMotif, FramedImage
- core: Base/Seo/Header/MobileNav/Footer/HintBar/SkipLink/ThemeScript
- homepage sections: Hero, ProofStrip, SkillsGrid, ProjectCards,
  ExperienceTimeline, AboutTeaser, ContactBand + Homepage composition (EN/NO)
- behaviour modules: theme, nav (overlay/hint/copy/header), observer (reveal/spy),
  lightbox, form — progressive enhancement, fail-silent
- SEO head component: meta, hreflang from slug map, JSON-LD, OG references
- move content data to src/data (avoid Astro reserved content-collection folder)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
cesnimda
2026-07-04 01:20:46 +02:00
parent 2184a1892f
commit 1fce1b3cec
45 changed files with 1891 additions and 27 deletions
+125
View File
@@ -0,0 +1,125 @@
import type { Meta } from '@lib/schema';
/* Per-page SEO metadata, handwritten per locale (SEO_SPEC §2). Keyed by pageId. */
export const meta: Meta = {
home: {
en: {
title: 'Connor Babbington — Systems Developer (.NET, React) · Tønsberg, Norway',
description:
'Systems developer with 8+ years building full-stack and backend systems in C#, .NET, React and Docker. Based in Tønsberg, Norway. Open to work.',
},
no: {
title: 'Connor Babbington — Systemutvikler (.NET, React) · Tønsberg',
description:
'Systemutvikler med 8+ års erfaring med fullstack og backend i C#, .NET, React og Docker. Bosatt i Tønsberg. Åpen for nye muligheter.',
},
},
projects: {
en: {
title: 'Projects — Connor Babbington',
description:
'Case studies of systems I have designed, built and run: JobTrack, InboxIntel and a self-hosted infrastructure lab.',
},
no: {
title: 'Prosjekter — Connor Babbington',
description:
'Gjennomganger av systemer jeg har designet, bygget og driftet: JobTrack, InboxIntel og en egendriftet hjemmelab.',
},
},
jobtrack: {
en: {
title: 'JobTrack — case study · Connor Babbington',
description:
'A full-stack job-application workspace: React, ASP.NET Core, SQLite, a local Ollama AI service and Docker. Architecture, decisions and security.',
},
no: {
title: 'JobTrack — prosjektgjennomgang · Connor Babbington',
description:
'Et fullstack arbeidsrom for jobbsøking: React, ASP.NET Core, SQLite, lokal Ollama-AI og Docker. Arkitektur, valg og sikkerhet.',
},
},
inboxintel: {
en: {
title: 'InboxIntel — case study · Connor Babbington',
description:
'Gmail analytics and safe bulk cleanup, built as Clean Architecture in .NET 8 with encrypted OAuth tokens and preview-before-delete.',
},
no: {
title: 'InboxIntel — prosjektgjennomgang · Connor Babbington',
description:
'Gmail-analyse og trygg masseopprydding, bygget som Clean Architecture i .NET 8 med krypterte OAuth-tokens og forhåndsvisning før sletting.',
},
},
homelab: {
en: {
title: 'Self-hosted infrastructure lab — Connor Babbington',
description:
'A home lab running Ubuntu, Docker, nginx, Gitea and monitoring — hands-on deployment and operations, and the deploy target for this site.',
},
no: {
title: 'Egendriftet hjemmelab — Connor Babbington',
description:
'En hjemmelab med Ubuntu, Docker, nginx, Gitea og overvåking — praktisk drift og utrulling, og utrullingsmålet for denne siden.',
},
},
experience: {
en: {
title: 'Experience — Connor Babbington',
description:
'Eight years as a systems developer in UK local government, from apprentice to full developer, plus self-directed product work in Norway.',
},
no: {
title: 'Erfaring — Connor Babbington',
description:
'Åtte år som systemutvikler i britisk offentlig sektor, fra lærling til utvikler, samt egen produktutvikling i Norge.',
},
},
about: {
en: {
title: 'About — Connor Babbington',
description:
'A systems developer based in Tønsberg, Norway, with a backend-leaning full-stack background and a habit of building and self-hosting projects.',
},
no: {
title: 'Om meg — Connor Babbington',
description:
'Systemutvikler bosatt i Tønsberg, med fullstack-bakgrunn med tyngde på backend og en vane for å bygge og drifte egne prosjekter.',
},
},
contact: {
en: {
title: 'Contact — Connor Babbington',
description:
'Get in touch about a systems developer role in Norway. E-mail, LinkedIn or the contact form — I usually reply within a day.',
},
no: {
title: 'Kontakt — Connor Babbington',
description:
'Ta kontakt om en systemutvikler-rolle i Norge. E-post, LinkedIn eller kontaktskjema — jeg svarer vanligvis innen en dag.',
},
},
cv: {
en: {
title: 'CV — Connor Babbington',
description:
'Download Connor Babbingtons CV in English or Norwegian — systems developer, 8+ years, .NET and full-stack.',
},
no: {
title: 'CV — Connor Babbington',
description:
'Last ned CV-en til Connor Babbington på engelsk eller norsk — systemutvikler, 8+ år, .NET og fullstack.',
},
},
colophon: {
en: {
title: 'Colophon — how this site works · Connor Babbington',
description:
'How this portfolio is built: Astro static site, CSS-first motion, bilingual by design, self-hosted in Docker with a small .NET contact relay.',
},
no: {
title: 'Kolofon — slik er siden bygget · Connor Babbington',
description:
'Hvordan denne porteføljen er bygget: Astro-statisk side, CSS-basert bevegelse, tospråklig fra bunnen, egendriftet i Docker med en liten .NET-relay.',
},
},
};