Founder Walkthrough · 6 BLOCKING MVP — copy-paste pronto

Per: Gregorio (founder) Stima totale: 2h30 (B1·10m + B2·20m + B3·1h + B4·15m + B5·10m + B6·15m) Target lift: Domenica 24 Mag 2026 · 6 giorni Riferimento audit: Multiverbe-Business/ops/audits/app-readiness-lockdown-lift-plan-2026-05-18.md Sequenza consigliata: B1 + B5 + B2 in mattinata (DNS propaga in parallelo); B3 + B4 + B6 in pomeriggio


🟢 B1 · Brevo domain verify TXT (10 min)

Sblocca: tutte le email transazionali (signup confirm, magic link, password reset, welcome paying, invoice receipt, booking confirmation cliente).

Step 1.1 · Apri Brevo Dashboard

URL diretto: https://app.brevo.com/senders/list

Step 1.2 · Vai "Senders, Domains and Dedicated IPs" → tab "Domains"

Click "Add a new domain" in alto a destra.

Step 1.3 · Aggiungi multiverbe.com

Input:

Domain: multiverbe.com

Click "Save".

Step 1.4 · Brevo ti mostra 3 record DNS da aggiungere

Te li mostra in una tabella tipo:

Type   | Host (Name)                       | Value
-------+-----------------------------------+------------------------------------------
TXT    | mail._domainkey.multiverbe.com    | brevo._domainkey...XXXX...
TXT    | multiverbe.com                    | v=spf1 include:spf.brevo.com ?all
TXT    | _dmarc.multiverbe.com             | v=DMARC1; p=none; rua=mailto:...

Copia ESATTAMENTE i valori che Brevo ti dà (sono unici per il tuo account).

Step 1.5 · Vai Register.it DNS

URL: https://controlpanel.register.it/dns/management

Login → cerca multiverbe.com → "Gestione DNS".

Step 1.6 · Aggiungi i 3 record TXT

Per ogni record:

  1. Click "Aggiungi record"
  2. Tipo: TXT
  3. Nome (Host):
    • Per DKIM: mail._domainkey
    • Per SPF: @ (root, vuoto)
    • Per DMARC: _dmarc
  4. Valore: copia esatto da Brevo (anche con virgolette se presenti)
  5. TTL: 3600
  6. Salva

Step 1.7 · Verify in Brevo

Torna su Brevo Domains. Click "Verify" accanto a multiverbe.com.

⏱️ Propagazione DNS: 5-60 minuti tipicamente. Se "Verify" fallisce, riprova ogni 10 min. Stato finale = ✅ "Authenticated".

Step 1.8 · Test invio

In Brevo → Senders → "Verify your sender" → invia mail test a metaverbe@gmail.com. Verifica che arrivi (non in spam).


🟢 B2 · DNS wildcard *.multiverbe.app (20 min)

Sblocca: i siti generati dal Site Builder Kimi sono raggiungibili come {slug}.multiverbe.app con HTTPS.

Aggiornato 2026-05-21: la discrepanza canon-vs-codice è stata risolta. Il dominio dei siti cliente è *.multiverbe.app (migrazione completata il 2026-05-19, v18: rimossi i record DNS legacy di sites.multiverbe.com). I passaggi qui sotto, scritti per *.sites.multiverbe.com su Register.it, sono superati: oggi il wildcard *.multiverbe.app è gestito da Vercel sul progetto multiverbe-sites. Conservati come riferimento storico.

Step 2.1 · Register.it DNS multiverbe.com

URL: https://controlpanel.register.it/dns/managementmultiverbe.com → "Gestione DNS"

Step 2.2 · Aggiungi CNAME wildcard

Tipo:   CNAME
Nome:   *.sites
Valore: cname.vercel-dns.com
TTL:    3600

Importante: nel campo "Nome" scrivi esattamente *.sites (con l'asterisco). NON scrivere *.sites.multiverbe.comRegister.it aggiunge automaticamente il dominio.

Salva.

Step 2.3 · Vercel project multiverbe-sites

URL: https://vercel.com/gregorio-ciurleos-projects/multiverbe-sites/settings/domains

Click "Add" in alto.

Input: *.sites.multiverbe.com

Click "Add".

Step 2.4 · Vercel mostra "Invalid Configuration" → aspetta + Refresh

Vercel sta aspettando la propagazione DNS. Aspetta 15-30 min, poi click "Refresh" icona accanto al dominio.

Se dopo 60 min resta "Invalid Configuration" → ricontrolla che il CNAME su Register.it sia esattamente *.sitescname.vercel-dns.com (NON IP literal).

Step 2.5 · SSL auto-provision

Quando Vercel passa a "Valid Configuration", SSL Let's Encrypt si genera automaticamente entro 5-10 min. Vedrai badge "Valid Configuration · SSL Certificate Issued".

Step 2.6 · Test

Apri in browser: https://demo-ristorante-test.sites.multiverbe.com

Risultato atteso: 404 page del sites-runtime (è normale, nessun sito ancora pubblicato con quel slug). L'importante è che HTTPS sia verde (no warning certificato).


🔴 B3 · Stripe live mode + 9 price IDs (~1h)

Sblocca: il pagamento reale del cliente. Senza questo, BillingPage genera Stripe Checkout ma con sk_test_* → carta reale rifiutata.

Step 3.1 · Stripe Dashboard → Activate account

URL: https://dashboard.stripe.com/settings/account

Toggle "Test mode" OFF (top-right). Stripe ti chiede di completare l'attivazione:

Dati richiesti:

  • Business name: Multiverbe
  • Business type: Individuale (Einzelfirma · da migrare a GmbH Q4)
  • VAT/UID: nessuno per ora (sotto soglia CH CHF 100k/anno)
  • IBAN/bank account: il tuo conto CH (PostFinance/UBS/Raiffeisen)
  • Founder ID document (carta identità scansionata)
  • 2FA enabled (Authenticator app)

⏱️ Attivazione Stripe può richiedere 24-48h se Stripe ha review automatica. Procedi e nel frattempo passa ai prossimi step.

Step 3.2 · Aspetta attivazione live mode

Email Stripe quando attivo. Status: dashboard banner verde "Stripe account active · Receive live payments".

Step 3.3 · Re-seed 9 prices in live mode

Quando live mode attivo, dimmi su chat e io eseguo:

cd /d/Desktop/Multiverbe
STRIPE_SECRET_KEY=sk_live_xxx node scripts/seed-stripe-prices.ts

Ti genera 9 price IDs (3 tier × 2 billing period + 3 setup fees):

  • STRIPE_PRICE_STARTER_MONTHLY=price_live_xxx
  • STRIPE_PRICE_STARTER_ANNUAL=price_live_xxx
  • ... 7 più ...
  • STRIPE_PRICE_SETUP_BUSINESS=price_live_xxx

Step 3.4 · Update Vercel env (sostituisci sk_test_* con sk_live_*)

URL: https://vercel.com/gregorio-ciurleos-projects/multiverbe-app/settings/environment-variables

Aggiorna in Production scope:

  • STRIPE_SECRET_KEYsk_live_xxx
  • VITE_STRIPE_PUBLISHABLE_KEYpk_live_xxx
  • I 9 STRIPE_PRICE_* con i nuovi IDs

Importante: tieni i sk_test_* come backup. Crea env var separata STRIPE_SECRET_KEY_TEST se vuoi mantenere test mode parallelo per smoke test.

Step 3.5 · Redeploy production

Vercel: project multiverbe-app → Deployments → ultimo → "..." → Redeploy.

Step 3.6 · Test pagamento reale (1 CHF + refund)

Vai app.multiverbe.app → Settings → Billing → Subscribe Starter Monthly → Stripe Checkout reale → carta tua → 1 CHF charged → refund immediato da Stripe Dashboard.


🟡 B4 · Stripe webhook live endpoint (15 min)

Sblocca: subscription create/update/delete + invoice paid/failed events processati dal nostro handler api/stripe/webhook.ts.

Step 4.1 · Stripe Dashboard → Webhooks

URL: https://dashboard.stripe.com/webhooks

Click "Add endpoint".

Step 4.2 · Endpoint URL

Endpoint URL: https://multiverbe.app/api/stripe/webhook
Description: Multiverbe production webhook handler

Se hai migrato a app.multiverbe.app, l'URL è https://app.multiverbe.app/api/stripe/webhook. Verifica nel codice api/stripe/webhook.ts riga 2.

Step 4.3 · Eventi da subscribere (9 events)

Click "Select events" → seleziona:

  • checkout.session.completed
  • customer.subscription.created
  • customer.subscription.updated
  • customer.subscription.deleted
  • customer.subscription.trial_will_end
  • invoice.payment_succeeded
  • invoice.payment_failed
  • customer.created
  • customer.updated

Click "Add events""Add endpoint".

Step 4.4 · Reveal Signing Secret

Stripe ti mostra whsec_xxxxx (signing secret). Copia subito (non lo rivedi più senza rotation).

Step 4.5 · Vercel env

Aggiungi/aggiorna in Production:

STRIPE_WEBHOOK_SECRET=whsec_xxxxx

Redeploy production.

Step 4.6 · Test webhook

Stripe Dashboard → Webhooks → il tuo endpoint → tab "Logs" → click "Send test webhook"checkout.session.completed test event.

Verifica:

  1. Stripe log: 200 OK
  2. Supabase tabella webhook_events: riga nuova con signature_verified=true + processed_at NOT NULL

🟢 B5 · Supabase Auth SMTP custom Brevo (10 min)

Sblocca: email confirmation Supabase (signup) parte da noreply@multiverbe.com invece di noreply@mail.app.supabase.io. Senza, l'email viene comunque inviata ma sembra spam.

Step 5.1 · Brevo SMTP credentials

URL: https://app.brevo.com/settings/keys/smtp

Trova/genera:

  • SMTP server: smtp-relay.brevo.com
  • Port: 587
  • Login (username): tipicamente la tua email Brevo (metaverbe@gmail.com)
  • Password (SMTP key): se non esiste, click "Generate a new SMTP key" → copia subito

Step 5.2 · Supabase Dashboard Auth Email

URL: https://supabase.com/dashboard/project/yqhixdqipojvgzfadufo/auth/templates → tab "SMTP Settings" (in basso)

Toggle "Enable Custom SMTP" ON.

Campi:

Sender name:     Multiverbe
Sender email:    noreply@multiverbe.com
Host:            smtp-relay.brevo.com
Port:            587
Username:        metaverbe@gmail.com (o la tua login Brevo)
Password:        [SMTP key Brevo dal step 5.1]

Click "Save".

Pre-requisito: B1 deve essere già verde (domain authenticated in Brevo). Altrimenti Brevo rifiuta l'invio da noreply@multiverbe.com.

Step 5.3 · Test

Supabase → Authentication → Users → seleziona te stesso → click "..." → "Send Magic Link". Verifica email arriva da noreply@multiverbe.com (non più da mail.app.supabase.io).


🟢 B6 · Replicate API key (15 min)

Sblocca: Site Builder Stage 4 Visual Director (Flux Pro 2 per food photography ristoranti). Senza, lo stage skippa con stock photos → qualità inferiore.

Step 6.1 · Signup Replicate

URL: https://replicate.com/signin

Login con metaverbe@gmail.com (OAuth Google). 1 click.

Step 6.2 · Add billing $20 starter credit

URL: https://replicate.com/account/billing

Click "Add credit" → $20 → carta. Ti dura per ~200 immagini Flux Pro 2 (CHF 0.10/img stima).

Step 6.3 · Generate API token

URL: https://replicate.com/account/api-tokens

Click "Create token" → name "Multiverbe Production" → copia il token (r8_xxxxx).

Step 6.4 · Vercel env

URL: https://vercel.com/gregorio-ciurleos-projects/multiverbe-app/settings/environment-variables

Add (Production scope):

REPLICATE_API_TOKEN=r8_xxxxx

Redeploy production.

Step 6.5 · Smoke test

Apri Site Builder Wizard step 4 (Photo upload) → click "Genera con AI" → verifica Replicate API call (Vercel logs /api/site-builder/start.ts).


🎯 Ordine ottimale di esecuzione

Mattinata · Mar 19 Mag (1h30 attivi, 4-6h propagazione DNS in background)

  1. 09:00 · B1 Brevo verify TXT (10 min lavoro · 30-60 min propagazione)
  2. 09:15 · B5 Supabase SMTP custom (mentre B1 propaga · 10 min)
  3. 09:30 · B2 DNS wildcard sites (20 min lavoro · 15-30 min propagazione)
  4. 10:00 · B6 Replicate signup + key (15 min)
  5. 10:30 · Inizia B3 Stripe activation (può richiedere 24-48h review)

Pomeriggio · Mar 19 Mag (quando B1 verifica + B2 propaga)

  1. 14:00 · Verify B1 + B2 stati verdi
  2. 14:30 · Smoke test B5 (magic link da Supabase)

Mercoledì 20 Mag (B3 done · ~3h)

  1. Quando Stripe live attivo, dimmi su chat e io eseguo seed-stripe-prices.ts --live
  2. Founder updates 9 Vercel env STRIPE_PRICE_*
  3. B4 Stripe webhook live endpoint
  4. Joint smoke test E2E: signup → checkout 1 CHF → refund

✅ Acceptance · come sai che è tutto OK

Dopo i 6 BLOCKING:

  • [ ] Email da Brevo arrivano (test signup nuovo account → confirmation email entro 5 sec)
  • [ ] https://test-slug.sites.multiverbe.com HTTPS verde (404 page atteso, certificato valido)
  • [ ] Stripe Checkout reale carica con price price_live_xxx
  • [ ] Stripe webhook test event → 200 OK + webhook_events row processed
  • [ ] Supabase magic link arriva da noreply@multiverbe.com (non mail.app.supabase.io)
  • [ ] Site Builder Stage 4 genera 1 immagine reale via Replicate (Vercel log conferma chiamata)

🚨 Se qualcosa va storto

Cheat sheet errori comuni:

Sintomo Causa probabile Fix
Brevo "Verify" fail dopo 1h DNS TTL alto su Register.it Riduci TTL a 300 + aspetta altri 30 min
Vercel "Invalid Configuration" persiste CNAME punta a IP invece di cname.vercel-dns.com Ricontrolla record
Stripe activation review pending >48h Documento ID non chiaro Carica scansione fronte+retro qualità alta
Stripe webhook 401 "Signature mismatch" STRIPE_WEBHOOK_SECRET non aggiornato in Vercel Re-copia secret + redeploy
Supabase SMTP "Authentication failed" Login Brevo errata Verifica username = email account Brevo
Replicate "Unauthorized" 401 Token expired/revoked Genera nuovo token + Vercel env

Last update: 2026-05-18 · Audit app-readiness-lockdown-lift-plan-2026-05-18.md v1 Owner: Gregorio (founder · execution Dashboard) + Claude (supporto script + verifica)