From 8e0a33b4fd0895cf4dce1779c081b21ab0bd0565 Mon Sep 17 00:00:00 2001 From: Davide Grilli Date: Tue, 25 Aug 2026 10:17:53 +0200 Subject: [PATCH] Add project documentation, license and gitignore --- .gitignore | 50 +++++++++++++++++++++++ CLAUDE.md | 114 +++++++++++++++++++++++++++++++++++++++++++++++++++++ LICENSE | 23 +++++++++++ README.md | 36 +++++++++++++++++ 4 files changed, 223 insertions(+) create mode 100644 .gitignore create mode 100644 CLAUDE.md create mode 100644 LICENSE create mode 100644 README.md diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..dba52f5 --- /dev/null +++ b/.gitignore @@ -0,0 +1,50 @@ +# dependencies +node_modules/ +.pnp/ +.pnp.js + +# env / secrets +.env +.env.* +!.env.example +*.pem +*.key + +# nuxt +frontend/.nuxt/ +frontend/.output/ +frontend/.data/ +frontend/dist/ +.nitro/ +.cache/ + +# strapi +cms/.strapi/ +cms/dist/ +cms/build/ +cms/.tmp/ +cms/public/uploads/* +!cms/public/uploads/.gitkeep +cms/.strapi-updater.json + +# caddy runtime +caddy/data/ +caddy/config/ + +# logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* + +# editors / os +.vscode/ +!.vscode/extensions.json +.idea/ +.DS_Store +Thumbs.db + +# misc +coverage/ +*.tsbuildinfo diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000..44df2ae --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,114 @@ +# CLAUDE.md + +This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. + +## Interazione + +- L'utente scrive in italiano. **Rispondi in italiano.** +- Codice, commenti, nomi di variabili, commit message, log e documentazione tecnica: **in inglese.** +- Nei commit **non aggiungere `Co-Authored-By: Claude`** né altri trailer di attribuzione. + +## Stato + +Repository a **stato bootstrap**: contiene solo questo file. Tutto ciò che segue descrive il +target, non l'esistente. Verifica sempre cosa esiste prima di assumere. + +Ordine di costruzione: + +1. `frontend/` — Nuxt 4 (`npx nuxi@latest init frontend --package-manager npm --no-install-git`) +2. `cms/` — Strapi 5 (`npx create-strapi@latest cms --typescript --dbclient=postgres --no-example --no-git-init`) +3. `docker-compose.yml` + `.env.example` — Postgres, cms, frontend +4. Content types Strapi + permessi ruolo Public (solo `find`/`findOne`) +5. Client Strapi in Nuxt + pagine blog +6. `caddy/Caddyfile` + hardening + +## Architettura + +```text +Browser → Caddy ─┬─ dominio pubblico → Nuxt 4 (SSR) → REST Strapi + └─ sottodominio CMS → Strapi 5 → PostgreSQL +``` + +- Strapi è la **sola** fonte di verità editoriale. Niente altro backend (no Express/Nest/Fastify): + se serve logica server, sta in Nitro (`frontend/server/`) o in un controller Strapi. +- I visitatori pubblici non si autenticano mai. Solo editor/admin usano l'auth Strapi. +- Nuxt parla con Strapi **server-side** (`STRAPI_URL` interno Docker). Il token privilegiato non + raggiunge mai il browser: se serve, sta in `runtimeConfig` (non `public`). +- Postgres non è esposto pubblicamente. Media su volume persistente, mai binari nel DB. + +## Comandi + +Package manager: quello del lockfile. Se non esiste ancora → `npm`. + +```bash +# frontend/ +npm run dev # dev server +npm run build # build produzione +npm run typecheck # nuxi typecheck — obbligatorio prima di dichiarare fatto +npm run lint + +# cms/ +npm run develop # Strapi con content-type builder attivo +npm run build # admin panel +npm run start # produzione + +# stack +docker compose up -d --build +docker compose logs -f cms +``` + +Nessun test framework è ancora configurato. Se ne aggiungi uno, documenta qui il comando per +lanciare **un singolo test**. + +## Modelli di contenuto + +| Type | Campi | +|---|---| +| Article | title, slug (UID da title), excerpt, content (rich text), cover, author (rel), category (rel), tags (rel n:n), publishedDate, seoTitle, seoDescription, seoImage | +| Category | name, slug | +| Tag | name, slug | +| Author | name, biography, image | + +Draft & Publish attivo su Article. Le URL pubbliche usano lo **slug**, mai l'id numerico. + +## Frontend + +Rotte: `/`, `/blog`, `/blog/[slug]`, `/category/[slug]`. + +- SSR o prerender per tutto ciò che è indicizzabile. Mai pagine blog client-only senza motivo scritto. +- `