cecbda26b01fd5e630b3a47e252b9fbdecf419c7
Gate blog listings/RSS on pubDate<=now (in addition to !draft) via a shared getPublishedPosts() helper, so a post set to draft:false with a future pubDate publishes itself once a build runs on that day. Dev shows everything for preview. Add .gitea/workflows/scheduled-deploy.yml: a daily cron that pings the Coolify deploy hook so the static site rebuilds and the date gate advances. No file mutation, no repo write access — needs a runner + COOLIFY_DEPLOY_HOOK secret. 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%