Deploy Sites Runtime + Wildcard *.sites.multiverbe.com · Setup Step-by-step
⚠️ Documento in parte superato (aggiornato 2026-05-21). Il dominio dei siti cliente non è più
*.sites.multiverbe.comma*.multiverbe.app(decisione 2026-05-13/18, migrazione completata il 2026-05-19, v18: rimossi i record DNS legacy disites.multiverbe.com). I passaggi qui sotto vanno letti sostituendo mentalmente*.sites.multiverbe.comcon*.multiverbe.appe il provider DNS con quello gestito da Vercel sul progettomultiverbe-sites. La procedura concettuale (deploy del runtime, wildcard, SSL automatico, verifica) resta valida. Conservato come riferimento storico e di metodo, secondo la regola "zero perdita di informazioni".
Stream C · Publish/Hosting · 2026-05-12 Status: codice + config + Edge Functions creati in worktree
feat/publish-hosting. Deploy effettivo richiede azioni founder. Tempo founder stimato: ~20 min azione + ~30 min attesa DNS propagation.Pattern derivato da
deploy-bos-multiverbe-com-setup.md.
✅ File già creati da Claude (Stream C)
| Path | Scopo |
|---|---|
sites-runtime/ |
Next.js 16 App Router · SSR/ISR · sezioni · cookie banner · Impressum · Schema.org |
frontend/multiverbe-app/api/sites/publish.ts |
Edge Function: chiamata dal wizard Stream A on "Publish" |
frontend/multiverbe-app/api/sites/check-slug.ts |
Edge Function: real-time slug availability check |
scripts/setup-vercel-sites-runtime.ts |
Provisioning idempotent project Vercel + env vars via API |
frontend/multiverbe-app/src/features/site-builder/PUBLISH_CONTRACT.md |
Contratto API + schema DB atteso da Stream A |
🛠️ Azioni founder · 20 min + 30 min DNS
Step 1 · Provisioning Vercel project multiverbe-sites (3 min)
Prerequisite: VERCEL_API_TOKEN valido in D:\Desktop\Multiverbe\.env (già presente, prefisso vcp_*).
cd D:\Desktop\Multiverbe
npx tsx scripts/setup-vercel-sites-runtime.ts
Lo script:
- Crea progetto Vercel
multiverbe-sites(frameworknextjs, rootDirectorysites-runtime). - Genera
REVALIDATE_SECRETrandom 32 char. - Imposta env vars production:
SUPABASE_URL,SUPABASE_ANON_KEY,REVALIDATE_SECRET. - Stampa a console:
SITES_PROJECT_ID,SITES_RUNTIME_URL,SITES_REVALIDATE_SECRET.
Copia in D:\Desktop\Multiverbe\.env aggiungendo queste 3 nuove righe (mai in chat / mai in commit):
SITES_PROJECT_ID=prj_xxx
SITES_RUNTIME_URL=https://multiverbe-sites.vercel.app
SITES_REVALIDATE_SECRET=hex32...
E salva anche in 1Password vault "Multiverbe Production".
Step 2 · Git link manuale (5 min)
Lo script NON fa git-link (memoria project_vercel_git_author_email_verification.md: info@metaverbe.it non verificata su GH → git-trigger deploy può fallire).
- Vercel dashboard → project
multiverbe-sites→ Settings → Git - Connect → seleziona
metaverbe-hub/Multiverbe→ branchmaster - Production branch:
master - Build & Development Settings:
- Framework Preset: Next.js
- Root Directory:
sites-runtime⚠️ critico - Build/Install Command: default (auto-detect)
- Test push manuale:
cd D:\Desktop\Multiverbe && vercel --prod --cwd sites-runtime(skip git, deploy locale)
Step 3 · Custom DNS wildcard *.sites.multiverbe.com (5 min)
3a. Register.it DNS
- Login register.it → dominio
multiverbe.com→ Gestione DNS - Aggiungi record:
- Type: CNAME
- Nome:
*.sites(wildcard di terzo livello sottosites) - Valore:
cname.vercel-dns.com - TTL: 3600 (default)
- Salva
⚠️ Se Register.it non accetta * come nome, prova *.sites.multiverbe.com. (con FQDN trailing dot).
3b. Vercel project domain
- Vercel dashboard → project
multiverbe-sites→ Settings → Domains - Add → inserisci
*.sites.multiverbe.com→ Verify - Aspetta
Valid Configuration(anche 15-30 min) - SSL Let's Encrypt auto-provisioned
Step 4 · Variabili dashboard sito (5 min)
Il dashboard multiverbe-app chiama Vercel Domains API e Sites Runtime revalidate. Vercel project multiverbe-app deve avere queste env vars production:
VERCEL_API_TOKEN=vcp_*** (PAT esistente, già configurato)
SITES_PROJECT_ID=prj_xxx (output script Step 1)
SITES_RUNTIME_URL=https://multiverbe-sites.vercel.app
SITES_REVALIDATE_SECRET=hex32... (output script Step 1)
Vercel dashboard → project multiverbe-app → Settings → Environment Variables → Production.
Step 5 · Test end-to-end (5 min + attesa DNS)
# DNS verify
dig CNAME demo-ristorante.sites.multiverbe.com +short
# atteso: cname.vercel-dns.com
# HTTPS verify
curl -I https://demo-ristorante.sites.multiverbe.com
# atteso: HTTP/2 200 (o 404 con SSL valid se mock non deployato)
# Lighthouse mobile
npx --yes lighthouse https://demo-ristorante.sites.multiverbe.com \
--preset=mobile --view --quiet --chrome-flags="--headless"
# target: Performance ≥80, LCP <2.5s, CLS <0.1, INP <200ms
# On-demand revalidation
curl -X POST "https://multiverbe-sites.vercel.app/api/revalidate?slug=demo-ristorante&secret=$SITES_REVALIDATE_SECRET"
# atteso: { "ok": true, "revalidated": "demo-ristorante" }
# Schema.org rich-results-test
# Apri https://search.google.com/test/rich-results e incolla l'URL
📊 Cost estimate Stream C
| Voce | Tier | Costo |
|---|---|---|
Vercel project multiverbe-sites |
Hobby → Pro | €0 → $20/mo (passare a Pro quando 1° cliente paga) |
| Wildcard SSL Let's Encrypt | Included | €0 |
sites.multiverbe.com subdomain |
esistente | €0 (sottodominio di multiverbe.com già pagato) |
| DNS Register.it changes | included | €0 |
| Total Stream C | — | €0/mo Hobby, $20/mo Pro post-1°-cliente |
🔐 Security checklist post-deploy
- [ ]
REVALIDATE_SECRETsalvato in 1Password +.env(mai in git, mai in chat) - [ ] HTTPS attivo per wildcard (test ssllabs.com grade ≥A)
- [ ] Security headers attivi: HSTS, X-Frame-Options SAMEORIGIN, X-Content-Type-Options nosniff, Referrer-Policy strict-origin-when-cross-origin, Permissions-Policy minimal (configurati in
next.config.ts) - [ ] Cookie banner mostrato a primo visit
- [ ] Impressum auto-gen per ogni sito (link in footer)
- [ ] Privacy Policy auto-gen per ogni sito
- [ ] Schema.org JSON-LD valido (rich-results-test green)
- [ ] sitemap.xml accessible + indicizzato in Google Search Console
- [ ] robots.txt blocca
/api/ - [ ] Reserved slug blacklist enforced (test:
https://admin.sites.multiverbe.com→ 404)
🚦 Verifica finale
- Pubblica mock site: lo script ha già configurato
demo-ristorantecome fixture. - Apri https://demo-ristorante.sites.multiverbe.com → vedi La Trattoria Demo
- Apri https://demo-ristorante.sites.multiverbe.com/impressum → vedi Impressum CH
- Apri https://demo-ristorante.sites.multiverbe.com/privacy → vedi Privacy
- Lighthouse mobile: Performance ≥80 (target ≥90 finale)
- SSL Labs: grade ≥A
- Security Headers: grade ≥A (https://securityheaders.com)
📝 Note operative
- Auto-deploy on push
master: ogni cambio insites-runtime/**triggera rebuild. - Manual deploy:
cd sites-runtime && vercel --prod - Rollback: Vercel Dashboard → Deployments → versione precedente → Promote to Production
- Preview deployments: ogni PR genera preview URL
multiverbe-sites-<hash>.vercel.app - ISR: pagine cached, revalidate ogni 60s + on-demand via
/api/revalidate
⚠️ Limiti noti (post-MVP, NON ora)
- Custom domain cliente (es.
ristorante.it→ Multiverbe site): post 5 paganti - Multi-locale routing in URL (
/it/,/de/): post-MVP, default IT solo - A/B testing on-site: post-MVP
- Analytics on-site (Plausible/Posthog): post-MVP
- Edge geo-routing: post-MVP
Owner: Gregorio (founder, esecuzione DNS + Vercel domain add)
Codice: Claude Stream C 2026-05-12 (worktree feat/publish-hosting)
Cross-reference: PUBLISH_CONTRACT.md (Stream A coordination), first-paying-customer-checklist.md sezione C