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 + memoryproject_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 bucketsite-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 · persistenzadesign_reviews(ship/accept_with_warning→approved, fix→rejected) · trigger post-publish · shadow-regen (#492): rigenerare un sito già live NON lo declassa più (restapublished, nuove pagine = copia shadowpreview, swap atomico via RPCswap_site_shadow_pages· migration2026-06-30aAPPLICATA a prod 2026-07-01, verificata service_role-only) → outage da minuti a sub-secondo · render EU = servizioservices/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 VercelPSI_API_KEY/VISUAL_RENDER_ENDPOINT/VISUAL_RENDER_TOKEN, MAI Cloudflare · migration2026-06-30agià applicata a prod) - Gemini Batch API (-50%) · learn, analytics, report (non real-time)
- Perplexity (Sonar
sonar· contextlow) · ricerca web real-time perapi/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 inexternal_api_usage+ alert Sentry · key inserita + verificata live 2026-06-06 (probe404 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ì (scriveexternal_api_usageprovider=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 (envSTT_ENABLED+VITE_STT_SOVEREIGN,MISTRAL_API_KEYgià 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 |
|---|---|---|
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.json › domains_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.app — app.* sono solo alias di redirect (prima davano 404/DEPLOYMENT_NOT_FOUND, ora puntano all'app).
app.multiverbe.app→multiverbe.app✅ attivo · verificato live (www.multiverbe.appresta 308).app.multiverbe.com→multiverbe.app· redirect configurato ma "DNS Change Recommended" → 🔲 TO-DO opzionale founder: aggiungere il record CNAMEapp.multiverbe.com → cname.vercel-dns.comal 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:
- Cliente PMI → signup
multiverbe.app(Vite 5 PWA · auth Supabase JWT conworkspace_idclaim) - 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)
- Supabase eu-central-1 (
yqhixdqipojvgzfadufo) → 39 tabelle + 15 migrations · RLS multi-tenantWHERE workspace_id = auth.uid()su tutte le tabelle cliente-facing · cliente A non legge mai dati cliente B - Sites Runtime (
multiverbe-sitesNext.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) - DNS pubblico → wildcard
*.multiverbe.app(Starter+Pro zero-touch) + custom domain CNAME (Business · cliente porta dominio · Vercel Domains API idempotent + Cloudflare DNS) - 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 repoD:\Desktop\Multiverbe, non in questo. Vedidecisions-log.mdv82.
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-file → tsc è 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 analyze → dist/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
- Workspace isolation — OGNI query DB filtra per
workspace_id. Vedi skillmultiverbe-supabase-rls-patterns. - R3F v9 stable — NO v10 alpha. Hard gate 10 Giu.
- DeepSeek MAI — bloccato in Italia.
- SMTP — credenziali in DB (
smtp_configs), NON in env var. - Direct DB Supabase è IPv6 only — usare SQL Editor per DDL.
- 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
yqhixdqipojvgzfadufoeu-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-processorsecondaryaggiunto asubprocessors.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 esteso — Stryker 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/.com → multiverbe.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-bos → multiverbe-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)