Obelica Docs
Applicazioni

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

AppHost produzioneHost stagingContainerPorta
Adminwashdog-admin.obelica.comwashdog-admin.vps.obelica.comwash-dog-admin3000
Staffwashdog-staff.obelica.comwashdog-staff.vps.obelica.comwash-dog-staff3001
VoceValore
Repo/opt/obelica/repos/wash-dog-ferrara
StackTurborepo Next.js
Deploymonorepo-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-ferrara

Dal 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.com

Record espliciti produzione:

washdog-admin.obelica.com  A  129.212.141.97
washdog-staff.obelica.com  A  129.212.141.97

I 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_reminders presente nel journal Drizzle di produzione;
  • deploy reale con migration esplicita completato: build cached, @obelica/database db:migrate riuscito, container wash-dog-admin e wash-dog-staff ricreati, 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 su main.

Verifiche

Verifica produzione:

curl -I https://washdog-admin.obelica.com/
curl -I https://washdog-staff.obelica.com/

Smoke atteso per entrambi:

/      -> 307 /login
/login -> 200

Verifica 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_notes esisteva 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 a oklch(0.823 0.188 113.3) (#C6D12B). Verificato live nel CSS compilato.
  • Pulizia: rimosso graphify-out dal 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), tre fix/* 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.

AppHost betaContainerPorta
Adminbeta-washdog-admin.vps.obelica.comwash-dog-admin-beta3000
Staffbeta-washdog-staff.vps.obelica.comwash-dog-staff-beta3001
  • Branch beta; compose docker-compose.beta.yml; checkout /opt/obelica/repos/wash-dog-ferrara-beta.
  • Secrets wash-dog-ferrara-{admin,staff}-beta.env (copia prod, solo BETTER_AUTH_URL → host .vps beta).
  • Deploy: push su betadeploy-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 regge ferridj e 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.com combacia 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.com a ns1/ns2/ns3.digitalocean.com. Rollback = riflippare gli NS (zona Vercel lasciata intatta). Il sito resta su Vercel finché non lo si sposta sulla VPS.

On this page