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

4.5 KiB
Raw Blame History

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.
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)

  • Framework: Astro (static)
  • Content authoring: Markdown-in-git
  • 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. Scaffold Astro project (hand-rolled, Astro 7, strict TS)
  2. Base layout + SEO head (title/description/canonical/OG), global styles (neutral)
  3. Homepage (intro + latest posts)
  4. Blog: content collection + index page + post template + tag pages
  5. @astrojs/sitemap + RSS feed + robots.txt
  6. Umami script in base layout (env-gated so it's off in dev)
  7. Dockerfile (build → static, served by Caddy) + Caddyfile
  8. 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.