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>
This commit is contained in:
64
README.md
Normal file
64
README.md
Normal file
@@ -0,0 +1,64 @@
|
||||
# jeanlucmakiola.de
|
||||
|
||||
Personal website + blog. Built with [Astro](https://astro.build), deployed on
|
||||
self-hosted [Coolify](https://coolify.io), analytics via self-hosted
|
||||
[Umami](https://umami.is).
|
||||
|
||||
See [PLANNING.md](./PLANNING.md) for the decisions and roadmap.
|
||||
|
||||
## Develop
|
||||
|
||||
```sh
|
||||
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`:
|
||||
|
||||
```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.
|
||||
Reference in New Issue
Block a user