960b007ba79b6b50e9a68dc40eccaa95b04ac773
Production traffic enters through Caddy, which terminates TLS for the public domain and the CMS subdomain and sets HSTS and the other security headers. PostgreSQL, Strapi and Nuxt publish no ports of their own. docker-compose.dev.yml publishes the ports on localhost and drops Caddy for local testing. It is a separate file rather than an override.yml so it can only be applied when passed explicitly, never by accident in production.
Blog
Blog platform: a public website built with Nuxt, and a private Strapi CMS where editors write the articles. Everything runs behind Caddy via Docker Compose.
Browser → Caddy ─┬─ public domain → Nuxt (website)
└─ cms subdomain → Strapi (CMS) → PostgreSQL
Status: bootstrap. The application code is not in place yet.
Getting started
Requires Docker and Node.js 20+.
cp .env.example .env # fill in the secrets, never commit this file
docker compose up -d --build
Then open the CMS URL to create the first admin account and start publishing. The public site picks up published articles automatically.
Working on it
cd frontend && npm run dev # website
cd cms && npm run develop # CMS
Architecture, conventions and constraints are documented in CLAUDE.md.
License
Proprietary — Copyright (c) 2026 Davide Grilli. All rights reserved. See LICENSE.
Languages
TypeScript
60.1%
Vue
29.7%
JavaScript
5%
CSS
4%
Dockerfile
0.9%
Other
0.3%