Files
jeanlucmakiola.de/PLANNING.md
Jean-Luc Makiola 074199c656 Initial site: Astro + M3 Expressive, projects, blog
Personal site & blog for jeanlucmakiola.de.

- Astro 7 static output; self-hosted Inter + JetBrains Mono (Fontsource)
- Material 3 Expressive design tokens (red accent over neutral surfaces)
- Home (hero + about + selected work + latest writing)
- /work index + per-app pages (Calendula, Agendula, floret-kit) with
  build-time Gitea release tags, brand-icon link rows, features grid,
  and an at-a-glance facts panel
- Blog via Markdown content collection; RSS, sitemap, robots, OG/SEO
- Privacy-respecting Umami analytics, env-gated (off in dev)
- Dockerfile (build -> Caddy) + Caddyfile for Coolify deploy

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-28 13:39:08 +02:00

82 lines
4.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# jeanlucmakiola.de — personal website
Status: **discussion / not started** · Started 2026-06-28
## Goal
A simple personal website (with room to grow into a blog), self-hosted on
Coolify, privacy-respecting analytics, solid SEO, and an AI-driven authoring
flow (content written as files by an agent, reviewed via git diff, auto-deployed
on push).
## Hard requirements
- Self-hosted deploy on **Coolify** (own infra)
- Privacy-respecting **analytics** (Umami preferred)
- **SEO**: sitemap, RSS, canonical URLs, Open Graph, fast/static
- **AI-driven flow**: agent can author/edit content via CLI/files (and/or API)
- Keep it simple; nothing crazy. Blog is a likely-but-later addition.
## Recommended stack (proposed)
| Concern | Choice | Why |
|----------------|------------------------------------------|-----|
| Framework | **Astro** (static output) | Content-first, zero-JS default, content collections, great SEO |
| Content | **Markdown/MDX in git** (`src/content/`) | AI writes files; git is the API; no lock-in |
| Analytics | **Umami**, self-hosted on Coolify | Privacy-respecting, cookieless, one `<script>` tag |
| SEO | `@astrojs/sitemap` + `@astrojs/rss` + OG | Mostly batteries-included |
| Deploy | Coolify static site (Docker/Nixpacks → `dist/`, served by Caddy/nginx) | Auto-deploy on git push |
| Design | TBD — align with Floret/M3 leanings later | per design-workflow rule, consult ui-ux-pro-max before building UI |
## AI authoring loop
1. Agent writes/edits `src/content/blog/<slug>.md` (frontmatter: title, date, description, tags)
2. User reviews `git diff`
3. Commit + push → Coolify rebuilds → live
## Decisions (locked 2026-06-28)
- [x] Framework: **Astro** (static)
- [x] Content authoring: **Markdown-in-git**
- [x] Analytics: **Umami**, self-hosted on Coolify
- [ ] Domain confirmed: jeanlucmakiola.de
- [ ] Scope of v1: homepage only, or homepage + blog from the start
## Build plan (v1)
1. [x] Scaffold Astro project (hand-rolled, Astro 7, strict TS)
2. [x] Base layout + SEO head (title/description/canonical/OG), global styles (neutral)
3. [x] Homepage (intro + latest posts)
4. [x] Blog: content collection + index page + post template + tag pages
5. [x] `@astrojs/sitemap` + RSS feed + robots.txt
6. [x] Umami script in base layout (env-gated so it's off in dev)
7. [x] Dockerfile (build → static, served by Caddy) + Caddyfile
8. [x] **Visual design pass** — M3 Expressive, brand-faithful (see below)
9. [ ] Add `og-default.png` (1200×630) to `public/`
10. [ ] Deploy Umami as a Coolify service (one-click template)
11. [ ] Deploy site on Coolify (Dockerfile build); set `PUBLIC_UMAMI_*` build vars
12. [ ] Point jeanlucmakiola.de DNS at Coolify; enable HTTPS
## Design system (M3 Expressive)
- Tokens in `src/styles/tokens.css` as `--md-sys-*` CSS custom properties
(color roles, type scale, shape, elevation, motion, 8dp spacing); light + dark.
- **Brand = red + monochrome.** `#FF4242` is an ACCENT only (logo dot, name
period, eyebrow tick, active-nav underline, one filled button, card arrows,
links). Surfaces are NEUTRAL gray — earlier red-tinted/red-bar version was
rejected as "too red heavy".
- The pine-silhouette asset is grayscale (not green) — confirmed; no green hue.
tertiary role is a warm neutral, not a color.
- Fonts: **Inter** + **JetBrains Mono**, self-hosted via Fontsource (no Google CDN).
- Homepage is a clean portfolio: hero → About → Selected work cards → Latest writing rows.
- Favicon = the rounded red "JM." mark; header is a typographic `JLM.` logotype.
- **Projects** are a content collection (`src/content/projects/*.md`, schema in
`content.config.ts`): frontmatter (name, order, status, released, platform,
summary, links{gitea,fdroid,donate,translate}) + Markdown body. Single source
of truth for both the homepage cards and `/work`.
- `/work` index lists all apps; `/work/<slug>` is a per-app page with its own
link set (F-Droid/Gitea/Donate/Translate, shown only when present) + overview.
Currently: Calendula (released), Agendula (in dev), floret-kit (design system).
## Verified
- `npm install` + `npm run build` succeed; 4 pages + RSS + sitemap generated.
- Astro 7.0.3, 0 npm audit vulnerabilities (2026-06-28).
- Screenshotted home/blog/post desktop + mobile (DARK mode). Light mode not yet
visually verified — headless couldn't force the scheme — but tokens are standard M3.
## Notes
- Coolify supports git-push auto-deploy; Umami has an official Docker image deployable as its own Coolify service.