Wash Dog Ferrara
Scheda operativa per turborepo wash-dog-ferrara
Wash Dog Ferrara
Stato operativo
Turborepo deployato su VPS come due applicazioni distinte. Produzione migrata alla VPS il 2026-07-02 tramite record espliciti nella zona Vercel DNS di obelica.com.
Runtime e deploy
| App | Host produzione | Host staging | Container | Porta |
|---|---|---|---|---|
| Admin | washdog-admin.obelica.com | washdog-admin.vps.obelica.com | wash-dog-admin | 3000 |
| Staff | washdog-staff.obelica.com | washdog-staff.vps.obelica.com | wash-dog-staff | 3001 |
| Voce | Valore |
|---|---|
| Repo | /opt/obelica/repos/wash-dog-ferrara |
| Stack | Turborepo Next.js |
| Deploy | monorepo-next-docker |
| Env file admin | /opt/obelica/secrets/apps/wash-dog-ferrara-admin.env |
| Env file staff | /opt/obelica/secrets/apps/wash-dog-ferrara-staff.env |
Deploy centralizzato:
/opt/obelica/infra/bin/obelica app deploy wash-dog-ferraraDal 2026-07-04 il target in /opt/obelica/infra/config/deploy-apps.tsv esegue
anche le migration Drizzle prima di ricreare i container. Lo step usa
wash-dog-ferrara-admin.env, passa DATABASE_URL a un container Node
effimero, imposta PGSSLMODE=no-verify per DigitalOcean Managed Postgres e
lancia pnpm --filter @obelica/database db:migrate.
Gli env runtime admin/staff includono anche PGSSLMODE=no-verify per il
driver pg dell'app. Backup creati il 2026-07-04 prima della modifica:
wash-dog-ferrara-admin.env.bak-20260704005844 e
wash-dog-ferrara-staff.env.bak-20260704005844.
DNS e TLS
obelica.com resta su nameserver Vercel:
ns1.vercel-dns.com
ns2.vercel-dns.comRecord espliciti produzione:
washdog-admin.obelica.com A 129.212.141.97
washdog-staff.obelica.com A 129.212.141.97I record espliciti prevalgono sulla wildcard Vercel *.obelica.com; non e' stato fatto cutover globale di obelica.com.
Traefik:
wash_dog_admin: Host(`washdog-admin.vps.obelica.com`) || Host(`washdog-admin.obelica.com`)
wash_dog_staff: Host(`washdog-staff.vps.obelica.com`) || Host(`washdog-staff.obelica.com`)TLS gestito da Traefik/Let's Encrypt sui due host produzione e sui due host staging.
Auth e sessioni
Preflight 2026-07-02: BETTER_AUTH_URL negli env admin/staff risulta gia' allineato ai domini produzione washdog-*.obelica.com. Non stampare o copiare i valori completi degli env in chat/log.
Database, storage e backup
Database su DigitalOcean Managed PostgreSQL (wash_dog_db secondo documentazione database). Storage escluso dalla migrazione storage per ora. Cron job applicativi documentati in Operations/Cron Jobs.
Verifica 2026-07-04:
- migration
0030_admin_simplification_reminderspresente nel journal Drizzle di produzione; - deploy reale con migration esplicita completato: build cached,
@obelica/database db:migrateriuscito, containerwash-dog-adminewash-dog-staffricreati, smoke admin 200 al secondo tentativo; - env runtime aggiornati con
PGSSLMODE=no-verify, container ricreati e smoke admin/staff 200; - per nuovi cambi schema, il PR applicativo deve includere il file SQL in
packages/database/drizzle/prima del merge sumain.
Verifiche
Verifica produzione:
curl -I https://washdog-admin.obelica.com/
curl -I https://washdog-staff.obelica.com/Smoke atteso per entrambi:
/ -> 307 /login
/login -> 200Verifica forzata VPS se i resolver locali hanno cache vecchia:
curl -I --resolve washdog-admin.obelica.com:443:129.212.141.97 https://washdog-admin.obelica.com/
curl -I --resolve washdog-staff.obelica.com:443:129.212.141.97 https://washdog-staff.obelica.com/Rollback
Rollback DNS rapido: rimuovere i record espliciti washdog-admin e washdog-staff dalla zona Vercel DNS obelica.com. In quel caso gli host tornano a risolvere tramite wildcard Vercel.
Non modificare la wildcard *.obelica.com per rollback di Wash Dog.
Consolidamento pre-consegna 2026-07-03 (sera)
Preparazione alla consegna del gestionale (admin + staff):
- Main unificato: mergiate le PR #203 (note cane staff), #198 (calendario)
e #202 (workflow admin +
must_change_password); gli 8 commit infra del VPS sono ora anche su GitHub. GitHub main = Forgejo main = deploy VPS =9c04175— un'unica fonte di verità. - Migrazione DB 0029 applicata al managed Postgres (colonna
users.must_change_password;dog_notesesisteva già): journal drizzle a 31, verificata. Eseguita dalla workstation con CA del cluster via doctl. - Rebrand giallo-verde: il primary era rimasto fucsia in contrasto con
docs/BRAND.md; portata tutta la famiglia token aoklch(0.823 0.188 113.3)(#C6D12B). Verificato live nel CSS compilato. - Pulizia: rimosso
graphify-outdal repo (1379 file di artefatti, +gitignore); cancellati 10 branch locali e 4 remoti superati. - Verifiche: typecheck 7/7, 460/460 unit test, build di produzione locale di entrambe le app, deploy autodeploy verde (run 119), smoke 200 su admin e staff, log puliti.
- Branch residui da rivedere con il team:
feature/wash-dog-calendar-module(+43),feature/orari-operatori-redesign(+4), trefix/*da 1 commit — tutti ≥4 settimane, possibile lavoro non mergiato.
Incidente risolto 2026-07-03: voice-report senza AI Gateway
La feature voice-report dello staff falliva in produzione con
GatewayError "Unauthenticated. Configure AI_GATEWAY_API_KEY": la variabile
non era configurata ne' sul VPS ne' sul progetto Vercel (feature nata dopo il
cutover). Fix: aggiunta AI_GATEWAY_API_KEY a
wash-dog-ferrara-staff.env riusando la chiave AI Gateway del team Vercel
bona-pro (le chiavi gateway sono team-level; backup env in
.bak-20260703b), container wash-dog-staff ricreato e verificato (env
presente, HTTP 200, log puliti).
Punti aperti
- creare una chiave AI Gateway dedicata a Wash Dog e sostituire quella di team riusata per il fix voice-report;
- fare smoke autenticato con credenziali reali admin/staff (incluso un voice-report reale per chiudere la verifica del fix);
- verificare flussi cron e notifiche reali;
- decidere se in futuro introdurre domini dedicati fuori da
obelica.com; - includere Wash Dog nel disegno complessivo Obelica solo come sottodominio gia' migrato, non come motivo per spostare apex/www.
Beta preview restyling (2026-07-20)
Anteprima pubblica del restyling (design system "Berry di marca") in parallelo
alla produzione, per far provare la nuova grafica al cliente prima del merge su main.
| App | Host beta | Container | Porta |
|---|---|---|---|
| Admin | beta-washdog-admin.vps.obelica.com | wash-dog-admin-beta | 3000 |
| Staff | beta-washdog-staff.vps.obelica.com | wash-dog-staff-beta | 3001 |
- Branch
beta; composedocker-compose.beta.yml; checkout/opt/obelica/repos/wash-dog-ferrara-beta. - Secrets
wash-dog-ferrara-{admin,staff}-beta.env(copia prod, soloBETTER_AUTH_URL→ host.vpsbeta). - Deploy: push su
beta→deploy-beta.yml→/opt/obelica/infra/scripts/deploy-app-beta.sh. - DB CONDIVISO con la produzione (nessuna migration; il beta non esegue
db:migrate). ⚠️ Le scritture nel beta toccano i dati reali. - Solo host
.vps.obelica.com(wildcard Vercel*.vps); TLS Let's Encrypt via Traefik. Dominio pulito richiederebbe record espliciti Vercel. - Teardown:
cd /opt/obelica/repos/wash-dog-ferrara-beta && docker compose -f docker-compose.beta.yml down.
Migrazione DNS obelica.com a DigitalOcean (2026-07-20)
obelica.com era rimasto su nameserver Vercel (a differenza degli altri 8
domini già su DO). Preparata la zona DO come specchio 1:1 della zona Vercel,
pronta per il cutover dei nameserver su Hostinger.
- Sito su Vercel (resta lì): apex
@→A 76.76.21.21,www/wildcard*→CNAME cname.vercel-dns.com,panda-agency→ CNAME Vercel. Progetti Vercel:obelica-web(apex+www),ferri-dj(ferridj),macelleria(la-bosca, in realtà su VPS via A). Il wildcard*→Vercel reggeferridje altri sotto-domini Vercel. - Su VPS (A → 129.212.141.97): washdog-admin/staff, la-bosca, www.la-bosca,
vps,
*.vps, test. - Email invariata: MX Hostinger, SES (
send), SPF/DKIM/DMARC, CAA — parità ✓. - Verificato pre-cutover: ogni record via
ns1.digitalocean.comcombacia con Vercel; apex via DO (76.76.21.21) serve il sito (307 Vercel); washdog via DO (VPS) → /login 200. - Cutover: cambiare i nameserver su Hostinger da
ns1/ns2.vercel-dns.comans1/ns2/ns3.digitalocean.com. Rollback = riflippare gli NS (zona Vercel lasciata intatta). Il sito resta su Vercel finché non lo si sposta sulla VPS.