Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
InsanityLab Website
Sito vetrina per InsanityLab con blog integrato e form di contatti.
Descrizione
Il progetto realizza un sito web per InsanityLab, combinando una vetrina aziendale con un sistema di blog gestito tramite SQLite e un form di contatti funzionante. L'architettura è costruita su Astro 7 con adapter Node.js per deployment su server, garantendo performance ottimali e SEO-friendly pages.
Stack Tecnologico
- Framework: Astro 7
- Runtime: Node.js (adapter standalone)
- Database: SQLite (better-sqlite3)
- Autenticazione: bcryptjs
- Email: Nodemailer
- Markup Editor: TipTap (rich text)
- Font System: @fontsource (Montserrat, Open Sans)
- Sitemap: endpoint runtime
/sitemap.xml(route vetrina, programmi e articoli pubblicati) - Testing: Vitest
- Linguaggio: TypeScript
Installazione
Prerequisiti
- Node.js 18+ e npm
Setup
# Installa dipendenze
npm install
# Copia il template di configurazione env
cp .env.example .env
# Crea il primo utente amministratore (dopo aver configurato il DB)
npm run create-user -- admin tuapassword
Modifica .env con le credenziali SMTP, percorsi database e upload directory secondo il tuo ambiente.
Comandi Disponibili
| Comando | Descrizione |
|---|---|
npm run dev |
Avvia il server di sviluppo (localhost:4321) |
npm run build |
Compila il progetto per production |
npm run preview |
Visualizza l'anteprima della build (locale) |
npm run start |
Avvia il server production (richiede npm run build preliminare) |
npm run test |
Esegui i test con Vitest |
npm run create-user |
Crea un nuovo utente: -- <nome> <password> [admin|editor] |
Gestione Contenuti
I testi e le immagini del sito vetrina sono contenuti taggati, modificabili senza toccare il codice tramite il pannello /admin/content. Ogni blocco di contenuto è identificato da un tag (ad esempio home.hero.title) e può essere aggiornato nel valore, negli stili predefiniti (dimensione, peso, colore) e — per le immagini — sostituito con un upload o riportato all'originale.
Il pannello raggruppa i tag per pagina, offre una ricerca per tag o contenuto e mostra per ogni blocco l'ultima modifica effettuata. Visitando il sito da utente autenticato con il parametro ?annotate=1 (link "Vedi sito con tag" nel pannello), ogni contenuto taggato viene evidenziato con un badge che rimanda direttamente al form di modifica corrispondente.
Sono previsti due ruoli utente: admin ha accesso completo (articoli del blog, contenuti, upload), mentre editor può operare esclusivamente sul pannello contenuti. Gli utenti si creano con npm run create-user -- <nome> <password> editor.
Struttura Progetto
insanitylab-website/
├── src/
│ ├── pages/ # Pagine Astro (routing automatico)
│ ├── components/ # Componenti Astro riutilizzabili
│ ├── layouts/ # Layout master
│ ├── utils/ # Funzioni di utilità
│ ├── env.d.ts # Type definitions globali
│ └── ...
├── data/ # Database SQLite e dati persistenti
│ └── insanitylab.db # (generato al primo avvio)
├── uploads/ # Directory per upload immagini e file
├── dist/ # Output build (server)
├── tests/ # Test suite
├── astro.config.mjs # Configurazione Astro
├── tsconfig.json # Configurazione TypeScript
├── vitest.config.ts # Configurazione test framework
├── .env.example # Template variabili di ambiente
├── .env # Variabili di ambiente (non versionato)
├── package.json # Dipendenze e script npm
└── README.md # Questo file
Configurazione Ambiente
Il file .env richiede le seguenti variabili:
SMTP_HOST: Host SMTP per invio emailSMTP_PORT: Porta SMTP (solitamente 587)SMTP_USER: Utente SMTPSMTP_PASS: Password SMTPCONTACT_TO: Email di destinazione contattiCONTACT_FROM: Email mittenteDB_PATH: Percorso database SQLiteUPLOADS_DIR: Cartella upload file
Development Workflow
- Avvia il server locale:
npm run dev - Modifica file in
src/(hot reload automatico) - Test:
npm run test - Build:
npm run build(verifica errori di build) - Commit: Con prefisso
feat:(feature) ochore:(manutenzione)
Deployment
# Build per production
npm run build
# Opzionalmente, preview locale
npm run preview
# In production, il server parte con:
npm run start
# Variabili ambiente in production vanno impostate sull'hosting
# (es. Hostinger VPS, Vercel, etc.)
Riferimenti Tecnici
Per dettagli su architettura, schema database, componenti e specifiche vedi:
/docs/superpowers/specs/2026-07-01-insanitylab-website-design.md/docs/superpowers/plans/2026-07-01-insanitylab-website.md
Problemi Comuni
better-sqlite3 fallisce su npm install
Se better-sqlite3 non compila, assicurati di avere build tools installati:
- Linux:
sudo apt-get install build-essential python3 - macOS: Xcode Command Line Tools (
xcode-select --install) - Windows: Visual Studio Build Tools o MinGW
Database locked
Se il database è locato durante i test, verifica che non ci siano processi in background che accedono a data/insanitylab.db.
Licenza
Proprietario InsanityLab.