Files
jeanlucmakiola.de/README.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

1.9 KiB
Raw Blame History

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

  1. New Resource → Dockerfile (or auto-detect), point at this repo.
  2. Set the two PUBLIC_UMAMI_* build variables.
  3. Set the domain to jeanlucmakiola.de; Coolify provisions HTTPS.
  4. 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.txt in public/
  • Add an og-default.png (1200×630) to public/ for link previews.