# ResumeSite — Connor Babbington portfolio Bilingual (English / Norwegian Bokmål) portfolio website. Static-first Astro site with a small self-hosted .NET contact relay, built to the specifications in [`docs/`](docs/). - **Design system & UX** (Phase 1): [`docs/design/`](docs/design/README.md) - **Architecture & technical spec** (Phase 2): [`docs/spec/`](docs/spec/README.md) - **Build status**: [`PROJECT_STATUS.md`](PROJECT_STATUS.md) · **Work list**: [`TODO.md`](TODO.md) ## Stack Astro 5 (static output) · TypeScript (strict) · Tailwind CSS 4 over CSS custom-property tokens · CSS-first motion (no animation library) · built-in i18n + typed dictionaries + content collections · zero client-state libraries · .NET 9 minimal-API contact relay · pnpm / Vitest / Playwright · Docker + nginx, self-hosted. ## Quick start (local, without Docker) ```bash cd site pnpm install pnpm dev # http://localhost:4321 ``` ## Quick start (Docker) ```bash # Development (HMR) docker compose -f deploy/docker-compose.dev.yml up # Production build preview docker compose -f deploy/docker-compose.yml up --build ``` See [`docs/spec/DOCKER_SPEC.md`](docs/spec/DOCKER_SPEC.md) and [`docs/spec/DEPLOYMENT_SPEC.md`](docs/spec/DEPLOYMENT_SPEC.md) for the full picture. ## Repository layout ``` site/ Astro project (pages, components, content, i18n, styles, scripts) relay/ .NET 9 minimal-API contact relay deploy/ compose files, nginx config, env templates tests/ Playwright end-to-end tests docs/ design (Phase 1) + spec (Phase 2) .gitea/ CI/CD workflows ``` ## Commands | Command | What it does | |---|---| | `pnpm dev` | Astro dev server with HMR | | `pnpm build` | Static production build → `site/dist/` | | `pnpm preview` | Serve the production build locally | | `pnpm check` | `astro check` + `tsc --noEmit` | | `pnpm lint` | ESLint + Prettier check | | `pnpm test` | Vitest unit tests | | `pnpm test:e2e` | Playwright end-to-end tests |