Stack Tecnico

Cosa costruiamo con cosa. Lean, cloud-native, free-tier-first. Principio: ogni tool deve avere una via di uscita — no vendor lock-in nemmeno per noi.


In parole semplici (per chi non è tecnico)

Lo "stack" è l'insieme degli strumenti software con cui è costruito Multiverbe: un po' come la lista dei materiali e dei macchinari di un'officina. In sintesi:

  • L'applicazione che usano i clienti (la dashboard con i pianeti) e i siti che generiamo per loro girano su server gestiti da un fornitore esterno (Vercel), così non dobbiamo mantenere macchine nostre.
  • I dati dei clienti (anagrafiche, prenotazioni, contenuti) stanno in un archivio sicuro (Supabase), con una regola tecnica che impedisce a un cliente di vedere i dati di un altro.
  • L'intelligenza artificiale non è una sola: usiamo modelli diversi a seconda del compito e scegliamo ogni volta il più adatto per costo e qualità.
  • I pagamenti passano da Stripe per le carte e, in Svizzera, da Twint.
  • Il principio guida è che ogni strumento deve essere sostituibile: non vogliamo dipendere in modo irreversibile da nessun fornitore, nemmeno noi.

Piccolo glossario dei termini di questa pagina

  • App / PWA: l'applicazione che il cliente apre dal browser o installa sul telefono.
  • Database: l'archivio dove sono salvati i dati.
  • Multi-tenant: un unico sistema che serve molti clienti tenendo i dati di ciascuno separati dagli altri.
  • RLS (Row-Level Security): la regola del database che garantisce questa separazione, perché ogni cliente vede soltanto le proprie righe.
  • Serverless: server di un fornitore che si attivano solo quando servono; noi non gestiamo macchine fisiche.
  • CDN / edge: una rete di server vicini all'utente, così i siti si aprono velocemente.
  • DNS / dominio: il sistema che collega un indirizzo come multiverbe.com al server giusto.
  • API: il modo in cui due programmi si scambiano informazioni.
  • Token AI: l'unità con cui si misura, e si paga, l'uso dell'intelligenza artificiale.

Stack Core · Prodotto

Layer Tool Costo Note
Dashboard app (multiverbe-app) Vite 5 + React 19 + Tailwind 3 + R3F v9 €0 SPA · PWA installabile · serverless functions Vercel api/ · Vision 2027 React Native
Sites runtime (sites-runtime) Next.js 16 + React 19 + Tailwind €0 Siti generati multi-tenant · *.multiverbe.app
3D Dashboard React Three Fiber v9 stable (NO v10 alpha) €0 NucleoSphere centrale + i pianeti orbitanti (7 canonici · oggi 6 in scena, Finanza da aggiungere) · skill multiverbe-r3f-patterns
DB + Auth + Storage Supabase Pro $25/mo (dal 2026-06-06 · prima Free) Passato a Pro: include backup automatici con ripristino a un istante preciso (PITR), più spazio e nessuna messa in pausa del progetto per inattività · pgvector · RLS multi-tenant · eu-central-1 · (da confermare se il piano scelto è diverso da Pro)
Deploy + CDN Vercel Pro $20/ciclo + tetto on-demand $50 (Pause Projects ON · era $25→outage 2026-06-07) Ignored Build Step per-progetto attivo (git-diff sulla cartella · app/sites buildano solo se cambiano i loro file) · preview URL per PR · vedi Guardrail spesa CI/infra sotto
Email transazionale Multiverbe Brevo Free 9.000/mo → $20/mo Pro 50K/mo Sender noreply@multiverbe.com via subdomain send.multiverbe.com (DNS verified). Account gregorio@gmail.com. Decisione 2026-05-10: scelto Brevo invece di Resend per separazione brand (Resend resta per Metaverbe agenzia).
Email transazionale Metaverbe agenzia Resend Free 3.000/mo Sender send.metaverbe.com (legacy setup agenzia, separato da Multiverbe).
Backend Python (legacy MAIND) Render.com $7/mo daily_run.py orchestrator · da migrare/deprecare in fase Multiverbe
Rate-limit + cache ephemeral Upstash Redis Free 10K req/day → $0.20/100K Aggiunto 2026-05-19 Phase 2 Security Hardening · @upstash/ratelimit + @upstash/redis · 13 endpoint /api/* protetti · fallback in-memory degraded mode se env mancante · region eu-west-1 · stack api/_lib/rate-limit.ts (60 req/min IP · 200 req/min workspace · TTL 60s sliding window · solo IP truncato + workspace_id · no PII raw)
Lavori in background durevoli Inngest Free (Hobby) $0 → Pro da $75/mo Il motore dei lavori che girano "da soli" nel tempo, fuori dal ciclo richiesta→risposta di Vercel (che è limitato a pochi secondi). Fa girare: il cervello del mattino (analyze-planet-data, cron giornaliero che fa fan-out 1 evento/workspace), il Sole-che-agisce (sole-actions, esegue le leve del piano di crescita), i follow-up vendite (sales-outreach-followup, dorme N giorni poi invia · durevole, sopravvive ai deploy), la sync memoria, i promemoria booking, il rendering video. Garantisce retry, ripresa dopo deploy, step memoizzati (no doppio invio). Fatturazione per step-execution (una funzione con N step = N execution per run), NON per funzione. Free Hobby: 50.000 execution/mo + 100.000 eventi/mo + 5 step concorrenti + 3 utenti. Stima Multiverbe: il motore gira 1 volta/giorno per cliente (decisione 2026-06-07: restraint big-tech, NON frequenza per-tier) → ~5-10 execution/cliente/giorno → liberi fino a ~150-200 clienti attivi (ordine di grandezza); oltre, Pro $75/mo = 1M execution/mo ≈ migliaia di clienti. PAYG oltre l'incluso ~$0.00005/execution. Da ri-misurare dal dashboard Inngest a regime. ⚠️ Dopo ogni deploy le funzioni vanno sincronizzate con l'app Inngest multiverbe o i cron non partono.

💰 Guardrail spesa CI/infra · tetti attivi (2026-06-06 · fino post-gate / primi ricavi)

Numeri vivi · allineati con CLAUDE.md (sezione MODALITÀ RISPARMIO CI/INFRA) + execution/decisions-log.md + BOS + memory project_ci_vercel_cost_2026_06_06. Ad ogni decisione di costo si aggiornano OVUNQUE (regola permanente, mai un numero stale).

Servizio Incluso Tetto attivo Note
Vercel Pro $20/ciclo On-Demand $50 + Pause Projects ON (stop) Alzato da $25→$50 dopo l'outage 2026-06-07 (a $25 il "Pause Projects" team-wide abbatté TUTTI i progetti — BOS + prod + landing + siti — 503 · driver reale = Build CPU Minutes, non immagini/banda). Fix: Ignored Build Step per-progetto = git diff HEAD^ HEAD --quiet -- <cartella> (il toggle nativo "skip-deployments" era inefficace con "Include files outside root dir"=ON). ⚠️ Resume dopo la pausa = per-progetto (alzare il tetto non basta).
GitHub Actions Pro $4/mo · 3.000 min/ciclo Budget Actions $40 + stop-usage ⚠️ MAI $0 in sviluppo attivo: a minuti inclusi esauriti il budget $0 BLOCCA tutta la CI di tutte le sessioni (accaduto 2026-06-06, "GitHub fuori uso"). $40 cappa la spesa ma NON blocca. Reset minuti ~inizio mese.
Mistral (Voxtral STT + Medium 3 outreach) pay-as-you-go Carta + tetto mensile €10 (2026-06-06) A €10 l'API si sospende fino al mese dopo / aumento. Voxtral $0.003/min ≈ ~3.300 min/mo coperti — ampio per il vocale.
Ricerca esterna (Perplexity + Tavily · 2026-06-06) pay-as-you-go / Free Perplexity cap per-tier 30/100 check/mo + ledger external_api_usage + alert Sentry · Tavily Free $0 (no carta = tetto rigido) Accese con cap+monitoraggio in piedi (#277 merged+deployato). <0,4% del ricavo/cliente anche al cap rigido. Strategia: ops/external-search-apis-strategy-2026-06-06.md.

✅ Aggiornamento 2026-07-06 · Vercel pagato + fix validato: fattura Giugno $57.57 saldata (Invoiced 13/06 → sblocca il 402 che teneva ferma la coda merge/deploy fino a inizio luglio). Ciclo Giu12–Lug12 stimato $20 = solo Pro, on-demand ~$0 → l'Ignored Build Step per-progetto (#338 + fix :/ del 10/06) regge, i Build CPU Minutes non sanguinano più (erano $44 = 95% della bolletta · da $57.57 → $20). Caps invariati ($50/$40/$25). Prossima leva di costo = Anthropic API (~€200-400/mo · voce #1 · prompt caching P1), NON Supabase (flat $25) né GitHub (hard-capped $40 · e2e già self-hosted).

CI cost (PR #267 2026-06-06 · –40%): cancel-in-progress sulla security · stop al doppio Frontend CI · e2e 30min→2h. Runner self-hosted mv-local registrato (offline standby · riattiva docker start mv-runner · flip runs-on solo su decisione esplicita). I gate di qualità restano intatti (typecheck/build/lint/test/security pre-merge) — il risparmio è solo nello scarto (duplicati, churn, build a vuoto).

Stack AI · Routing 3-Tier

Tier Modello % uso Use case
60% Sonnet 4.6 majority User-facing real-time · chat · suggerimenti · generazioni
30% Haiku 4.5 batch Task interni · classificazione · dedup · embeddings
10% Opus 4.8 strategic Decisioni complex · planning · refactor · design sito · adaptive thinking + effort high/xhigh (upgrade Opus 4.7→4.8 · 2026-05-30)

Specializzazioni:

  • Mistral Large 3 (mistral-large-2512 · $0.50/$1.50, più forte ED economico di Medium 3 · #441) · email outreach + copy cliente (GDPR EU, host Francia · ZDR+DPA)
  • Site builder (Kimi RIMOSSO #454): copy IT = Sonnet 4.6, art-direction/design = Opus 4.8, immagini = Nano Banana Pro (gemini-3-pro-image · #448), QA-gate copy = Opus 4.8 a tutti i tier
  • Gemini 3.5 Flash (#441) · workhorse testo sovrano EU (Vertex) per tutti i tier + content multimodale (img/video/audio) + brain edge ai-copilot (cascade flash → flash-lite · Groq rimosso 2026-05-30 perché non canon)
  • Model-as-judge = Sonnet 4.6 su gateway sovrano EU (Vertex · purpose 'judge', tier-invariante, fallback Gemini 3.5 EU) · verifica avversariale PRIMA delle azioni high-impact (outreach/post/draft · #463 core + #476 wiring) · vede il testo reale per cogliere fughe PII, residenza EU = base giuridica (NON Opus US+pseudonimizz.)
  • QA visiva siti (loop di perfezione · ITEM 2 epica LLM SOTA 2026 · compute #480 + runtime #484 = epica CHIUSA): checker deterministico (Lighthouse/CWV/axe/layout, soglie founder · #466) + giuria vision sovrana EU [seggio Google Gemini 3.5 Flash EU — 3.1 Pro è GLOBAL-only su Vertex → escluso per residenza, 3.5 Pro atteso GA EU lug '26 + seggio Anthropic Opus 4.8 EU] sugli screenshot, per il "gusto" oltre i bug · render = PSI v5 (Lighthouse/CWV, URL pubblico, off-Vercel-compute) + endpoint headless a residenza EU (screenshot 3 viewport + axe) — ⚠️ Cloudflare Browser Rendering NON ha residency EU (edge globale, fuori dalla Data Localization Suite · verificato web 2026-06-30) → escluso per screenshot con PII; client vendor-neutro (VISUAL_RENDER_ENDPOINT, fail-closed → endpoint EU = gate di provisioning: Browserless EU / container Playwright EU / Cloudflare solo con garanzia EU) · worker Inngest durabile (evento = solo siteId+workspaceId · screenshot in Supabase EU bucket site-screenshots, byte solo dentro gli step, mai nello stato Inngest-US) · fix→rigenera via QStash con direttive negli Stage 2/3/5 (#494 fan-out audience-aware: Stage 2 tutto, Stage 3 copy=seo+accessibility, Stage 5 CRO=aesthetics+layout+best-practices) → swap shadow atomico (gate legale fail-closed) → re-render · persistenza design_reviews (ship/accept_with_warning→approved, fix→rejected) · trigger post-publish · shadow-regen (#492): rigenerare un sito già live NON lo declassa più (resta published, nuove pagine = copia shadow preview, swap atomico via RPC swap_site_shadow_pages · migration 2026-06-30a APPLICATA a prod 2026-07-01, verificata service_role-only) → outage da minuti a sub-secondo · render EU = servizio services/visual-render/ (server Playwright Apache-2.0 deployabile · Dockerfile+Caddy+cloud-init+README founder · Hetzner CX23 ~€5.49/mo — ⚠️ CX22 €3.79 ritirato 15/6/26 · #490) · Gemini 3.5 Pro NON-GA su EU multi-region (verifica web 2026-06-30 → resta 3.5 Flash, upgrade a 1-env quando GA) · 3 PR born-green (#490 render + #492 shadow + #494 fan-out, stacked) · verifica live = founder (merge + deploy Hetzner + env Vercel PSI_API_KEY/VISUAL_RENDER_ENDPOINT/VISUAL_RENDER_TOKEN, MAI Cloudflare · migration 2026-06-30a già applicata a prod)
  • Gemini Batch API (-50%) · learn, analytics, report (non real-time)
  • Perplexity (Sonar sonar · context low) · ricerca web real-time per api/reach/visibility-check (audit visibilità AI/GEO) + api/site/publish · ~$0.0055/check (il request-fee $5/1k pesa il 90% · ~$8/mo @500 clienti) · cap mensile Pro 30 / Business 100 (tier_caps.ai_visibility_checks, hard · 2026-06-06) · costo reale loggato in external_api_usage + alert Sentry · key inserita + verificata live 2026-06-06 (probe 404 no_published_site = oltre il check-key → key attiva + cap enforcement deployato) · esterni dal 2026-07-10 (preavviso 30gg)
  • Tavily (web-trends · search_depth advanced = 2 crediti) · grounding ricerca web del solo cron settimanale market-context (Pianeta Content · api/_lib/web-trends.ts, mai sul percorso utente) · Free 1.000 crediti/mo = $0 (tenere il Free senza carta = tetto rigido $0; PAYG $0.008/cr) · grana-città (settore×zona×città) · key inserita 2026-06-06 · primo uso al cron del lunedì (scrive external_api_usage provider=tavily)
  • Mistral Voxtral (voxtral-mini-latest · $0.003/min batch, ~$0.0005 a dettatura · NON free) · STT vocale sovrano EU (host Francia · stesso provider Medium 3) · "tieni premuta la sfera" → registra (MediaRecorder) → api/ai/transcribe → trascrive (iOS-safe dove Web Speech non va) · attivato 2026-06-06 (env STT_ENABLED+VITE_STT_SOVEREIGN, MISTRAL_API_KEY già presente) · ✅ billing ATTIVO (2026-06-06): founder ha inserito la carta + tetto mensile €10 su admin.mistral.ai (org "digiverbe", legacy) → vocale sbloccato. A €10/mo l'API si sospende fino al mese successivo (Voxtral $0.003/min ≈ ~3.300 min/mo coperti, ampio per il vocale)

Cost discipline · architettura compounding:

  • Anthropic prompt cache (system prompts settoriali ~5k token cached) · -50/-80% input
  • Semantic cache via embeddings Vercel KV / Upstash · hit 30-40% · -73% cost
  • Embedding cache deterministico · -90% cost embedding
  • Compounding: ~95% riduzione cost input vs baseline

Stima a regime: ~CHF 4.80/cliente/mo a uso medio (margine 95%).

⚠️ Due cervelli "Sole" da consolidare (rilevato 2026-05-30): oggi coesistono due orchestratori AI divergenti — (1) Foundation Agentica (Vercel api/ + Anthropic 3-tier canon, nuovo · agent-core/llm-client/sole-crm/analyze-planet-data) e (2) ai-copilot (edge Supabase + Gemini, vecchio · brain_intelligence/ai_conversations). Proposta di consolidamento (migrare ai-copilot sul routing Anthropic canon) in ops/proposta-consolidamento-cervelli-2026-05-30.md — decisione founder pending.

VIETATI: DeepSeek (Garante IT block) · OpenRouter (uso diretto API) · Groq (rimosso 2026-05-30 dall'edge ai-client.ts, non canon).


Stack Pagamenti · CH-Compliant

Tool Cosa Costo
Stripe Carte EU/internazionali 1.5% + €0.25
Datatrans o Payrexx Twint (60%+ utenti CH) CHF 29-49/mo + commissioni · attivo Q4 con GmbH

Trial gratuito 10 giorni (full Pro features, no carta) · skill multiverbe-stripe-checkout-edges per edge cases (prorate, dunning, refund, tax CH/IT VAT, customer portal).


Stack Marketing & Outreach

Tool Cosa Costo
Google Workspace info@ + loris@ + contact@ multiverbe.com RIMOSSO 2026-05-17 — Hub Vision filosofia decentralizzata. Usiamo ImprovMX catch-all (*@multiverbe.com → metaverbe@gmail.com) free + Brevo transactional + multi-mailbox warmup. $18/mo risparmiati.
Brevo Email transazionale + sender hub (noreply@, gregorio@, loris@, info@, contact@) Free 9.000/mo → $20/mo Pro 50K/mo
ImprovMX Catch-all *@multiverbe.com (futuro *@multiverbe.ch) → metaverbe@gmail.com inbox Free tier
Instantly o Lemwarm Email warmup + sequencer ~$30/mo
Google Ads + Meta Ads Da Giugno '26 CHF 700-1.100/mo validation
Composio MCP + Pipeboard Auto-publish FB/IG/TikTok/LinkedIn/Snap per uso

Strategia warmup: cold outreach iniziale da loris@metaverbe.com (dominio caldo, anziano), in parallelo warmup multiverbe.com per 4-6 settimane prima dello switch.

🆕 2026-05-10: anche Gregorio fa cold outreach in prima persona (founder-led ABM premium, parallelo a Loris). Mailbox gregorio@multiverbe.com da warmare insieme a loris@multiverbe.com. Multi-mailbox strategy attiva — quando multiverbe.ch arriva (acquisto pending), +3 mailbox .ch per total 6 sender warmed paralleli (distribuzione volume + ridondanza reputation CH). Vedi memoria user_gregorio_cold_outreach.md + user_multi_mailbox_strategy.md.


Stack Domini & Infra

🌐 Domini registry (aggiornato 2026-05-15 · SSoT = source/_meta/status.jsondomains_registry)

Multiverbe SaaS (5 domini):

Dominio Stato Vercel project Scopo Repo
multiverbe.com ✅ active multiverbe-landing Landing pubblica + email sender hub metaverbe-hub/multiverbe-landing
multiverbe.app ✅ active multiverbe-app Dashboard SaaS (PWA · l'app) metaverbe-hub/Multiverbe (frontend/multiverbe-app/)
bos.multiverbe.com ✅ active multiverbe-bos-app Business Operating System interno (questo documento) metaverbe-hub/Multiverbe-Business
multiverbe.app + *.multiverbe.app ✅ active (wildcard) multiverbe-sites Siti generati clienti (moat Pianeta Web) metaverbe-hub/Multiverbe (sites-runtime/)
multiverbe.ch ✅ active dal 2026-05-15 multiverbe-landing (hosting attivo separato post panel agenzia 2026-05-17) Brand CH + ccTLD geo-signal Google.ch + warmup multi-mailbox outreach — (decisions-log 2026-05-17 hreflang reciproco con .com)

Metaverbe agenzia (2 domini · separato da Multiverbe SaaS):

Dominio Stato Vercel project Scopo Repo
metaverbe.com ✅ active metaverbe.com Vetrina agenzia + portale clienti metaverbe-hub/metaverbe.com
metaverbe.it ✅ active (stesso project metaverbe.com, multi-domain) Mirror IT (stesso)

Totale: 7 domini active (era "6 active + 1 pending" — aggiornato 2026-05-17 audit-batch · multiverbe.ch acquistato 2026-05-15). Wildcard *.multiverbe.app richiede Vercel Pro (upgrade 2026-05-13).

Redirect alias app.*multiverbe.app (aggiunti 2026-06-06 · Vercel project multiverbe-app › Domains · 307): il dominio canonico dell'app resta multiverbe.appapp.* sono solo alias di redirect (prima davano 404/DEPLOYMENT_NOT_FOUND, ora puntano all'app).

  • app.multiverbe.appmultiverbe.appattivo · verificato live (www.multiverbe.app resta 308).
  • app.multiverbe.commultiverbe.app · redirect configurato ma "DNS Change Recommended" → 🔲 TO-DO opzionale founder: aggiungere il record CNAME app.multiverbe.com → cname.vercel-dns.com al DNS (Register.it/Cloudflare) per attivarlo davvero. È legacy (.com è la landing, l'app vive su .app), bassa priorità: se non interessa, rimuovere il redirect da Vercel. Decisione founder pending.

🏗️ Architettura Hosting Multi-tenant · diagramma 6-layer

Per il diagramma visivo completo (SVG live) vedi source/05-stack.md § "🏗️ Architettura Hosting Multi-tenant · come funziona" renderizzato in bos.multiverbe.com. Sintesi flusso:

  1. Cliente PMI → signup multiverbe.app (Vite 5 PWA · auth Supabase JWT con workspace_id claim)
  2. Dashboard SaaS (Vite 5 + R3F v9) → Onboarding 4-step + Site Builder Kimi K2.6 (procedura in 6 fasi) + i pianeti in 3D (7 canonici · oggi 6 in scena)
  3. Supabase eu-central-1 (yqhixdqipojvgzfadufo) → 39 tabelle + 15 migrations · RLS multi-tenant WHERE workspace_id = auth.uid() su tutte le tabelle cliente-facing · cliente A non legge mai dati cliente B
  4. Sites Runtime (multiverbe-sites Next.js 16 · Vercel Pro) → ISR 60s · SSG · Edge Zurich PoP · route /{slug} → fetch da Supabase (service_role server-side) → SSR LCP ≤2.0s mobile · qualità tier-aware (Starter CSS / Pro GSAP+Flux / Business R3F+View Transitions)
  5. DNS pubblico → wildcard *.multiverbe.app (Starter+Pro zero-touch) + custom domain CNAME (Business · cliente porta dominio · Vercel Domains API idempotent + Cloudflare DNS)
  6. Visitatori finali → HTTPS auto-SSL Let's Encrypt · edge cache per slug · revalidate on publish ≤5s

Safety multi-tenant: RLS sempre attiva · service_role mai client-side · slug blacklist (35 reserved: admin/api/www/app/bos/ecc.) · rate limit publish 10/min · backup PITR Supabase Pro + DR test quarterly (skill dr-test).

Accesso e identità (dal 2026-06-24, in produzione · decisions-log v160 · PR Multiverbe#425): l'accesso primario è biometrico tramite passkey (Face ID, impronta, Windows Hello — standard WebAuthn supportato nativamente da Supabase), accanto a email piu password, magic-link, Google e Apple. Il dato biometrico resta sul dispositivo dell'utente; il server conserva solo una chiave pubblica. Il recupero segue lo standard delle grandi piattaforme (Google, GitHub): codici monouso mostrati una sola volta e custoditi in database solo come impronta cifrata e "pepata" (il segreto "pepe" sta nelle variabili d'ambiente di Vercel come RECOVERY_CODE_PEPPER, mai nel database). In parole semplici: si entra con la faccia o il dito invece che con la password, e se si perde il telefono si rientra con uno dei codici salvati all'attivazione.

🔧 Registrar & infra DNS

Tool Cosa Costo
Register.it metaverbe.com + multiverbe.com (+ multiverbe.ch pending acquisto) €12/anno cad. — DNSSEC active (usa "Configurazione DNS" non "Cambia Nameservers")
Vercel Domains multiverbe.app (apex + wildcard) registrato 2026-05-13 · scadenza 2027-05-13 $14.99/anno · richiede Vercel Pro per wildcard
Vercel DNS multiverbe.com (apex landing) + www. + app. + bos. (subdomain CNAME) Free (incluso Vercel project) — DNS A/CNAME su Register.it puntano a 76.76.21.21 / cname.vercel-dns.com
ImprovMX catch-all *@multiverbe.com → metaverbe@gmail.com (futuro *@multiverbe.ch) Free tier
GitHub Repository privati (codice + business) + CI/CD (GitHub Actions) Piano a pagamento (Pro/Team · da confermare nome esatto, 2026-06-06) · ~$4/utente/mo · 3.000 minuti Actions/mese inclusi
Cloudflare DNS, SSL, DDoS Free
Sentry Error tracking Free 5K err/mo
PostHog (Cloud EU · Francoforte) Analytics prodotto + session replay + heatmap · sostituisce Clarity (tutto interno: i clienti non collegano account esterni) · decisione v135/v137 Free 5.000 registrazioni sessione/mo + 1M eventi/mo → poi usage-based ~$0.005/registrazione · ~$0.00005/evento · cresce coi clienti (cappabile con sampling) · SDK già nel codice (#387, inerte finché manca VITE_POSTHOG_KEY)

⚠️ Attenzione minuti GitHub Actions (rilevato 2026-06-06). GitHub Actions è il sistema che, a ogni modifica caricata sul repo del codice, lancia automaticamente i controlli (verifica del codice, costruzione, test, scansioni di sicurezza). Il piano include 3.000 minuti al mese. Al 5 giugno ne erano già stati consumati 2.700 (il 90%) in soli 5 giorni, perché la nuova capacità di lavoro 4x significa molte sessioni in parallelo e molti caricamenti sul repo Multiverbe, e ogni caricamento fa ripartire l'intera batteria di controlli. Il contatore si azzera il 1° luglio 2026; oltre la soglia GitHub fattura l'eccedenza (a meno di impostare un budget a 0, che però bloccherebbe i controlli). Importante: passare a un piano a pagamento da solo non aumenta i minuti inclusi (restano 3.000; solo Enterprise sale a 50.000, ma è costoso). La soluzione sana è ridurre il consumo della CI nel repo del codice (annullare i controlli superati quando arriva un nuovo caricamento, filtrare per file modificati, unire i flussi ridondanti, usare la cache). È un lavoro che vive nel repo D:\Desktop\Multiverbe, non in questo. Vedi decisions-log.md v82.


Costi mensili · stima realistica

Fase BUILD (Giugno '26 · sprint verso il 15)

Voce Costo
Abbonamento Claude (Max 20x · capacità di sviluppo 4x in autonomia) ~$200/mo (~CHF 180)
Supabase Pro (dal 2026-06-06) $25/mo (~CHF 22)
GitHub piano a pagamento (Pro/Team) ~$4-8/mo (~CHF 4-7)
Domini ~€2
Email warmup (Instantly/Lemwarm) ~$30
API a consumo non-Claude usate in sviluppo/test (Gemini, Kimi, Mistral, Perplexity) ~CHF 50-80
Resto (Vercel dev, Brevo free, Cloudflare, Sentry, Inngest Hobby su piani gratuiti) €0
Totale ~CHF 320-360/mo

Nota (aggiornata 2026-06-06). Da quando esiste l'abbonamento Claude Max 20x (decisione founder v79 del 2026-06-04, capacità di lavoro 4x), la maggior parte del costo dell'intelligenza artificiale usata per costruire Multiverbe è inclusa in quel canone fisso di ~$200/mese, non più pagata a consumo (a token) come prima. Resta a consumo solo l'uso degli altri fornitori AI (Gemini, Kimi, Mistral, Perplexity) e le chiamate AI del prodotto stesso durante i test. In pratica: il costo della fase di costruzione oggi è molto più prevedibile e più basso del vecchio modello "a token" (la vecchia stima parlava di ~€250 + ~CHF 1.500 di API spalmati sul mese).

Fase SELL (dall'inizio delle vendite · dopo il 15 Giu)

Voce Costo
Abbonamento Claude (Max 20x) ~$200/mo (~CHF 180)
Vercel Pro (dal 1° cliente pagante) $20
Brevo (a volume) $20
Email warmup + outreach ~$30
API a consumo non-Claude ~CHF 50-80
Google + Meta Ads CHF 700-1.100
Totale ~CHF 1.000-1.300/mo

Nota. La voce "Google Workspace $18" è stata rimossa (servizio dismesso il 2026-05-17, sostituito dal catch-all gratuito ImprovMX più Brevo per le email). Nello stack non esiste più alcun costo Google Workspace.

Fase SCALE (Lug '26+)

Voce Costo
Abbonamento Claude (Max 20x) ~$200/mo (~CHF 180)
Stack base a regime (Vercel Pro, Brevo, domini, monitoring) ~CHF 100
Twint via Datatrans CHF 49
Supabase Pro $25
API AI del prodotto a volume (Gemini, Mistral, Kimi, Perplexity + AI ~CHF 4,80/cliente/mese) ~CHF 50-150
Ads scaling CHF 1.000-1.500
Totale ~CHF 1.500-2.000/mo

Inngest a regime: resta gratis (Hobby, 50k execution/mo) fino a ~100 clienti attivi (ordine di grandezza · dipende da step/funzione e spin-per-tier). Oltre, Pro $75/mo (1M execution ≈ migliaia di clienti). Il motore di crescita gira 1 volta/giorno per cliente (decisione 2026-06-07: restraint big-tech, frequenza uguale per tutti i tier · la differenziazione è su caps/canali/auto-send, non sulla frequenza) → costo Inngest contenuto e prevedibile. Re-misurare dal dashboard quando i clienti crescono.


Tooling agente di sviluppo (Claude Code)

Strumenti che migliorano come l'agente AI scrive il nostro codice, non il prodotto in sé. Vivono nel repo del codice (D:\Desktop\Multiverbe\), gratuiti e open source, dati in locale (coerenti con "una via di uscita / no lock-in").

Lo stack di sviluppo dell'agente = le skill Claude Code custom (multiverbe-* + metaverbe-agency-projects, tenute aggiornate) + gli strumenti qui sotto. Le skill danno il know-how di dominio (design, RLS, settori, compliance…); questi tool danno contesto reale, navigazione ed editing di qualità. Tre famiglie e il perché: CONTESTO (graphify = mappa del codice · opensrc = sorgente reale delle dipendenze · doc-graph = intento/decisioni) → l'agente non indovina; EDITING (Serena = bisturi LSP a livello di simbolo · ast-grep = refactor strutturale) → modifiche precise e a meno token; QUALITÀ (Knip = dead-code · dependency-cruiser = architettura/cicli) → l'app resta costruita bene (gate in CI). Effetto misurato (sessione doppia 2026-06-07): −10÷100× token per operazione (1 query graphify = sottografo di un ciclo vs ~5 letture file), edit più precisi, e i tool hanno trovato E risolto ciò che era invisibile prima — 6 cicli spezzati (0 residui) + 21 file morti rimossi (−4.200 righe) + 4 dipendenze inutili tolte, in una PR verde (#343). Limite emerso e già mitigato: la ricerca-referenze di Serena sotto-riporta i tipi cross-filetsc è l'oracolo del dead code (vedi CLAUDE.md). Estensione qualità: mutation testing (Stryker, 87% sui money-path) + bundle profiler + auto-bootstrap dello stack.

In parole semplici: quando l'AI scrive codice usando una libreria esterna, spesso non legge il codice vero della libreria ma solo la documentazione, e a volte "indovina" sbagliando — soprattutto sulle versioni nuovissime del nostro stack (React 19, R3F v9, Next 16, Tailwind v4). Questi strumenti danno all'agente il contesto reale.

Strumento Cosa fa Stato
graphify (knowledge graph) Trasforma il nostro codice in una mappa interrogabile (graphify query): l'agente trova le cose per struttura invece di leggere a tappeto. Grafo always-on code-only (~6.2k nodi/321 gruppi, scope app via .graphifyignore), git-hook a ogni commit, ~34x meno token (misurato) · v74 2026-06-04 → completato 2026-06-06. 🟢 Live (PR #306): strato semantico acceso — 321/321 gruppi con nome leggibile (via sessione Claude·Anthropic, preservati dall'hook). Un solo hook.
opensrc (Vercel Labs) Scarica il sorgente reale delle dipendenze (npm/PyPI/crate/GitHub) alla versione esatta (cache globale ~/.opensrc), così l'agente sviluppa contro il codice vero della libreria. 🟢 Adottato (PR #306): 7 pacchetti pre-fetchati (R3F9·three·drei·zustand·supabase-js·tailwind3+4·next16) + react-query, workflow opensrc path in CLAUDE.md
Serena (LSP · MCP) "IDE per l'agente": naviga/edita il codice esistente a livello di simbolo (find_symbol·find_referencing_symbols·replace_symbol_body) via Language Server, invece di leggere/riscrivere file interi → più preciso, meno token. graphify = mappa, Serena = bisturi. 🟢 Live (PR #330): MCP user-scope · serena venv 3.13 + PYTHONUTF8=1 · context ide-assistant · health-check OK su codice reale (TS LSP: find_symbol/refs/pattern)
ast-grep (CLI) Ricerca/refactor strutturale sull'AST (non testo): trova/riscrive pattern di codice su tutto il repo in sicurezza, dove grep sbaglia (distingue chiamata da stringa/commento, match multi-riga). 🟢 Adottato (PR #330): v0.43 · ast-grep run -p '<pattern>' -l tsx · verificato su codice reale
doc-graph (graphify · intento) Grafo dell'intento: il canon (decisioni business/prodotto) reso interrogabile, separato dal grafo codice → l'agente capisce il perché senza leggere tutto il canon. 🟢 Live (PR #334): scripts/graphify-intent.py via Claude · query --graph graphify-out/intent/graph.json (~90× meno token) · on-demand ~$0.85/refresh, caveat staleness documentato
Knip Dead code: trova file/export/dipendenze inutilizzati → meno superficie d'attacco, bundle, confusione. 🟢 GATE BLOCCANTE in CI (PR #358, 2026-06-10): bonifica COMPLETA — 0 issue (−28 file/−7.100 righe in #358, sommati ai −21 file di #343). Scaffold WIP ≠ dead code: file interi → ignore commentati in knip.jsonc (visibility, web-hub, analytics, caps, push, ai-pipeline, 3D founder) · export singoli → tag /** @wip */. pnpm knip
dependency-cruiser Architettura: vieta cicli + import illegali (client src/→serverless api/, codice→test). Blinda il layering pulito + sicurezza import. 🟢 Gate live (PR #334) · i 6 cicli SPEZZATI (PR #343, estratti i tipi condivisi) → baseline 16→6→4 (#358, 0 cicli) · gate sulle NUOVE violazioni nel job Typecheck+build
Stryker (mutation testing) Qualità dei test: muta il codice e verifica che un test fallisca → scopre i test che "passano ma non catturano i bug" (la coverage di riga no). 🟢 Adottato (PR #343) · on-demand sui money-path sales (pnpm -F multiverbe-dashboard mutation): 87% score, survivor reali (es. getUTCMonth()+1-1 non catturato) · NON in CI (lento) · estendere a pricing/booking/growth
rollup-plugin-visualizer Bundle/perf: treemap dei chunk (gz/brotli) per decidere split/lazy. 🟢 Adottato (PR #343) · pnpm -F multiverbe-dashboard analyzedist/bundle-stats.html · chunk pesanti oggi: three 689KB · index 783KB · icons 508KB
dev-stack-bootstrap Auto-innesco: costruisce graphify-out se manca (worktree nuovo, pre-primo-commit) → stack pronto a costo zero senza invocazione manuale. 🟢 Adottato (PR #343) · scripts/dev-stack-bootstrap.mjs idempotente + fail-soft · cablabile a SessionStart

Guardrail: provider AI per lo strato semantico solo Anthropic/Gemini (VIETATI DeepSeek/OpenRouter); opensrc/ + output del grafo nel .gitignore; un solo git-hook (no doppioni); niente PII/segreti nel grafo. Task operativa: ops/opensrc-graphify-agent-tooling-2026-06-06.md.


Hard rules tecniche

  1. Workspace isolation — OGNI query DB filtra per workspace_id. Vedi skill multiverbe-supabase-rls-patterns.
  2. R3F v9 stable — NO v10 alpha. Hard gate 10 Giu.
  3. DeepSeek MAI — bloccato in Italia.
  4. SMTP — credenziali in DB (smtp_configs), NON in env var.
  5. Direct DB Supabase è IPv6 only — usare SQL Editor per DDL.
  6. RLS attivo su TUTTE le tabelle — vedi skill multiverbe-supabase-rls-patterns.

Sub-processor list (revFADP / GDPR)

Per privacy policy + DPA inbound:

  • Anthropic (US) · Mistral (FR) · Google Gemini (US) · OpenAI (post-Series-A only) · Stripe (US/IRL) · Datatrans/Payrexx (CH) · Brevo (FR — transactional Multiverbe) · Resend (US — Metaverbe agenzia only) · Vercel (US/EU) · Supabase (US/EU — project yqhixdqipojvgzfadufo eu-central-1 Frankfurt) · Upstash Redis (US HQ · instance EU-West-1 — rate-limit Phase 2 Security Hardening 2026-05-19 · solo IP truncato + workspace_id · no PII raw) · Iubenda (IT — cookie banner + privacy policy 92115618) · Perplexity (US — Reach · Visibilità AI · query non-PII settore+città · sub-processor secondary aggiunto a subprocessors.ts+changelog 2026-06-06 · preavviso 30gg, efficace 2026-07-10 · DPA URL da verificare) · Sentry (US/EU) · Cloudflare (US/global) · Register.it (IT — DNS + mailbox SMTP)

SSoT interno BOS dettagliato: ops/sub-processors.md (11 active + Perplexity in preavviso 30gg eff. 2026-07-10 · Tavily classificata NON sub-processor — fonte dati pubblica, query settore+zona, zero PII · storia change · note compliance Schrems II + Swiss adequacy).

Tracking SOC2/ISO 27001 + DPA inbound: skill multiverbe-ch-compliance.


Ultimo update: 2026-06-07 · (STACK AGENTE — POTENZIATO + MISURATO) Sessione doppia: lo stack usato per bonifica reale (PR Multiverbe#343 · 6 cicli→0 + 21 file/4 dep morti rimossi, PR verde) ed estesoStryker mutation testing (87% sui money-path sales, survivor reali), rollup-plugin-visualizer (bundle treemap), dev-stack-bootstrap (auto-innesco di graphify-out). Affidabilità: scoperto+documentato che la ricerca-referenze di Serena sotto-riporta i tipi cross-file → tsc come oracolo del dead code + convenzione @wip. Vantaggi totali nella tabella + riga "Effetto misurato" qui sopra. Precedente: 2026-06-06 · (TOOLING AGENTE — FATTO) Eseguito nel repo codice (PR Multiverbe#306): grafo graphify ristretto al codice app (.graphifyignore · code-only ~6.2k nodi/321 gruppi, prima 9k+ con doc+vendored) + strato semantico acceso (321/321 gruppi nominati via sessione Claude/Anthropic, preservati dall'hook) + opensrc adottato (cache ~/.opensrc, 7 pacchetti) + sezione operativa in CLAUDE.md del repo codice. Un solo hook (graphify post-commit/checkout). Dettaglio: ops/opensrc-graphify-agent-tooling-2026-06-06.md. Precedente: 2026-06-06 · (TOOLING AGENTE) Aggiunta sezione "Tooling agente di sviluppo": opensrc (Vercel Labs · sorgente reale delle dipendenze per l'agente, additivo da adottare) + graphify (consolidare/finire il grafo della conoscenza già esistente — v74 — accendendo lo strato semantico). Guardrail provider (NO DeepSeek/OpenRouter) + .gitignore artefatti. Task: ops/opensrc-graphify-agent-tooling-2026-06-06.md. Precedente: 2026-06-06 · (RICERCA ESTERNA) Tavily (web-trends Pianeta Content · Free $0) + Perplexity (Reach · Visibilità AI · ~$0.0055/check · cap 30/100) accese in prod con guardrail+ledger+Sentry (PR #277 merged+deployato · key inserite 2026-06-06 · Perplexity verificata live via probe 404 no_published_site) · grana-città live · flywheel competitor→Content #282 aperto · Tavily NON sub-processor / Perplexity sub-processor preavviso 30gg (eff. 2026-07-10) · strategia ops/external-search-apis-strategy-2026-06-06.md. · (VOCALE) Mistral Voxtral STT aggiunto allo Stack AI (vocale sovrano EU · $0.003/min · attivato via env STT_ENABLED+VITE_STT_SOVEREIGN, MISTRAL_API_KEY già presente · ⚠️ org Mistral senza metodo di pagamento + 0 crediti → founder deve aggiungere billing o il vocale non funziona) + redirect alias app.multiverbe.app/.commultiverbe.app (307 · .app verificato live, .com aspetta CNAME al DNS) — vedi decisions-log. (0) Supabase passato a Pro ($25/mo · backup PITR + niente pausa per inattività) — riga DB aggiornata + costo aggiunto alle tabelle BUILD (vedi decisions-log v83). (1) GitHub passato a piano a pagamento (Pro/Team, nome esatto da confermare) — riga aggiornata + nuovo avviso sui minuti GitHub Actions (90% dei 3.000 mensili bruciati in 5 giorni per la capacità 4x · vedi decisions-log v82). (2) Aggiornati i costi mensili reali: la fase BUILD ora riflette l'abbonamento Claude Max 20x (~$200/mo, capacità di lavoro 4x, decisione founder v79 del 2026-06-04) al posto della vecchia riga "Claude Code Max ×2 = €220" e del modello a token (~CHF 1.500 API). Rimossa la voce residua Google Workspace $18 dalla tabella SELL (servizio dismesso il 2026-05-17, sostituito da ImprovMX + Brevo). Aggiunto l'abbonamento Claude come costo fisso anche nelle fasi SELL e SCALE per coerenza. Precedente: 2026-05-21 · riscrittura accessibile (regola CLAUDE.md § Stile di scrittura): aggiunta la sezione "In parole semplici" + un piccolo glossario per chi non è tecnico, così la pagina è comprensibile anche a Loris. Corretto il nome del progetto Vercel del BOS (multiverbe-bosmultiverbe-bos-app, in linea con la Regola Hard #0). Precedente: 2026-05-19 · Mother session monumentale · ADDED Upstash Redis rate-limit Phase 2 Security Hardening (riga Stack Core + sub-processor list + ref ops/sub-processors.md SSoT BOS) + Iubenda esplicita nella sub-processor list. Precedente 2026-05-17 audit-batch: (1) multiverbe.ch ✅ active (era pending, acquistato 2026-05-15 Vercel Domains $17.99). (2) Google Workspace RIMOSSO (filosofia decentralizzata + ImprovMX free + Brevo bastano · $18/mo risparmiati). 2026-05-14: corretta riga frontend — multiverbe-app è Vite 5 (NON Next.js), sites-runtime è Next.js 16 (drift scoperto da P1 sul campo, verificato via package.json). 2026-05-10 deploy Vercel + Brevo + Supabase ricreato. Owner: Gregorio (decisioni stack)

SSoT = _data/canon/05-stack.md