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.mdSequenza 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:
- Click "Aggiungi record"
- Tipo: TXT
- Nome (Host):
- Per DKIM:
mail._domainkey - Per SPF:
@(root, vuoto) - Per DMARC:
_dmarc
- Per DKIM:
- Valore: copia esatto da Brevo (anche con virgolette se presenti)
- TTL: 3600
- 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 disites.multiverbe.com). I passaggi qui sotto, scritti per*.sites.multiverbe.comsu Register.it, sono superati: oggi il wildcard*.multiverbe.appè gestito da Vercel sul progettomultiverbe-sites. Conservati come riferimento storico.
Step 2.1 · Register.it DNS multiverbe.com
URL: https://controlpanel.register.it/dns/management → multiverbe.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.com— Register.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
*.sites→cname.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_xxxSTRIPE_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_KEY→sk_live_xxxVITE_STRIPE_PUBLISHABLE_KEY→pk_live_xxx- I 9
STRIPE_PRICE_*con i nuovi IDs
Importante: tieni i
sk_test_*come backup. Crea env var separataSTRIPE_SECRET_KEY_TESTse 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 codiceapi/stripe/webhook.tsriga 2.
Step 4.3 · Eventi da subscribere (9 events)
Click "Select events" → seleziona:
checkout.session.completedcustomer.subscription.createdcustomer.subscription.updatedcustomer.subscription.deletedcustomer.subscription.trial_will_endinvoice.payment_succeededinvoice.payment_failedcustomer.createdcustomer.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:
- Stripe log:
200 OK - Supabase tabella
webhook_events: riga nuova consignature_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)
- 09:00 · B1 Brevo verify TXT (10 min lavoro · 30-60 min propagazione)
- 09:15 · B5 Supabase SMTP custom (mentre B1 propaga · 10 min)
- 09:30 · B2 DNS wildcard sites (20 min lavoro · 15-30 min propagazione)
- 10:00 · B6 Replicate signup + key (15 min)
- 10:30 · Inizia B3 Stripe activation (può richiedere 24-48h review)
Pomeriggio · Mar 19 Mag (quando B1 verifica + B2 propaga)
- 14:00 · Verify B1 + B2 stati verdi
- 14:30 · Smoke test B5 (magic link da Supabase)
Mercoledì 20 Mag (B3 done · ~3h)
- Quando Stripe live attivo, dimmi su chat e io eseguo
seed-stripe-prices.ts --live - Founder updates 9 Vercel env STRIPE_PRICE_*
- B4 Stripe webhook live endpoint
- 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.comHTTPS verde (404 page atteso, certificato valido) - [ ] Stripe Checkout reale carica con price
price_live_xxx - [ ] Stripe webhook test event →
200 OK+webhook_eventsrow processed - [ ] Supabase magic link arriva da
noreply@multiverbe.com(nonmail.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)