Files
InsanityLab-web/apps/platforms
AdrianoDev 89d2186e69 Il vecchio sottodominio esce anche dal compose del ramo
insanitylab.tielogic.xyz e' stato tolto dal DNS: una regola Traefik che lo
nomina fa fallire una sfida ACME a ogni tentativo, ed e' cio' che Let's
Encrypt limita. Resta il redirect di www.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EndnceRA5WnA6rvA5iV9WL
2026-09-03 12:41:53 +00:00
..

InsanityLab — aree riservate (apps.insanitylab.it)

Applicazione Astro autosufficiente con le tre aree riservate: Biohacking Campus, Stress Index e Longevity. Nasce il 03/09/2026 separando dal sito (apps/sito, insanitylab.it) tutto ciò che sta dietro un login.

Cosa la rende separata

Sito Quest'app
Host insanitylab.it apps.insanitylab.it
Utenti 3 redazionali (admin, superuser, user) uno per ogni cliente del centro (piattaforme, cliente, trainer, admin)
Database insanitylab.db (contenuti, articoli, utenti del sito) piattaforme.db + longevity.db + identity.db
Login /admin/login, solo redazione /login, ed è l'unica porta

Non c'è SSO e non c'è cookie condiviso: una sessione del sito qui non vale, ed è la separazione, non un difetto. Le due lib/auth.ts sono parenti ma non sono la stessa cosa — ~170 righe duplicate una volta sola, libere di divergere come già divergono i ruoli.

Sviluppo

npm ci
npm run dev                      # http://localhost:4321
npm test                         # 26 file, 197 test
npm run create-user -- <nome> <password> <ruolo>   # ruoli: piattaforme, cliente, trainer, admin

I dati stanno in data/ (gitignorata): piattaforme.db, longevity.db, identity.db.

Rilascio

⚠️⚠️ Il DNS viene prima del container. apps.insanitylab.it deve già risolvere verso l'IP della VPS quando si alza lo stack: avviarlo prima significa una catena di sfide TLS fallite, e Let's Encrypt limita proprio quelle. La zona è su Aruba, serve un record A apps → l'IP della macchina.

mkdir -p /opt/docker/insanitylab-platforms/data      # i dati stanno FUORI dal clone git
docker compose up -d --build
node scripts/migra-utenti.mjs                        # prova a vuoto
node scripts/migra-utenti.mjs --applica              # porta gli utenti dal DB del sito

Trappole già pagate

⚠️ Le versioni si fissano esatte. ^7.0.5 sulla nuova app aveva risolto ad astro 7.3.0, che con @astrojs/node 11.1.5 non si parla ("./_internal/logger" is not exported) e il build muore. Astro, l'adapter node e l'integrazione react sono pinnati alle stesse versioni che girano in produzione sul sito.

⚠️ security.allowedDomains in astro.config.mjs non è decorativo. Dietro Traefik il TLS termina al proxy: senza quell'elenco Astro ignora X-Forwarded-Proto/Host e il controllo CSRF respinge ogni POST con 403 — cioè il login smette di funzionare e l'errore sembra «credenziali sbagliate».

⚠️ name: insanitylab-platforms nel compose. Senza, il progetto si chiamerebbe platforms (dal nome della cartella) e un down --remove-orphans dato altrove potrebbe toccare container che non sono suoi.

⚠️ Il default di canAccessPath è chiuso, al contrario del sito da cui viene: là le rotte non elencate (blog, upload) erano di chiunque fosse loggato, qui ogni sezione è di qualcuno. Una rotta nuova senza regola risulta vietata, e lo si scopre provandola.

⚠️ Le API rispondono con uno stato, non con un redirect (401/403 su /api/*): mandare un 302 verso il login a chi ha chiesto del JSON produce un 200 con dentro dell'HTML.

⚠️ Stress Index non ha un backend: src/lib/stress-index/data.ts sono dieci clienti inventati scritti a mano. In linea c'è la sua interfaccia, non i suoi dati.