Dogfooding Gap Audit — Multiverbe come primo cliente Business
2026-06-04 · sessione "collega Multiverbe a Multiverbe". Account reale
metaverbe@gmail.com→ workspace Multiverbe (web-agency, Lugano/CH, tier Business). Audit di qualità production-ready su ogni pianeta, dalla prospettiva di un cliente Business.
Risultati strutturali della sessione
- ✅ Primo vero utente creato e completo (onboarding reale via UI, Sole con identità
entity_profile: tonodirect, brief web-agency). - ✅ Bug gate-blocker risolto + in prod (PR #189): l'onboarding scriveva
workspaces.sector(colonna rimossa) →PGRST204→ ogni cliente bloccato su "Errore durante il salvataggio". Solo i DEMO seedati via SQL risultavano completi. Fix verificato end-to-end sul deploy nuovo. - ✅ Tier Business attivato (subscription
plan_tier=business) → Content + Sales sbloccati. Marketing/HR/Finanza restano nascosti perchéplanet_registry.status='planned'(corretto).
Tema trasversale dominante (il vero P0)
L'app GENERA con AI di qualità ma spesso non CONSEGNA, e l'intelligenza non è ovunque. I motori di generazione sono solidi; si rompono i loop a valle (invio/pubblicazione/scheduling) e manca del tutto l'AI dove serve di più: la gestione messaggi.
Nota di accuratezza: il tono utente è applicato nella generazione (Content generate-text, Sales generate-outreach) via buildSoleIdentity → renderToneLine su tutte le surface (sole-identity.ts:548,599-609). Il gap NON è "il tono non è iniettato", ma "manca generazione AI nei messaggi CRM" e "i loop non chiudono".
Gap-list per pianeta (P0 = blocca cliente pagante)
⚠️ CORREZIONE 2026-06-05 (sessione B · verificata sul codice + DB prod). Alcuni P0 qui sotto erano imprecisi. Verifica SEMPRE sul codice prima di costruire.
- Web NON è "Inngest worker mancante". L'architettura Site Builder è QStash, non Inngest:
start.tspubblica →api/site-builder/worker.ts(esecutore, c'è) →orchestrator.ts(pipeline 6-stage completa) →llm-client.ts(Anthropic + Moonshot/Kimi). Frontend cablato (Step6 → start → poll → SneakPeekLive). Il vero buco di codice = Stage 4 immagini tutte stub (src/lib/site-design/ai-pipeline/stage-4-visual-director.tsfathrow "not yet implemented") → il sito si genera ma senza immagini AI (fail-soft). Fix giusto: cablare Stage 4 al gateway sovranodispatchImage(Imagen Vertex EU, già in prod per Content) via injection (comellm). Il vero blocco GATE è infra: envQSTASH_*+ Vertex +MOONSHOT_API_KEY— mai girato end-to-end in prod (DB: 0 righeai_generation_jobs; l'unicositesè un demo seedato via SQL).- Content "l'app genera ma non consegna". Causa vera del "Approva non salva": drift
platform='meta_*'+status='APPROVED'violavano i CHECK disocial_posts→ insert respinto +catch {}silenzioso → 0 righe, calendario vuoto. RISOLTO → PR #262: save canonico + programmazione (scheduled_at) + worker promemoria onesto (/api/cron/content-scheduler). Resta post-gate: auto-post social reale (epic API Meta/LinkedIn + OAuth) e consolidamento sucontent_items(canon).
Web (core solido, satelliti stub)
- P0
AI Pipeline worker mancante (Inngest)→ vedi CORREZIONE sopra: il worker QStash esiste e la pipeline è completa; il buco reale di codice è Stage 4 immagini stub (cablare adispatchImage), il blocco gate è infra (QSTASH_*/Vertex/Moonshot env, mai girato end-to-end). - P0 Web Hub adapter concreti non implementati (collegamento sito esterno) — rinviati a luglio.
- P0 Email Hub + blog satellite assenti.
- P1 MFA UI stub (
SettingsPage.tsx:1118), observability/Sentry, email delivery monitoring (bounce/unsub). - Solido: Site Builder orchestrator, Stripe end-to-end, Reach/SEO cockpit, auth/RLS, qualità visiva (moat).
Booking (flusso solido, 5 blocker)
- P0 Schema drift
starts_at/ends_atvsslot_start/slot_endtra migration. - P0 Race condition double-booking: count+insert fuori transazione (serve advisory lock).
- P0 Template Brevo non seedati (
seed-brevo-templates-bookingda creare). - P0 Webhook Stripe deposito incompleto (no
checkout.session.completedper booking). - P0 Rate-limit in-memory (non distribuito) → falsi negativi a scala.
- P1 No-show UI, tabella
notification_preferencesassente, refund workflow, allocazione multi-team.
Content (generazione solida, consegna mancante)
- P0 Calendario editoriale + scheduling assenti (no
scheduled_for, no/api/content/schedule). - P0 Auto-publish (n8n) è solo testo UI, non implementato.
- P1 Quality-score non gating pre-publish; parsing JSON platformReady fragile.
- Solido: generazione testo (Gemini EU) + immagine (Imagen EU) con tono+humanizer+provenance Art.50, fail-closed sovrano.
CRM + Messaggi (inbox email solida, intelligenza assente) ← mandato founder
- P0 Zero AI drafting/reply: nessun
/api/ai/draft-message. Il "gestire messaggi con intelligenza" non esiste ancora. - P0 Humanizer mai cablato al compose; settore ignorato nel messaging.
- P0 WhatsApp/SMS/IG = stub
501(richiede Meta Business API + Twilio). - P1 LTV sparkline mockato, reply-suggestions da storico assenti, loyalty config hardcoded.
- Solido: inbox UI multi-canale, invio email Brevo reale, timeline (trigger), Sole CRM suggestions (agentico, PII-gated) — ma isolato dal compose.
Sales (pipeline solida, non transazionale)
- P0 Genera outreach ma zero invio reale (no
/api/sales/send-outreach). - P0 Automation cold 3-step (delay email2/DM) non implementata (n8n json statico).
- P0 CRM timeline disconnessa (call log placeholder).
- P1 Territory auto-assign stub, commission rules senza logica, leaderboard non persistito.
- Solido: pipeline kanban, boss-view + RLS 2 livelli, quotas, sub-accounts, generazione Mistral EU con tono.
Cross-cutting / infra
- Comp/internal account: manca un modo pulito per assegnare un piano senza checkout Stripe (
subscriptions.stripe_customer_idNOT NULL). Per il dogfooding usatocomp_internal_hq_multiverbe(dato, reversibile). Da formalizzare per early-adopter/comp. - Legacy 'opera':
pipeline_opera,OperaSectionecc. da deprecare verso i 6 pianeti canonici.
Piano in ordine (qualità, allineato al mandato)
STATO 2026-06-05 (sessione A→C→B): #1 FATTO → "il Sole che scrive" CRM (PR #221 merged:
/api/messages/draft-replytono+settore, sovrano EU). #3 FATTO → Booking a prova di pagante (PR #226 merged: race double-booking via RPC atomico, email Brevo inline, webhook deposito Stripe). #2 (Sales send) DEFERITO con piano → non shippabile via relay transazionale (ToS Brevo + reputazione dominio): è l'Email epic (invio per-workspace dalla casella propria). Piano:ops/path-b-sales-send-outreach-plan-2026-06-05.md.
- Motore "Sole che scrive" come servizio condiviso + AI nei messaggi CRM. Estendere la voce (tono
entity_profile+ humanizer + settore), già viva in Content/Sales, al compose dei messaggi:/api/ai/draft-message(bozza + reply dal contesto thread/contatto), wired inMessagesPage. Risolve il P0 più citato e il mandato founder. - Chiudere i loop genera→consegna. Content: scheduling + auto-publish. Sales:
send-outreach+ automation 3-step. (Email reale già c'è via Brevo.) - Booking hardening (5 blocker P0) — primi clienti hospitality/beauty.
- Web: Inngest pipeline worker (P0 critico) + Email Hub.
- Deprecare 'opera' legacy (mappare impatto, poi rinominare senza rompere).
- Collegamento dati/landing (no hardcoded) + comp/internal account pulito.
Email — epica già pianificata (task separato)
Sistema completo (test SMTP/IMAP reale senza Render + invio da casella propria + inbox IMAP sync + AI compose) ≈ 35-40h. Architettura: endpoint Vercel Node (nodemailer/imapflow) + edge relay + pg_cron. Fasi: 0 (collega+test+invio) → 1 (inbox sync) → 2 (UX wizard). Confluisce nello Step 1-2 sopra per la parte AI.