Azioni manuali founder — 2026-05-10 (post env update)

Generato dopo cleanup .env + sync Supabase keys + autoraization founder. Tutte queste azioni richiedono il browser, account dashboard o riavvio Claude → Claude non può fare. Ordine: priorità decrescente.


🔴 PRIORITÀ 1 — Sblocca signup/login app (15 min totale)

A1 · Service Role Key Supabase (5 min)

Perché: Backend Python daily_run.py + script admin usano SUPABASE_SERVICE_ROLE_KEY per bypassare RLS. Se manca, qualsiasi script lato server fallisce. La key NON è in memoria (è secret server-side).

Procedura:

  1. Apri https://supabase.com/dashboard/project/yqhixdqipojvgzfadufo/settings/api
  2. Sotto "Project API keys" trovi 2 row: anon public (già nel .env) e service_role secret (questa)
  3. Click "Reveal" sulla riga service_role → click "Copy"
  4. Apri D:\Desktop\Multiverbe\.env con un editor (NON commitarlo, è gitignored)
  5. Trova la riga commentata # SUPABASE_SERVICE_ROLE_KEY=sb_secret_TODO_RECUPERARE_DA_DASHBOARD e sostituiscila con SUPABASE_SERVICE_ROLE_KEY=sb_secret_<la_key_che_hai_copiato> (rimuovi il # iniziale)
  6. NON incollare la key in chat — solo nel file .env. Mi dici "service role key incollata in env" senza condividerla.

A2 · Vercel env vars frontend (5 min)

Perché: il frontend in produzione su app.multiverbe.com legge env vars da Vercel, NON dal .env.local (quello è solo per dev locale). Senza queste keys, signup/login NON funziona in produzione anche dopo push commit.

Project Vercel: multiverbe-app (rinominato 2026-05-10 da maind-dashboard).

Procedura:

  1. Apri https://vercel.com/dashboard → trova project multiverbe-app → Settings → Environment Variables

  2. Clicca "Add New" e aggiungi questi 3 env vars. Spunta solo Production + Preview (Vercel non permette sensitive vars in Development per policy security — il dev locale legge da .env.local che è già configurato):

    Name Value Scope
    VITE_SUPABASE_URL https://yqhixdqipojvgzfadufo.supabase.co ✅ Production · ✅ Preview
    VITE_SUPABASE_ANON_KEY sb_publishable_0ifZ2x1UmJuxLDBg8rMdIA_QBtveGRm ✅ Production · ✅ Preview
    VITE_ONBOARDING_V2 true ✅ Production · ✅ Preview
  3. Save → poi al prossimo push (A3) Vercel auto-deploy con le nuove env vars. Se vuoi forzare subito: Deployments → trova l'ultimo → "..." menu → "Redeploy" (use existing build cache: NO).

A3 · Push commit sessione B (1 min)

Perché: la sessione B ha lasciato il commit fa154f7 (feat: onboarding 5 macro × 18 settori + AI fallback Sonnet 4.6) NON pushato per tua review.

Procedura:

  1. Nel terminale locale cd D:\Desktop\Multiverbe
  2. git log --oneline -5 per vedere il commit (fa154f7)
  3. git status per vedere cosa hai di non committato (potrebbe esserci anche il commit [next] con DB migration files dalla sessione B)
  4. Se vuoi review prima: git show fa154f7 per vedere il diff completo
  5. git push — Vercel auto-deploy parte. Controlla https://vercel.com//maind-dashboard/deployments

A4 · Test signup end-to-end (5 min)

Perché: validare che tutto funziona dopo A1-A3.

Procedura:

  1. Apri https://app.multiverbe.com
  2. Click "Sign up" → email nuova (es. gregorio+test1@gmail.com)
  3. Riceve magic link via Brevo → click → conferma
  4. Login → SetupWizardV2 deve partire (4-dot indicator in alto a sinistra, non i 5-dot legacy)
  5. Step 1: clicca "🍽️ Hospitality" → 4 sector cards (Ristorante / Bar / Hotel / B&B)
  6. Step 2: clicca "Ristorante" → Step 3
  7. Step 3: nome workspace + città Lugano + 1 dipendente + range fatturato + dolore primario → "Vedi dashboard"
  8. Step 4: tour 5-frame → "Inizia da qui"
  9. Verifica DB: nel Supabase Dashboard → SQL Editor → SELECT * FROM workspaces ORDER BY created_at DESC LIMIT 1; — deve mostrare workspace nuovo con business_type='restaurant', onboarding_completed=true

Se A4 fallisce: dimmi quale step rompe + screenshot eventuale errore browser console (F12).


🟡 PRIORITÀ 2 — Stripe MCP riattivazione (5 min)

S1 · Riattivare Stripe MCP server

Stato: il system reminder all'inizio di questa sessione mi ha segnalato che mcp__plugin_stripe_stripe__authenticate e mcp__plugin_stripe_stripe__complete_authentication sono "no longer available (their MCP server disconnected)". Quindi il plugin Stripe è installato ma il suo server MCP non gira.

Tu non puoi farlo via chat — è un'operazione client-side. Procedura:

Opzione A · Riavvio Claude Code (sicuro, 30 sec):

  1. Chiudi tutte le sessioni Claude Code aperte
  2. Riapri: terminale → cd D:\Desktop\Multiverbe-Business && claude
  3. Verifica: il system reminder iniziale dovrebbe mostrare mcp__plugin_stripe_stripe__* nella lista deferred tools (NO più "no longer available")
  4. Mi dici "Stripe MCP riattivato" → io lancio mcp__plugin_stripe_stripe__authenticate immediatamente

Opzione B · Reload solo il plugin Stripe (se opzione A non funziona):

  1. In Claude Code, scrivi /plugin (slash command)
  2. Cerca Stripe nella lista
  3. Disable → Enable per forzare reload

Opzione C · Reinstall completo (se A+B non funzionano):

  1. /plugin uninstall stripe
  2. /plugin install stripe
  3. Riavvio sessione

S2 · Stripe authenticate (1 min, dopo S1)

Quando: dopo che mi dici "Stripe MCP attivo".

Procedura:

  1. Io chiamo mcp__plugin_stripe_stripe__authenticate → mi ritorna URL browser
  2. Tu apri URL nel browser → login Stripe (con 2FA app, ora che è fixed) → autorizza
  3. Io chiamo mcp__plugin_stripe_stripe__complete_authentication → MCP attivo
  4. Da quel momento posso creare prodotti, prezzi, webhooks via MCP

S3 · Creazione prodotti + prezzi (15 min, dopo S2)

Cosa creo io via MCP (zero tua azione, solo conferma):

  • Product multiverbe-starter + Price monthly CHF 79 + Price annual CHF 790
  • Product multiverbe-pro + Price monthly CHF 149 + Price annual CHF 1.490
  • Product multiverbe-business + Price monthly CHF 249 + Price annual CHF 2.490
  • Product multiverbe-setup-starter (one-time CHF 590)
  • Product multiverbe-setup-pro (one-time CHF 890)
  • Product multiverbe-setup-business (one-time CHF 1.290)

Output: 9 price IDs Stripe che metto in .env.local + Vercel env vars.

S4 · Webhook endpoint (10 min, dopo S3)

Cosa: Stripe deve poter notificare la nostra app quando subscription cambia stato (created, paid, canceled, dunning).

Procedura mista (io scaffold + tu attivo):

  1. Io creo route handler /api/stripe/webhook (file frontend/maind-dashboard/maind-dashboard/api/stripe/webhook.ts) — gestisce eventi customer.subscription.*, invoice.*, checkout.session.completed
  2. Tu vai su https://dashboard.stripe.com/webhooks → "Add endpoint" → URL https://app.multiverbe.com/api/stripe/webhook → eventi da subscribere (te li listo: 8 eventi base) → save → ricevi whsec_... signing secret → metti in env vars Vercel come STRIPE_WEBHOOK_SECRET

🟢 PRIORITÀ 3 — Compliance signup (45 min totale)

C1 · iubenda Pro signup (15 min) — €27/mo

Procedura:

  1. https://www.iubenda.com/it/registrazione → Plan Pro Yearly €324/anno (sconto vs monthly)
  2. Tab "FADP" → enable toggle (Swiss compliance) — fundamental
  3. Crea documenti per app.multiverbe.com + multiverbe.com:
    • Privacy Policy + Cookie Policy + ToS in IT (primary), DE, FR, EN
    • Sub-processor list (importante GDPR Article 28): Anthropic (US), Mistral (FR), Google (US/EU), Stripe (US/IRL), Datatrans (CH, post-Q4), Brevo (FR) — non più Resend, Vercel (US/EU), Supabase (US/EU project Frankfurt), Sentry (US/EU)
    • Cookie scan: lancia per multiverbe.com (richiede DNS verify TXT, 5 min)
  4. Embed JS code → mi dai i 2 snippet (privacy.iubenda.com + cookies.iubenda.com), io li integro nel <head> di landing/ e app.multiverbe.com
  5. Verifica live: https://multiverbe.com/privacy + /cookie + /tos

Skill chain: multiverbe-ch-compliance

C2 · Klaro integration (15 min) — €0

Differenza vs iubenda: iubenda gestisce documenti legali (Privacy/Cookie/ToS), Klaro gestisce banner cookie consent (Consent Mode v2). Lavorano insieme.

Procedura mista (io codice + tu zero azione, è un'integrazione tecnica):

  1. Io aggiungo klaro al package.json frontend
  2. Io creo src/lib/klaro-config.ts con consent categories (necessary always-on / preferences / analytics / marketing) + Nebula Glass styling override
  3. Io aggiungo <KlaroProvider> nel layout root
  4. Io test in dev → tu valida UI banner

C3 · Bitwarden free signup (5 min) — €0

Procedura:

  1. https://bitwarden.com/products/personal/ → Sign up free (email founder)
  2. Master password 20+ char (memorizza, non scrivere — usa frase mnemonica)
  3. Stampa Emergency Recovery Code (PDF generato dal sito) → safe location fisica
  4. Crea folder organization: Multiverbe Business + Personal
  5. Importa keys correnti: ANTHROPIC_API_KEY, MISTRAL_KEY, BREVO_API_KEY, SUPABASE_*, GROQ_KEY, GEMINI_KEY, GMAIL_APP_PASSWORD, SMTP_PASSWORD (10+ entries) — copy from .env root → Bitwarden vault
  6. Invite Loris quando vuoi (post Loris onboarding)

Skill chain: multiverbe-security-ch

C4 · Aegis Authenticator install (5 min) — €0

Solo Android. Per iOS: usa Authy (cloud sync, free).

Procedura Android:

  1. Play Store → cerca "Aegis Authenticator" (open source, ~5MB)
  2. Install → setup encrypted backup (richiede password)
  3. Add account: scan QR da ogni dashboard 2FA enable:
    • GitHub Settings → Security → 2FA → Add app
    • Vercel Account → Security → 2FA
    • Supabase Account → MFA
    • Stripe Dashboard → User → Security → 2FA app authenticator
    • Anthropic Console → Account → Security → MFA
    • Google Workspace → Security → 2-Step Verification → Authenticator app
  4. Aegis crea backup encrypted in Drive/Local → safe

C5 · Apollo.io signup free (5 min) — €0

Per: Loris primo mese sourcing prospect Lugano.

Procedura:

  1. https://www.apollo.io/sign-up → Free plan (50 leads/mo + 25 email finder)
  2. Crea filtri saved search: Location=Lugano (50km radius) + Industry=Restaurants/Beauty/Health/Professional Services + Company Size=1-50 + Title=Founder/CEO/Owner
  3. Verifica: ritorna ~50-200 prospect Ticino
  4. Export CSV → import in Multiverbe leads table quando Pianeta Sales W3

📋 Status post azioni

Quando hai completato A1+A2+A3+A4 (priorità 1) e mi dici "fatto", io:

  1. Verifico stato signup tramite query Supabase MCP
  2. Procedo Day 4 roadmap (struttura templates Site Builder + brand_memory schema check)
  3. Sblocco Stripe MCP setup (S1+S2+S3+S4) appena lo riattivi

Per priorità 2-3 (Stripe + compliance + signup security): ognuna autonoma, fai quando hai energia. Nessun ordine forzato tra di loro.


🆕 PRIORITÀ NUOVA — Onboarding V2 + DB MVP completo (post sessione B 2026-05-10)

B1 · ANTHROPIC_API_KEY Vercel server env (5 min, scheduled 2026-05-12)

Perché: API route /api/ai/sector-deduction chiama Sonnet 4.6 per dedurre settore PMI dal testo libero in onboarding step 2.5 chat fallback. Senza key, l'API risponde 503 e il frontend cade graciously su keyword pattern matching (90 keyword mappati ai 21 settori).

Procedura:

  1. Apri https://vercel.com//maind-dashboard/settings/environment-variables (o multiverbe-app se rinominato)
  2. "Add New" Environment Variable:
    • Name: ANTHROPIC_API_KEY (NO VITE_ prefix — server-side only)
    • Value: la key da https://console.anthropic.com/settings/keys (crea key dedicata "Multiverbe Vercel" per audit)
    • Environments: Production + Preview ✅ (Development opzionale)
  3. Redeploy progetto (Vercel → Deployments → ⋯ → Redeploy)
  4. NON incollare la key in chat
  5. Test in chat: "anthropic key vercel done" → io verifico chiamata API funziona

B2 · VITE_ONBOARDING_V2=true Vercel env (2 min, dopo B1)

Perché: feature flag attiva il nuovo SetupWizardV2 (4-step ~3min target) invece del legacy SetupWizard (5-step). Default false per safety.

Procedura:

  1. Vercel env vars → "Add New":
    • Name: VITE_ONBOARDING_V2
    • Value: true
    • Environments: Preview ✅ first per testarlo, poi Production quando OK
  2. Aggiungi anche in .env.local locale (se sviluppi)
  3. Redeploy preview
  4. Test: registra utente nuovo con email confirmation disabilitata (vedi B3) → SetupWizardV2 si apre

B3 · SMTP Brevo signup confirmation Supabase Auth (10 min, scheduled 2026-05-13)

Perché: di default Supabase Auth manda email di confirmation via SMTP gratuito limitato (4 email/h). Per produzione serve SMTP custom — abbiamo già Brevo configurato a noreply@multiverbe.com via subdomain send.multiverbe.com.

Procedura:

  1. Apri https://supabase.com/dashboard/project/yqhixdqipojvgzfadufo/auth/templates
  2. Tab "SMTP Settings" → toggle "Enable Custom SMTP"
  3. Compila:
    • SMTP Host: smtp-relay.brevo.com
    • SMTP Port: 587
    • SMTP User: il tuo SMTP key Brevo username (formato 8xxxxxxxxxx@smtp-brevo.com)
    • SMTP Password: la SMTP key da Brevo dashboard (Settings → SMTP & API → SMTP)
    • Sender email: noreply@multiverbe.com
    • Sender name: Multiverbe
    • Minimum Interval Between Emails: 60 (anti-abuse)
  4. Click "Save"
  5. Test in tab "Email Templates":
    • Customize "Confirm signup" template (Italian, brand Multiverbe)
    • Send test email to tua mail
  6. Verifica ricezione + click conferma funziona

ATTENZIONE: Brevo richiede DNS authentication SPF/DKIM/DMARC + verified domain send.multiverbe.com. Se non già fatto vedi decisions-log.md 2026-05-10 per status DNS. Se Brevo è ancora in pending verify domain (riga 49 current-week.md), B3 va dopo aver risolto quel bloccante.

B4 · Disable cron Supabase render-keepalive (1 min, post-MVP)

Perché: il cron render-keepalive ogni 14 min pinga il backend Render multiverbe-pipeline.onrender.com per evitare che si addormenti. Ora che MAIND Python è deprecato (vedi legacy/maind-python/), il ping è inutile.

Procedura:

  1. Apri Supabase SQL Editor
  2. SELECT cron.unschedule('render-keepalive');
  3. Su Render dashboard, pause/delete service multiverbe-pipeline.onrender.com (CHF 7/mo risparmiati)
  4. Conferma chiusura Render in decisions-log.md

B5 · Push remote Multiverbe + Multiverbe-Business branch (3 min)

Perché: 5+ commits locali pendenti su sessione B fix.

Procedura:

  1. cd D:\Desktop\Multiverbe && git push origin claude/competent-mcnulty-b059b3 (se autorizzato — chiedi a Claude di farlo prima)
  2. cd D:\Desktop\Multiverbe-Business && git push origin main
  3. Crea PR sul branch claude/competent-mcnulty-b059b3 → master in repo Multiverbe (review yourself)

Owner: Gregorio (founder) — tutte le azioni richiedono browser/dashboard/riavvio Generato: 2026-05-10 ~17:30 da Claude (sessione fervent-hodgkin-66d2d9) Update sessione B: 2026-05-10 ~21:00 — aggiunte B1-B5 Reference: D:\Desktop\Multiverbe-Business\execution\days-3-6-roadmap.md per piano completo W2 Mag