Same structure as the Calendula page, but Agendula holds INTERNET and syncs
CalDAV itself, so the wording turns on "only to the server you entered"
rather than on the absence of the permission. Facts from the app repo:
storage modes, Keystore-encrypted credentials, RFC 6764 discovery,
Nextcloud Login Flow v2, Auto Backup exclusions, crash-report allowlist.
Both reached their pubDate but were still draft: true, so every daily
scheduled-deploy rebuild skipped them — the gate in src/utils/posts.ts
checks draft before pubDate, so the flag outranks the date indefinitely.
The Jul 6 flip (c321728) covered only the posts due that day; these two
were not yet due and were never revisited:
- caldav-colors (2026-07-08, 17 days overdue)
- the-feature-i-said-no-to (2026-07-10, 15 days overdue)
Verified with a production build: both render and appear in the blog
index, RSS feed, and sitemap.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
These posts had reached their pubDate but were still draft: true, so the
daily scheduled-deploy rebuild left them hidden — the publish gate in
src/utils/posts.ts checks draft before pubDate. Flip them to draft: false
so the date gate can release them:
- when-it-stopped-being-mine (2026-07-03)
- recurring-event-edit (2026-07-05)
- the-translator-who-emailed-me (2026-07-06)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
docs/blog-workflow.md: frontmatter/voice conventions, the draft+pubDate gate,
the daily deploy cron, publish checklists (scheduled vs immediate), and gotchas.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
First post released through the scheduling pipeline: draft:false with pubDate
today so the date gate passes. The other five stay draft/future-dated.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The instance runners advertise `dind`/`docker` labels, not `ubuntu-latest`, so
the job sat queued unmatched. Point runs-on at `docker`.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Technical, journey, and philosophy posts sourced from the Calendula issue
threads, reviewed for source-accuracy, standards, ethics, and voice. All
draft:true with staggered future pubDates; they stay hidden in prod until
approved (draft:false) and due.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
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>
- datenschutz.astro: DSGVO privacy policy (server logfiles, Hetzner as
Auftragsverarbeiter per Art. 28, cookieless Umami, self-hosted fonts,
data-subject rights, supervisory-authority complaint).
- consts.ts: extract shared LEGAL entity data; Impressum now reads from it.
- blog: "Why my calendar app has no internet permission" and
"Open standards as a constraint, not a checkbox".
- uses.astro: colophon of the site stack, Floret apps, and self-hosted infra.
- Footer: add Uses + Datenschutz links alongside Impressum.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Legally required Impressum for the Einzelunternehmen (Kleinunternehmer,
no VAT ID, not in Handelsregister). Covers § 5 DDG contact data,
§ 18 Abs. 2 MStV responsible person, § 36 VSBG, and liability/copyright
disclaimers. Linked from the footer on every page.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
node:22 ships npm 10, which rejects the npm-11-generated package-lock
("Missing: @emnapi/core"). Upgrade npm to 11 before npm ci.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
npm ci failed on node:22-alpine (musl): Astro 7's rolldown/oxc native
bindings pull @emnapi/core etc. that aren't resolved for musl. Build on
Debian glibc to match the lockfile's linux-x64-gnu deps.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
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>