ADR-0005: Wagtail as the CMS for gamine.org¶
Status: Accepted
Date: 2026-05-21
Decision-maker: João Brazão
Context¶
gamine.org was on WordPress/SiteGround (third-party cloud). The replacement must be self-hosted, Python-native (to match the JB stack), multilingual (PT+EN), and expose a programmatic import API for the gamine-brain "factory → product" pipeline.
Alternatives evaluated: Strapi (Node.js — wrong runtime), Ghost (Node.js + no i18n), Contentful (SaaS — violates sovereignty boundary), Payload CMS (Node.js).
Decision¶
Wagtail 6.x (Django/Python) — self-hosted on VPS at /opt/gamine-cms, Dockerised,
PostgreSQL storage in infra-postgres (gamine_cms DB), MinIO for media.
Key factors: Python runtime, wagtail-localize for PT/EN, server-side rendering (no headless double-build), django-otp for admin 2FA, RGPD-compliant by default.
Consequences¶
- Single Python/Docker ecosystem across all JB services.
- gamine-brain approve flow POSTs to
/api/cms/import/post/to create Wagtail drafts. - Editor Guide (PT) needed for Marta + Alice (Vikunja #646).
- Django migrations add deployment ceremony; managed via
manage.py migratein entrypoint.
Related¶
- ADR-0001: No public cloud / no GitHub
- ADR-0004: Paperclip skills architecture