|
1 | | -# Astro Starter Kit: Minimal |
| 1 | +# alexperronnet.com |
2 | 2 |
|
3 | | -```sh |
4 | | -pnpm create astro@latest -- --template minimal |
5 | | -``` |
| 3 | +Personal site of Alex Perronnet — software engineer based in Quimper, France. Quiet aurora aesthetic, two pages (home + 404), static output. |
| 4 | + |
| 5 | +**Live:** [alexperronnet.com](https://alexperronnet.com) |
6 | 6 |
|
7 | | -> 🧑🚀 **Seasoned astronaut?** Delete this file. Have fun! |
| 7 | +## Stack |
8 | 8 |
|
9 | | -## 🚀 Project Structure |
| 9 | +- **Astro 6** — static site, zero hydration cost (vanilla TypeScript for the few bits of interactivity) |
| 10 | +- **TypeScript** strict, `astro check` on CI |
| 11 | +- **fontsource** — Geist Variable + Geist Mono Variable, served locally |
| 12 | +- **Ultracite / Biome** — lint + format |
| 13 | +- **Husky + commitlint + lint-staged** on every commit |
| 14 | +- **Vercel** — hosting, cache and security headers in [`vercel.json`](./vercel.json) |
10 | 15 |
|
11 | | -Inside of your Astro project, you'll see the following folders and files: |
| 16 | +## Layout |
12 | 17 |
|
13 | | -```text |
14 | | -/ |
15 | | -├── public/ |
16 | | -├── src/ |
17 | | -│ └── pages/ |
18 | | -│ └── index.astro |
19 | | -└── package.json |
20 | 18 | ``` |
| 19 | +src/ |
| 20 | + config/site.ts ← identity, SEO, status, endpoints (single source of truth) |
| 21 | + styles/ |
| 22 | + tokens.css ← :root CSS custom properties (locked design) |
| 23 | + global.css ← reset, page chrome, shared animations |
| 24 | + layouts/layout.astro ← <head>, SEO, OG/Twitter, JSON-LD Person |
| 25 | + components/ |
| 26 | + aurora.astro ← decorative background (blobs + vignette + grain) |
| 27 | + header.astro ← <h1> name, status, greeting, date, "you are here" |
| 28 | + clock.astro ← live local time |
| 29 | + info.astro ← role / based-in / born-in / bio / links |
| 30 | + footer.astro ← live build hash (GitHub API) |
| 31 | + icons/ ← inline SVG icons |
| 32 | + scripts/ |
| 33 | + boot-home.ts ← entry point for / |
| 34 | + boot-not-found.ts ← entry point for /404 |
| 35 | + clock | header | location | commit | email | not-found .ts |
| 36 | + lib/{dom,time}.ts ← pure helpers |
| 37 | + pages/ |
| 38 | + index.astro |
| 39 | + 404.astro |
| 40 | +public/ ← favicons, og-image, manifest, robots.txt |
| 41 | +``` |
| 42 | + |
| 43 | +## Commands |
| 44 | + |
| 45 | +| Command | What it does | |
| 46 | +| ---------------- | ----------------------------------------- | |
| 47 | +| `pnpm install` | Install dependencies | |
| 48 | +| `pnpm dev` | Dev server on http://localhost:4321 | |
| 49 | +| `pnpm build` | Production build to `./dist/` | |
| 50 | +| `pnpm preview` | Serve the production build locally | |
| 51 | +| `pnpm typecheck` | `astro check` (strict TypeScript) | |
| 52 | +| `pnpm check` | Lint with Ultracite | |
| 53 | +| `pnpm fix` | Lint with auto-fix | |
21 | 54 |
|
22 | | -Astro looks for `.astro` or `.md` files in the `src/pages/` directory. Each page is exposed as a route based on its file name. |
| 55 | +## Architecture |
23 | 56 |
|
24 | | -There's nothing special about `src/components/`, but that's where we like to put any Astro/React/Vue/Svelte/Preact components. |
| 57 | +- **Locked design** — mood `dusk`, aurora `lively`, clock `glass`, format `auto`, pairing `sans-mono`, status `on`. Per the original brief; the tweak panel is not implemented. |
| 58 | +- **Styling** — per-component scoped `<style>` blocks (native Astro); shared resets and animations in [`src/styles/global.css`](./src/styles/global.css); design tokens in [`src/styles/tokens.css`](./src/styles/tokens.css). No Tailwind, no CSS modules. |
| 59 | +- **Scripts** — one feature module per concern (SRP), each exporting a single `init*` function. Two per-page bootstraps keep the 404 bundle slim. |
| 60 | +- **Env vars** — typed via `astro:env`. `VERCEL_GIT_COMMIT_SHA` powers the footer build hash; Vercel injects it automatically. |
| 61 | +- **Geolocation** — IP-based via `ipapi.co`, no browser prompt. Timezone city resolved instantly from `Intl`. |
| 62 | +- **A11y** — every animation respects `prefers-reduced-motion`. Aurora is `aria-hidden`. Each page has a single `<h1>`. |
25 | 63 |
|
26 | | -Any static assets, like images, can be placed in the `public/` directory. |
| 64 | +## SEO |
27 | 65 |
|
28 | | -## 🧞 Commands |
| 66 | +The layout ships canonical, `hreflang`, robots, OpenGraph (with dimensions + alt), Twitter Card, theme-color, web manifest, full favicon set, and a `schema.org/Person` JSON-LD with ISO 3166-1 country codes. |
29 | 67 |
|
30 | | -All commands are run from the root of the project, from a terminal: |
| 68 | +## Conventions |
31 | 69 |
|
32 | | -| Command | Action | |
33 | | -| :------------------------ | :----------------------------------------------- | |
34 | | -| `pnpm install` | Installs dependencies | |
35 | | -| `pnpm dev` | Starts local dev server at `localhost:4321` | |
36 | | -| `pnpm build` | Build your production site to `./dist/` | |
37 | | -| `pnpm preview` | Preview your build locally, before deploying | |
38 | | -| `pnpm astro ...` | Run CLI commands like `astro add`, `astro check` | |
39 | | -| `pnpm astro -- --help` | Get help using the Astro CLI | |
| 70 | +- **Branches** — work on `develop`, PR to `main`. `main` deploys to production via Vercel; PRs get preview deployments. |
| 71 | +- **Commits** — [Conventional Commits](https://www.conventionalcommits.org/) enforced by commitlint. |
| 72 | +- **Formatting** — `ultracite fix` runs on staged files via `lint-staged` at commit time. |
| 73 | +- **Filenames** — lowercase (kebab-case), including Astro components. |
40 | 74 |
|
41 | | -## 👀 Want to learn more? |
| 75 | +## License |
42 | 76 |
|
43 | | -Feel free to check [our documentation](https://docs.astro.build) or jump into our [Discord server](https://astro.build/chat). |
| 77 | +Personal project — code is not licensed for redistribution. |
0 commit comments