074199c6566aba7d64c52863d9c407e5b2521448
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>
jeanlucmakiola.de
Personal website + blog. Built with Astro, deployed on self-hosted Coolify, analytics via self-hosted Umami.
See PLANNING.md for the decisions and roadmap.
Develop
npm install
npm run dev # http://localhost:4321
npm run build # output -> dist/
npm run preview # serve the built site locally
Writing a post
Create a Markdown file in src/content/blog/, e.g. my-post.md:
---
title: My post
description: One-line summary (used for SEO + RSS).
pubDate: 2026-06-28
tags: [notes]
draft: false # set true to hide from listings/feeds
---
Body in Markdown.
The filename (minus extension) becomes the URL slug: /blog/my-post/.
Commit + push → Coolify rebuilds → live.
Analytics (Umami)
Analytics is off unless these env vars are set (so it stays off in dev). Set them as build-time variables in Coolify:
| Variable | Value |
|---|---|
PUBLIC_UMAMI_SRC |
https://<your-umami>/script.js |
PUBLIC_UMAMI_WEBSITE |
the website id (UUID) from Umami |
Deploy on Coolify
This repo ships a multi-stage Dockerfile (build with Node → serve dist/
with Caddy on port 80).
- New Resource → Dockerfile (or auto-detect), point at this repo.
- Set the two
PUBLIC_UMAMI_*build variables. - Set the domain to
jeanlucmakiola.de; Coolify provisions HTTPS. - Deploy Umami separately (Coolify has a one-click Umami template), then copy its script URL + website id into the build variables above.
SEO
- Sitemap at
/sitemap-index.xml(via@astrojs/sitemap) - RSS at
/rss.xml - Canonical URLs + Open Graph/Twitter tags in
src/components/BaseHead.astro robots.txtinpublic/- Add an
og-default.png(1200×630) topublic/for link previews.
Description
Languages
Astro
45.9%
CSS
45.4%
TypeScript
6.2%
JavaScript
1.3%
Dockerfile
1.2%