Modulo 00 · Setup · 12 lezioni · ≈ 174 min

Il Sistema Operativo

Tutto dall'app Claude sul tuo computer: Chat e Progetti, la scheda Code, i Connettori. Colleghi GitHub, Railway, Resend, Stripe, Bunny e gli strumenti creativi. In 72 ore la prima landing è online.

Risultato: stack collegato + prima landing onlineNessun terminale
Product-First Protocol™

Le 4 fasi del sistema

Fase 1VALIDAazienda e idea: prima di spendere un euro
Fase 2COSTRUISCIlanding, checkout, tracking, creatività
Fase 3VENDIMeta, Google, organico, automazioni
Fase 4DUPLICAi clienti diventano distributori, il sistema si clona

M00 = il sistema operativo sotto tutte e quattro le fasi

Vale per tutto il corso

Le tre stanze dell'app Claude

App Claude sul computer · Mac e WindowsUn posto solo. Scrivi in italiano.stesso account di claude.ai · stesse chat, stessi Progetti
Stanza 1 · barra lateraleChat e Progettistrategia, testi, ricerca, analisi documenti, revisione compliance. I Progetti tengono istruzioni e file.
Stanza 2 · Code → Apri cartellaScheda Codescegli una cartella, descrivi cosa vuoi: Claude scrive i file, li prova, li carica su GitHub, li mette online. Ti chiede il permesso a ogni azione.
Stanza 3 · Impostazioni → ConnettoriConnettoriRailway, Resend, GitHub, Shopify, Canva, Meta Ads: login in un click. Claude legge e agisce sullo strumento, con permesso.

i comandi girano dietro le quinte · nessun file di configurazione · nessuna chiave in chat

M00 in 12 lezioni

Cosa colleghiamo, in ordine

  1. Il patto NM OSmappa, metodo Guarda e Fai, cosa avrai tra 60 giorni · 5'
  2. Claude Pro/Maxaccount, Progetti, il Progetto "NM OS" · 12'
  3. L'app Claude sul computerMac e Windows: installazione e scheda Code · 15'
  4. Il primo progetto nella scheda Codecartella, permessi, «descrivi cosa vuoi» · 15'
  5. GitHub dalla scheda Codeaccount, repository privato, primo caricamento · 15'
  6. Railwayconnettore, «metti online questa cartella», variabili, dominio · 20'
  7. Resendconnettore, dominio verificato, DNS su IONOS, prima email · 15'
  8. Lovable, Canva, Higgsfieldaccount e primo risultato · 12'
  9. Stripe + ShopifyPayment Link e Checkout; Shopify come alternativa · 15'
  10. Bunny Streamlibreria, caricamento, embed (opzione completa video) · 10'
  11. ConnettoriRailway, Resend, Shopify, Canva, GitHub, Meta Ads (e Google Ads senza) · 25'
  12. SFIDA 72hla tua prima landing online · 15'
M00.L01 · Lezione 1 di 12 · Concetto · 5'

Il patto NM OS

Obiettivo: sapere cosa costruirai, in che ordine, con quali strumenti e quanto costa al mese.

Cosa avrai tra 60 giorni

Dieci pezzi. Ognuno si verifica.

  1. Compliance Card dell'aziendaverifica: punteggio 0-100 nel Progetto
  2. Validation Report con l'idea vincenteverifica: keyword, volumi, CPC in tabella
  3. Landing online con dominioverifica: c'è un URL che risponde
  4. Form → email Resend + Pixel + GA4verifica: eventi che arrivano
  5. Checkout Stripe (o Shopify)verifica: ordine di test riuscito
  6. 20 creatività pronte per le adsverifica: cartella creativita/ piena
  7. Campagna Meta e Search attiveverifica: spesa e contatti nel report
  8. Sequenze email, agente filtra-lead e CRMverifica: un contatto attraversa il sistema in 60 s
  9. 3 Tool di Attrazione pubblicativerifica: quiz, calcolatore, referenze online
  10. Kit Duplicazione + piano 90 giorniverifica: primo clone consegnato
Il formato

Guarda e Fai

A sinistra · Michele fa
Registro lo schermo e costruisco dal vivo

Niente slide. Apro l'app Claude, chiedo in italiano, consento, verifico. Ogni lezione finisce con una cosa che esiste.

A destra · tu replichi
Metti in pausa e fai la stessa cosa

Stessa app, stesse tre stanze. Una lezione di 15 minuti ti prende 30-45 minuti. Se ti blocchi, copi l'errore e lo incolli a Claude.

Chat e ProgettiScheda CodeConnettorimai un terminale
Lo stack · economica vs completa

Quanto costa, al mese

FunzioneEconomicaCompleta
AIClaude Pro 20 €/meseapp, scheda Code e Connettori inclusiClaude Max da 100 €/mesestessa app, più capacità
Codice + hostingGitHub Free + Railway Hobby 5 $/meseRailway Pro + Postgres + dominio IONOS 20 $/mese + ~10 €/anno
EmailResend Free 0 €3.000 email/meseResend Pro + Broadcasts 20 $/mese
App · design · immaginiLovable Free · Canva Free · Higgsfield Basic 0-10 €Lovable Pro 25 $ · Canva Pro 12 € · Higgsfield Pro
Pagamenti · videoStripe Payment Links (solo commissioni) · YouTube non in elenco 0 €Stripe Checkout / Shopify 27 € · Bunny Stream ~1 $
Totale indicativo≈ 25-30 €/mese≈ 180-250 €/mese
Prompt P001 · Chat (anche versione gratuita, per ora)

Il mio piano di 60 giorni e il budget dello stack

Sei il mio coach operativo per il corso NM OS (Network Marketing Operating System). Non sei un consulente finanziario e non fai promesse di guadagno: il tuo compito è aiutarmi a pianificare il lavoro.

Contesto su di me:
- Azienda di network marketing: [NOME AZIENDA]
- Categoria prodotto: [es. oli essenziali / sostituti pasto / integratori / cosmesi]
- Livello: [principiante / networker attivo / leader con team di N persone]
- Tempo disponibile a settimana: [N ore]
- Computer: [Mac / Windows]
- Budget mensile per i tool: [N €]
- Ho già un dominio? [sì, nome / no]
- Esperienza tecnica: nessuna. Nel corso uso solo l'app Claude sul computer (Chat e Progetti, scheda Code, Connettori): non uso un terminale e non scrivo codice a mano.

Il percorso ha 11 moduli (M00 setup, M01-M02 VALIDA, M03-M04 COSTRUISCI, M05-M07 VENDI, M08 DUPLICA, M09 organico, M10 duplicazione) e va completato in 60 giorni con il rilascio settimanale: settimana 1 M00+M01, settimana 2 M02, settimane 3-4 M03+M04, settimana 5 M05+M06, settimana 6 M07+M09, settimana 7 M08, settimana 8 M10.

Compito:
1. Costruisci il mio calendario personale di 60 giorni: per ogni settimana, i moduli, le ore da bloccare in agenda e i giorni concreti in cui le blocco, in base al tempo che ti ho dato.
2. Scegli per me lo stack: per ogni funzione (AI, hosting, email, pagamenti, creatività, video) indica se partire con l'opzione economica o completa, dato il mio budget, e il costo mensile stimato totale. Opzione economica: Claude Pro 20 €, Railway Hobby 5 $, GitHub free, Resend free, Lovable free, Canva free, Stripe solo commissioni. Opzione completa: Claude Max, Railway Pro 20 $, Resend Pro 20 $, Lovable Pro 25 $, Canva Pro 12 €, Higgsfield Pro, Bunny pay-as-you-go.
3. Elenca i 5 rischi più probabili per cui NON finirò il percorso (es. tempo, blocchi tecnici, policy aziendale) e per ciascuno una contromisura concreta. Per i blocchi tecnici, ricorda che la regola del corso è: copio l'errore e lo incollo nella scheda Code o in una chat del Progetto NM OS, e Claude mi guida.

Formato di output: tabella "Settimana | Moduli | Ore | Giorni", poi tabella "Funzione | Tool scelto | Piano | €/mese", poi elenco dei rischi. Italiano, frasi corte, niente incoraggiamenti generici. Non usare mai le parole "facile", "garantito", "guadagno".
M00.L02 · Lezione 2 di 12 · Pratica · 12'

Claude e il Progetto "NM OS"

Obiettivo: account Claude a pagamento e Progetto "NM OS" con istruzioni e file. È la tua scrivania per 60 giorni.

Quale piano

Pro o Max?

Cosa ti serveEconomica · Claude ProCompleta · Claude Max
Costo20 €/mese≈ 17 €/mese se annualeda 100 €/meselimiti di utilizzo 5× o 20×
Chat, Progetti, file caricati
App sul computer: scheda CodeSì, inclusaSì, stessa app, sessioni lunghe senza pause
Connettori (Railway, Resend, Meta…)Sì, inclusiSì, più connettori attivi nella stessa conversazione
Quando sceglierloDa subito: basta per tutto il corsoSe in M03 tocchi il limite ogni giorno
ConsiglioParti da qui, mensilePassa a Max quando serve capacità
Istruzioni del Progetto "NM OS"

Il profilo che Claude legge in ogni chat

Sei l'assistente operativo di [NOME E COGNOME], networker dell'azienda [NOME AZIENDA], che segue il corso NM OS (Network Marketing Operating System) di Michele Farace. Il metodo è Product-First: prima si valida un prodotto da vendere a clienti veri, poi si costruisce un sistema di vendita online con l'AI, poi si vende, e solo alla fine si duplica il sistema nel team. Il reclutamento è una conseguenza, mai l'inizio.

Il mio contesto:
- Azienda: [NOME AZIENDA], categoria [oli essenziali / sostituti pasto / integratori / cosmesi / altro]
- Prodotti principali: [PRODOTTO 1], [PRODOTTO 2], [PRODOTTO 3]
- Cliente tipo: [es. donne 35-55 attente al benessere quotidiano]
- Dominio: [DOMINIO] · Email mittente: [ciao@DOMINIO]
- Stack: app Claude sul computer (Pro/Max) con Chat e Progetti, scheda Code (Claude Code integrato) e Connettori; GitHub, Railway (hosting Node.js), Resend (email), Stripe (pagamenti) o Shopify, Lovable, Canva, Higgsfield, Bunny Stream; Connettori per Railway, Resend, GitHub, Shopify, Canva, Meta Ads; Google Ads senza connettore (script e istruzioni preparati da te).
- Non uso un terminale e non scrivo codice a mano: quando serve un file, un comando o un deploy, lo chiedo a te nella scheda Code e lo esegui tu, chiedendomi il permesso.

Regole che rispetti sempre, senza eccezioni:
1. Nessuna promessa di guadagno: mai "guadagna", "rendita", "facile", "garantito", "sicuro", "automatico al 100%", mai cifre di guadagno. Se ti chiedo di scriverle, rifiuta e proponi una formulazione sul sistema o sul processo.
2. Nessun claim medico o terapeutico sui prodotti: gli oli essenziali non curano né trattano; i sostituti pasto non "fanno dimagrire X kg" ma sostituiscono un pasto nel contesto di una dieta ipocalorica secondo etichetta. Usa parole come benessere, routine, abitudine, supporto quotidiano. Segnala ogni frase a rischio con [ATTENZIONE CLAIM].
3. Ogni strategia deve superare il check "è permesso dalla policy della mia azienda?" (uso del brand, prezzi, vendita online, ads con il nome dell'azienda). Se non lo sai, chiedimelo o segnalalo con [VERIFICA POLICY].
4. Organico e social: prepari testi e risposte, non simuli automazioni che pubblicano o inviano messaggi al posto mio. Niente scraping, niente spam.
5. Privacy: ogni form prevede consenso esplicito, link alla privacy policy, e double opt-in se possibile.
6. Testimonianze e risultati: accanto a ogni testimonianza inserisci il disclaimer «I risultati mostrati si riferiscono a esperienze specifiche e non sono garantiti né rappresentativi dei risultati medi.»
7. Chiavi e password: non me le chiedi mai in chat e non le scrivi mai nei file di codice. Vivono solo nelle Variabili di Railway e nel file .env locale, che resta fuori da GitHub.

Stile: italiano, diretto, frasi corte, verbi. Quando scrivi codice: Node.js con Express, HTML single-file con CSS e JS inline, font Google Unbounded (titoli), Inter (testo), JetBrains Mono (codice); palette: sfondo #05060A, superficie #0C0E16, lime #C8FF00, cyan #00E5FF, orange #FF6B35, violet #8B5CF6, testo #F5F7FA. Responsive, nessuna dipendenza esterna non necessaria, nessun testo segnaposto.

Quando ti do un compito: prima riassumi in 2 righe cosa hai capito, poi esegui, poi elenca cosa devo verificare io.
Prompt P002 · prima chat nel Progetto

Test del Progetto NM OS

Questa è la prima chat del Progetto "NM OS". Prima di qualsiasi altra cosa, dimostrami che hai letto le istruzioni di progetto e i file caricati.

Compito:
1. Riassumi in 5 righe chi sono, quale azienda rappresento, quali sono i miei 3 prodotti principali e qual è il mio cliente tipo, prendendo i dati SOLO dalle istruzioni di progetto e dai file nella Project knowledge. Se un dato manca, scrivi "dato mancante" invece di inventarlo.
2. Elenca le 7 regole che devi rispettare, ognuna in una riga, con parole tue.
3. Prendi il primo prodotto del listino che ho caricato e scrivi due frasi di presentazione: una che sarebbe VIETATA (perché contiene un claim medico o una promessa di guadagno) e una CORRETTA che rispetta la regola 2. Marca la vietata con [ATTENZIONE CLAIM] e spiega in una riga perché non va.
4. Dimmi qual è lo stack che userò e quali account devo ancora aprire per completare il Modulo 0 del corso (Claude, GitHub, Railway, Resend, Lovable, Canva, Higgsfield, Stripe o Shopify, Bunny). Presentalo come checklist con caselle vuote. Per ogni tool indica se nel corso si collega con un Connettore dell'app Claude (Railway, Resend, GitHub, Shopify, Canva, Meta Ads) oppure si usa solo dalla sua interfaccia.
5. Proponi il nome del file in cui salverai, da ora in poi, gli appunti del mio sistema (es. "sistema-[AZIENDA].md") e la sua struttura in 6 sezioni.

Formato: titoli numerati, elenchi puntati, italiano, frasi corte. Non aggiungere incoraggiamenti. Se le istruzioni di progetto non sono presenti, dimmelo esplicitamente nella prima riga.
Demo a schermo

Attiviamo Claude rec

crea l'accountpiano ProProgetto "NM OS"istruzioni + 2 fileP002

M00.L03 · Lezione 3 di 12 · Pratica · 15'

L'app Claude sul computer

Obiettivo: app installata su Mac o Windows, scheda Code aperta, cartella nm-os creata in Documenti.

Installazione

Download, doppio click, login

  1. Macpagina Stack → Claude → Download → "Claude per Mac" → apri il .dmg → trascina l'icona in Applicazioni → espelli il disco → Launchpad
  2. Windows"Claude per Windows" (o Microsoft Store) → doppio click sull'installer → se "PC protetto da Windows": Ulteriori informazioni → Esegui comunque
  3. Login con la stessa email della L02a sinistra compaiono le stesse chat e il Progetto NM OS: l'app e claude.ai sono la stessa cosa in due posti
  4. Tour: Chat · Progetti · Code · Impostazioni → ConnettoriConnettori vuoti: oggi solo il tour, li colleghiamo quando servono
  5. Prima apertura della scheda Codel'app prepara il motore (30-60 s), chiede di confermare l'account: incluso nel piano Pro, nessun costo in più
L'app Claude · le tre stanze

Barra laterale: Chat, Progetti, Code, Connettori

Claude — app sul computer · account [la tua email]
💬 Chat
📁 Progetti NM OS
⌘ Code sessioni: nessuna
⚙ Impostazioni Connettori · Aspetto · Code → Permessi
Scheda Code · prima apertura
Scegli una cartella e descrivi cosa vuoi

Claude scrive i file, li prova, li carica su GitHub, li mette online. Ti chiede il permesso prima di ogni azione.

Apri cartella

Permessi: chiedi prima di ogni azione (default: lascialo così)

La cartella di lavoro

Documenti / nm-os

  1. MacFinder → Documenti → tasto destro → Nuova cartella → nm-os · percorso /Users/[nome]/Documents/nm-os
  2. WindowsEsplora file → Documenti → tasto destro → Nuovo → Cartella → nm-os · percorso C:\Users\[NOME]\Documents\nm-os
  3. Tutto minuscolo, con il trattino, vuotanon sul Desktop, non dentro iCloud/OneDrive/Drive con la sincronizzazione attiva
  4. Fai tu (L03)app aperta con il tuo account · scheda Code senza errori · cartella creata · permessi su "chiedi prima di ogni azione"
  5. Se ti blocchi: P003 nel Progetto NM OSincolla il testo esatto dell'errore, parola per parola. Claude ti guida con click e menu, mai con comandi
Prompt P003 · solo se ti blocchi

Diagnosi dell'installazione

Sono uno studente del corso NM OS senza esperienza tecnica. Sto installando l'app Claude sul mio computer e mi sono bloccato. Non uso un terminale e non voglio comandi da digitare: guidami solo con click, menu e finestre, un passo alla volta, aspettando la mia conferma prima del passo successivo.

Il mio computer: [Mac (modello e versione di macOS) / Windows 10 o 11]
Cosa stavo facendo: [es. aprivo l'app la prima volta / cliccavo sulla scheda Code / facevo il login]
Cosa vedo a schermo (copiato parola per parola, o descritto): "[TESTO DELL'ERRORE O DESCRIZIONE]"
Cosa ho già provato: [es. chiuso e riaperto l'app / riavviato il computer / niente]

Compito:
1. Dimmi in una riga qual è la causa più probabile, in italiano semplice, senza termini tecnici non spiegati.
2. Dammi la soluzione come sequenza di click (massimo 6 passi), dicendo per ogni passo cosa devo vedere se ha funzionato.
3. Se la causa può essere una di queste, riconoscila e trattala così: "app non aperta perché scaricata da Internet" (Mac: Impostazioni di Sistema → Privacy e sicurezza → "Apri comunque"); "PC protetto da Windows" (Ulteriori informazioni → Esegui comunque); "scheda Code che resta in caricamento" (chiudere del tutto l'app: Mac Cmd+Q, Windows tasto destro sull'icona nella barra → Esci; riaprire; se persiste, disconnettersi e rifare il login); "login che non torna all'app" (copiare l'indirizzo mostrato nel browser e incollarlo nella finestra dell'app, o chiudere il browser e ripetere); "cartella nm-os non trovata" (verificare che sia in Documenti e che si chiami esattamente nm-os, minuscolo).
4. Se dopo la tua soluzione il problema resta, dimmi quali due informazioni copiare dallo schermo per il tentativo successivo.

Vincoli: mai proporre comandi da digitare in un terminale, PowerShell o Prompt dei comandi; mai chiedermi password o codici; se una soluzione richiede davvero un comando, dimmi invece di chiedere aiuto nella community del corso.
M00.L04 · Lezione 4 di 12 · Pratica · 15'

Il primo progetto nella scheda Code

Obiettivo: cartella nm-os aperta nella scheda Code, index.html creato da Claude col tuo permesso e una modifica già fatta.

Il ciclo

Descrivi → Approvi → Verifichi

01Descriviin italiano, come a un web designer: "una pagina con scritto Ciao", "più grande", "il bottone in basso"
02ApproviClaude riassume, mostra il file o il comando, aspetta: Consenti una volta · per questa sessione · Rifiuta
03Verifichiapri il file nel browser. Non ti fidi della risposta: guardi il risultato

nessun codice da copiare · nessun comando da scrivere · i comandi passano dietro le quinte

Cosa dici a Claude · scheda Code · cartella nm-os

«Crea un file index.html con scritto Ciao»

Stai lavorando nella cartella nm-os che ho appena aperto nella scheda Code dell'app Claude. Sono all'inizio del corso NM OS, non ho esperienza tecnica e non uso un terminale: spiega in una riga ogni azione prima di farla, chiedi il permesso prima di creare o modificare file, e rispondi sempre in italiano con frasi corte.

Compito:
1. Crea un file chiamato index.html in questa cartella. Contenuto: una pagina HTML completa, in italiano, con lang="it", titolo "NM OS — Ciao", sfondo #05060A, testo #F5F7FA, font Inter da Google Fonts, e al centro dello schermo una sola scritta "Ciao" grande, in font Unbounded, colore #C8FF00. Tutto il CSS deve stare dentro il file (nessun file esterno). Deve essere responsive.
2. Crea anche un file README.md con tre righe: nome del progetto "nm-os", il mio nome [NOME E COGNOME], la data di oggi.
3. Alla fine elenca i file creati con il percorso completo e dammi il link per aprire index.html nel browser (o aprilo tu, se puoi).
4. Non installare nulla, non creare altre cartelle, non caricare niente su GitHub: lo faremo nella prossima lezione.
5. Chiudi con una riga: "Prossimo passo: dimmi cosa vuoi cambiare nella pagina".
Scheda Code · il permesso

Ogni azione, una domanda

Code · Documenti/nm-os · sessione: prima pagina
Tu

Crea un file index.html con scritto Ciao, e un README.md con il mio nome e la data di oggi.

Claude

Creo index.html (pagina con "Ciao" in lime su sfondo scuro) e README.md. Prima di scrivere ti chiedo il permesso per ciascun file.

Claude

File creati: Documents/nm-os/index.html · Documents/nm-os/README.md. sta eseguendo… (apre il file nel browser) Prossimo passo: dimmi cosa vuoi cambiare nella pagina.

Fai tu (L04)

Fatto quando…

M00.L05 · Lezione 5 di 12 · Pratica · 15'

GitHub dalla scheda Code

Obiettivo: account GitHub verificato e repository privato nm-os-landing con index.html, README.md e .gitignore, caricato da Claude su tua richiesta.

Cosa farà Claude · un prompt, quattro cose

Il tuo computer → GitHub → Railway

01Prepara la cartellala rende un "repository": archivio con la memoria di ogni versione · crea .gitignore (.env resta fuori)
02Crea il repository privatosul tuo GitHub · la prima volta si apre il browser: codice a 8 caratteri → Authorize
03Carica i fileversione "Primo caricamento: index.html, README e .gitignore"
04Ti dà il linkgithub.com/[USERNAME]/nm-os-landing · lucchetto Private

prima: account GitHub (Free) con email verificata · username consigliato nome-cognome

Cosa dici a Claude · scheda Code · sessione su nm-os

«Crea un repository privato e caricaci questa cartella»

Stai lavorando nella cartella nm-os aperta nella scheda Code. Non uso un terminale: spiega ogni azione in una riga prima di farla, chiedi il permesso prima di eseguirla, rispondi in italiano con frasi corte. Se qualcosa manca sul computer, dimmelo e proponi come installarlo con click (installer ufficiale) o fallo tu chiedendomi il permesso.

I miei dati:
- Nome e cognome: [NOME COGNOME]
- Email dell'account GitHub: [EMAIL GITHUB]
- Username GitHub: [USERNAME]

Compito, in questo ordine:
1. Controlla se git è disponibile su questo computer. Se manca: su Mac aspetta che io installi gli strumenti per sviluppatori quando compare la finestra di sistema (ti scrivo "fatto"); su Windows aprimi la pagina di download di Git for Windows e aspetta il mio "fatto". Poi ricontrolla.
2. Imposta la mia firma per le versioni (nome ed email sopra), solo se non è già impostata.
3. Crea un file .gitignore con almeno queste righe: node_modules/, .env, .env.*, .DS_Store, Thumbs.db, *.log, dist/, leads.json. Spiegami in una riga perché .env non deve mai finire su GitHub.
4. Se non esiste, crea README.md con: titolo "nm-os-landing", una riga "Landing NM OS di [NOME COGNOME]", una riga "Stack: Node.js + Express su Railway, email via Resend", la data di oggi.
5. Prepara la cartella come repository (se non lo è già) e registra la prima versione con il messaggio "Primo caricamento: index.html, README e .gitignore".
6. Crea sul mio account GitHub un repository PRIVATO chiamato nm-os-landing e caricaci questa cartella. Per farlo usa lo strumento ufficiale di GitHub: se non è installato, chiedimi il permesso di installarlo; per l'autorizzazione mostrami il codice da incollare e apri la pagina GitHub nel browser, poi aspetta il mio "fatto". Se per qualsiasi motivo non riesci a creare il repository da qui, dimmi i 4 click per crearlo io su GitHub (New repository → nome nm-os-landing → Private → senza README) e chiedimi il link che finisce con .git; poi carica.
7. Alla fine dammi il link della pagina del repository e dimmi cosa devo vedere per confermare che è andato tutto bene (tre file, etichetta Private, messaggio della versione).

Regole: nessun caricamento forzato, nessun file cancellato, nessun altro ramo oltre a main. Se un passo dà errore, fermati, spiegamelo in italiano semplice e proponi il rimedio prima di continuare. Non stampare mai codici di autorizzazione o token nei file.
Verifica · la pagina del repository

Il ponte c'è

github.com/[USERNAME]/nm-os-landing
nm-os-landing🔒 Privatemain
FileUltima versione
.gitignorePrimo caricamento: index.html, README e .gitignore
README.mdPrimo caricamento: index.html, README e .gitignore
index.htmlPrimo caricamento: index.html, README e .gitignore

Landing NM OS di [NOME COGNOME] · Stack: Node.js + Express su Railway, email via Resend

Fai tu (L05)

Fatto quando…

M00.L06 · Lezione 6 di 12 · Pratica · 20'

Railway: «metti online questa cartella»

Obiettivo: connettore Railway collegato, nm-os-landing online con URL pubblico, PORT, NODE_ENV e RESEND_API_KEY impostate, dominio se ce l'hai.

Come si collegano

Caricamento = deploy

01Scheda Code«cambia…», «carica su GitHub»
02GitHubnm-os-landing · ramo main
03Railwaylegge package.json · installa Express · npm start · Building → Active
04URL pubblicohttps://nm-os-landing-…up.railway.app · poi www.[DOMINIO]

prima serve un'app vera: server.js + package.json + railway.json, scritti da Claude (P006) · Node.js dall'installer ufficiale

Cosa dici a Claude · scheda Code · sessione su nm-os

Prepara l'app Node per Railway

Stai lavorando nella cartella nm-os aperta nella scheda Code: è già un repository collegato a GitHub (nm-os-landing, ramo main) e contiene index.html. Devo pubblicare questa pagina su Railway con Node.js ed Express. Non uso un terminale: spiega ogni passo in una riga, chiedi il permesso prima di eseguirlo, rispondi in italiano.

Compito:
1. Controlla se Node.js (versione 20 o superiore) è installato. Se manca, aprimi la pagina di download di nodejs.org (versione LTS), spiegami in due righe come installarlo con l'installer (Avanti, Avanti, Installa) e aspetta il mio "fatto"; poi ricontrolla. Non tentare installazioni alternative.
2. Crea package.json con: "name": "nm-os-landing", "private": true, "type": "module", "scripts": { "start": "node server.js", "dev": "node --watch server.js" }, "engines": { "node": ">=20" }.
3. Installa express come dipendenza.
4. Crea server.js in ES module che: legge la porta da process.env.PORT con fallback 3000; usa express.json(); serve i file statici della cartella; risponde a GET /health con { ok: true, app: "nm-os-landing" }; risponde a GET / con index.html; stampa in console "nm-os-landing in ascolto sulla porta X" all'avvio.
5. Crea railway.json con builder NIXPACKS, startCommand "npm start", healthcheckPath "/health", restartPolicyType "ON_FAILURE", restartPolicyMaxRetries 3.
6. Crea .env.example (NON .env) con le righe PORT=3000 e RESEND_API_KEY=la_tua_chiave_resend, e verifica che .gitignore contenga .env e node_modules/.
7. Avvia il server per 5 secondi per verificare che parta senza errori, poi fermalo. Dimmi che quando vorrò provarlo basterà scriverti "avvia il server e dammi il link".
8. Registra la versione con il messaggio "App Express pronta per Railway" e carica su GitHub.
9. Alla fine elenca i file del progetto e dimmi cosa vedrò nei log di Railway se il deploy va a buon fine.

Vincoli: nessuna dipendenza oltre express; niente file .env reale; nessun caricamento forzato. Se un passo fallisce, fermati e spiegami l'errore in italiano semplice.
Connettore Railway · poi quattro richieste

Cosa dici a Claude

  1. Impostazioni → Connettori → Railway → Connetti → login → Autorizzapallino verde "Connesso". Niente da copiare, nessun file da modificare. Vale in Chat e nella scheda Code.
  2. «Metti online questa cartella su Railway: crea un progetto nm-os-landing collegato al repository GitHub nm-os-landing, ramo main, e avvia il deploy»permesso "Claude vuole usare Railway: crea progetto" → Consenti. La prima volta Railway chiede di autorizzare la sua app GitHub solo su quel repository.
  3. «Leggi i log dell'ultimo deploy di nm-os-landing e dimmi se è andato a buon fine»Build (installazione) → Deploy: "nm-os-landing in ascolto sulla porta 8080"
  4. «Genera il dominio pubblico del servizio nm-os-landing e dammi l'URL»https://nm-os-landing-production-[xxxx].up.railway.app → "Ciao" online, con HTTPS
  5. «Imposta sul servizio le variabili PORT=8080, NODE_ENV=production e RESEND_API_KEY con il segnaposto da_sostituire_in_L07, poi riavvia il deploy»le chiavi vere, quelle segrete, le incolli tu nella pagina Variables di Railway: mai in chat
Scheda Code + connettore Railway

Claude usa Railway. Con il tuo permesso.

Code · Documenti/nm-os · connettori attivi: Railway ●
Tu

Metti online questa cartella su Railway: crea un progetto nm-os-landing collegato al repository GitHub nm-os-landing, ramo main, e avvia il deploy.

Claude

Progetto creato, deploy avviato. Railway sta leggendo package.json, installando Express, avviando npm start. Stato: BuildingActive. Vuoi che legga i log e generi il dominio pubblico?

Tu

Sì: leggi i log, genera il dominio pubblico e dammi l'URL.

Dominio custom (chi ce l'ha) · IONOS

Una riga nella rubrica di Internet

  1. Railway → servizio → Settings → Networking → Custom Domain → www.[DOMINIO]Railway mostra il record: tipo CNAME · nome www · valore [xxxx].up.railway.app
  2. IONOS → Domini & SSL → il dominio → scheda DNS → Aggiungi recordTipo CNAME · Nome host solo www · Punta a: il valore copiato da Railway · TTL predefinito · Salva
  3. Dominio nudo senza wwwIONOS non accetta CNAME sulla radice: ingranaggio → Modifica destinazione → Inoltra dominio → https://www.[DOMINIO], permanente
  4. Torna su Railway: da "Waiting for DNS" a verde in 5-30 minutiHTTPS lo fa Railway da solo. Cloudflare DNS: stesso CNAME, nuvola grigia finché non è verde
  5. Se non ricordi i passiin Chat: «dammi i passi esatti per creare su IONOS il CNAME che mi chiede Railway»
M00.L07 · Lezione 7 di 12 · Pratica · 15'

Resend: il postino verificato

Obiettivo: connettore Resend collegato, dominio verificato con i record su IONOS, chiave di solo invio in Railway e nel .env, prima email ricevuta.

Il percorso di una email

Form → server → Resend → inbox

01Form sulla landingnome, email, consenso (L12)
02Server su Railwaylegge RESEND_API_KEY dalle Variabili
03Resendmittente sul dominio verificato · ciao@[DOMINIO] · regione EU
04Inbox del contattonon nello spam: SPF, DKIM, DMARC verdi

account Resend: Free 3.000 email/mese, 100/giorno, 1 dominio · regione EU (Ireland) per il GDPR · connettore: Impostazioni → Connettori → Resend → Connetti

I record DNS su IONOS · esempio aromavita-demo.it (brand fittizio)

Tre-quattro righe. Copiate, non inventate.

TipoNome host (solo questo)ValorePrioritàScopo
MXsendfeedback-smtp.eu-west-1.amazonses.com10bounce / SPF
TXTsendv=spf1 include:amazonses.com ~allSPF: "Resend può spedire per me"
TXTresend._domainkeyp=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKB… (lungo: usa il bottone copia)DKIM: la firma digitale
TXT_dmarcv=DMARC1; p=none;DMARC: osserva senza bloccare
IONOS → Domini & SSL → dominio → DNS → Aggiungi record · TTL predefinito · non toccare i record MX/SPF della casella email sulla radice · poi in Chat: «Verifica i record DNS del dominio [DOMINIO] su Resend e dimmi lo stato»
La chiave · regola che non cambia mai

Mai

  • Incollare la chiave in una chat "per far prima"
  • Scriverla dentro server.js o in un file su GitHub
  • Permesso "Full access" quando basta "Sending"

Sempre

  • Railway Variables (icona dell'occhio) + .env locale, a mano
  • «verifica che .env non sia tracciato su GitHub» → Claude conferma
  • Se finisce in chat per errore: revoca, rigenera, incolla di nuovo
Cosa dici a Claude · scheda Code · sessione su nm-os

Prima email dal tuo server

Stai lavorando nella cartella nm-os aperta nella scheda Code: progetto Node.js ES module con Express già pronto. Nel file .env (che è nel .gitignore) c'è la variabile RESEND_API_KEY con la mia chiave Resend: non leggerla ad alta voce, non stamparla, non copiarla in nessun altro file. Il mio dominio verificato su Resend è [DOMINIO]; se non fosse ancora verificato, usa come mittente "onboarding@resend.dev" e come destinatario solo [TUA_EMAIL] (l'email del mio account Resend). Non uso un terminale: spiega ogni azione in una riga, chiedi il permesso, rispondi in italiano.

Compito:
1. Installa il pacchetto ufficiale resend.
2. Crea la cartella scripts/ e il file scripts/test-email.js che: importa Resend; crea il client con process.env.RESEND_API_KEY; invia UNA email con from "[NOME BRAND] <ciao@[DOMINIO]>", to ["[TUA_EMAIL]"], subject "Test NM OS: il postino funziona", html con un contenitore scuro (#05060A), titolo "Funziona." in #C8FF00, una riga di testo e una riga piccola in #A3A9B8 con "Email di test inviata da [NOME E COGNOME] durante il Modulo 0 di NM OS"; se error è presente lo stampa ed esce con codice 1, altrimenti stampa "Inviata. ID:" e l'id.
3. Eseguilo leggendo le variabili dal file .env (con l'opzione --env-file di Node; se la mia versione di Node non la supporta, installa dotenv come dipendenza di sviluppo e adatta l'esecuzione). Mostrami solo l'output.
4. Se Resend risponde con un errore, spiegamelo in italiano semplice: 403 "domain not verified" (il dominio non è ancora verde, usa onboarding@resend.dev), 401 (chiave sbagliata o mancante nel .env), 422 (mittente non sul dominio verificato).
5. Aggiungi in package.json lo script "test:email" così in futuro potrò dirti "esegui il test email".
6. Verifica che .env non sia tracciato, poi registra la versione "Script test email Resend" e carica su GitHub.

Vincoli: non stampare mai il valore di RESEND_API_KEY; non inserire la chiave nel codice; nessun contenuto promozionale nell'email di test.
M00.L08 · Lezione 8 di 12 · Pratica · 12'

Lovable, Canva, Higgsfield

Obiettivo: tre account attivi, un'app di prova con form su Lovable, Brand Kit su Canva con il connettore collegato, prima immagine su Higgsfield.

Demo a schermo

Tre account, tre risultati rec

Lovable: P008 → pagina con formCanva: Brand Kit + connettoreHiggsfield: prima immagine

Prompt P008 · Lovable

Un prompt, un'app

Crea una pagina web single-page in italiano per il brand "[NOME BRAND]" (categoria: [oli essenziali / sostituti pasto / altro]). Stile: scuro, tecnico, premium. Sfondo #05060A, superfici #0C0E16 con bordo rgba(255,255,255,0.08) e raggio 16px, testo #F5F7FA, testo secondario #A3A9B8, accento #C8FF00 usato solo per il bottone e un dettaglio del titolo. Font: Unbounded per i titoli, Inter per il testo (da Google Fonts). Responsive, mobile-first.

Struttura della pagina:
1. Header con il wordmark "[NOME BRAND]" a sinistra.
2. Hero con titolo "Una routine che regge" e sottotitolo "[una frase su benessere quotidiano e abitudini, senza promesse di risultato e senza claim medici]".
3. Un form con i campi: Nome (obbligatorio), Email (obbligatoria, con validazione), una casella di consenso obbligatoria con il testo "Ho letto la privacy policy e acconsento a ricevere email da [NOME BRAND]" e un link "privacy policy" che punta a /privacy, e un bottone "Ricevi la guida".
4. Alla submit non inviare nulla a nessun server: mostra un messaggio di conferma "Grazie [Nome], controlla la tua email." e svuota il form. Salva i dati solo nello stato locale del componente.
5. Footer con la riga "I contenuti hanno finalità informative e non sostituiscono il parere di un professionista." e "© [ANNO] [NOME BRAND]".

Vincoli: nessun testo segnaposto finto o riempitivo; nessuna promessa economica, nessuna parola tra "cura", "dimagrisci", "risultati garantiti"; nessuna immagine esterna; il bottone deve essere disabilitato finché la casella di consenso non è spuntata. Non aggiungere autenticazione né database.
M00.L09 · Lezione 9 di 12 · Pratica · 15'

Stripe: un prodotto, un link

Obiettivo: Stripe in modalità test con un prodotto, un Payment Link, un pagamento di prova con 4242 4242 4242 4242 e l'endpoint Checkout scritto da Claude. E sai quando scegliere Shopify.

Modalità test · interruttore arancione in alto a destra

Prodotto, link, carta di prova, chiavi

  1. Catalogo prodotti → + Aggiungi prodottoKit Routine Serale AromaVita (brand fittizio) · descrizione che parla di routine, non di effetti · immagine creativita/prova-01.jpg · 39,00 € una tantum
  2. Crea link di pagamentoquantità OFF · indirizzo di spedizione ON se fisico · conferma "Grazie. Riceverai una email con i dettagli." → https://buy.stripe.com/test_…
  3. Paga con la carta di test4242 4242 4242 4242 · 12/34 · 123 → Pagamenti: "Riuscito, 39,00 €" · rifiuto simulato: 4000 0000 0000 0002
  4. Sviluppatori → Chiavi APIla segreta sk_test_… la incolli tu in Railway Variables (STRIPE_SECRET_KEY) e nel .env · STRIPE_PRICE_ID (price_…) e BASE_URL non sono segreti: puoi dirli a Claude
  5. Scheda Code: P009Claude installa stripe, aggiunge POST /api/checkout e le pagine /grazie e /annullato, fa lui la richiesta di prova, ti dà l'URL checkout.stripe.com da cliccare, carica su GitHub
Cosa dici a Claude · scheda Code · anteprima per M03

Endpoint Checkout Session

Stai lavorando nella cartella nm-os aperta nella scheda Code: progetto Node.js ES module con Express in server.js, già pubblicato su Railway. Nel .env (ignorato da GitHub) ci sono STRIPE_SECRET_KEY (chiave sk_test), STRIPE_PRICE_ID (id del prezzo del prodotto di test, formato price_...) e BASE_URL (http://localhost:3000 in locale). Non stampare mai i valori delle variabili. Non uso un terminale: spiega ogni azione in una riga, chiedi il permesso, rispondi in italiano.

Compito:
1. Installa il pacchetto ufficiale stripe.
2. In server.js aggiungi: import di Stripe; client creato con process.env.STRIPE_SECRET_KEY; una route POST /api/checkout che crea una Checkout Session con mode "payment", line_items [{ price: process.env.STRIPE_PRICE_ID, quantity: 1 }], success_url `${BASE_URL}/grazie?session_id={CHECKOUT_SESSION_ID}`, cancel_url `${BASE_URL}/annullato`, locale "it", shipping_address_collection con allowed_countries ["IT"]; risponde con { url: session.url }; in caso di errore logga err.message e risponde 500 con { error: "Checkout non disponibile" }.
3. Aggiungi due route GET: /grazie che risponde con una pagina HTML minima scura (#05060A, testo #F5F7FA, titolo in #C8FF00) "Grazie. Ordine di test ricevuto." e /annullato con "Pagamento annullato. Puoi riprovare quando vuoi."
4. In index.html aggiungi un bottone "Ordina (test)" che, al click, fa fetch POST a /api/checkout e reindirizza window.location all'url ricevuto. Stile: sfondo #C8FF00, testo #05060A, raggio 999px.
5. Aggiorna .env.example con STRIPE_SECRET_KEY, STRIPE_PRICE_ID e BASE_URL (valori di esempio, non reali).
6. Avvia il server, fai tu una richiesta di prova a POST /api/checkout e mostrami che la risposta contiene un url che inizia con https://checkout.stripe.com, scrivendo l'url per intero così posso cliccarlo. Poi ferma il server.
7. Registra la versione "Checkout Session Stripe (test)" e carica su GitHub. Ricordami che le tre variabili devono esserci anche su Railway (STRIPE_SECRET_KEY la incollo io nella pagina di Railway; STRIPE_PRICE_ID e BASE_URL puoi impostarle tu con il connettore Railway se glielo chiedo) e che serve un nuovo deploy.

Vincoli: nessun webhook per ora (lo faremo in M03.L07); nessuna chiave nel codice; nessun testo con promesse di risultato nelle pagine.
Stripe o Shopify?

Un prodotto o un catalogo

FunzioneEconomica · Stripe Payment LinksCompleta · Checkout integrato / Shopify
QuandoUn prodotto o un kit: link fisso, nessun codiceServer che sa chi ha pagato (M03.L07); Shopify per 10-50 prodotti con varianti, magazzino, spedizioni, sconti
Costo0 €/mese + ≈ 1,5 % + 0,25 € per carte europeeShopify Starter: 5 €/mese + 5 % + commissioni (Buy Button da incollare nella landing)0 €/mese + stesse commissioniShopify Basic: 27 €/mese + commissioni carte
ConnettoreNessuno: Stripe si usa dal suo pannello e dal codice scritto da ClaudeConnettore Shopify: Impostazioni → Connettori → Shopify → Connetti → «Elenca i prodotti del mio negozio»
Cosa cambiaOrdine visibile solo nel pannello StripeEmail di conferma, CRM, evento Purchase per Meta e GA4; catalogo gestito da Claude via connettore (M03)
RegolaLa tua azienda ti permette di vendere i suoi prodotti in un tuo checkout, e a che prezzo? Compliance Card, Modulo 1. Fino ad allora: modalità test.
M00.L10 · Lezione 10 di 12 · Pratica · 10'

Bunny Stream: il tuo player

Obiettivo: Video Library con Allowed Referrers, un video caricato e l'embed 16:9 in un file creato da Claude. YouTube "non in elenco" è l'alternativa gratuita.

bunny.net · si paga a consumo

Libreria, protezioni, upload, embed

  1. Stream → Video Libraries → Add Video Librarynome nm-os-landing · Europe · Library ID (non segreto: puoi dirlo a Claude) · API Key (solo nel .env, la incolli tu)
  2. Security → Allowed Referrers[DOMINIO], www.[DOMINIO], l'URL Railway, localhost · Token Authentication OFF fino a M03.L08
  3. Videos → Uploadtrascina un .mp4 (demo: "Come preparo il pasto sostitutivo in 60 secondi", FitMeal, brand fittizio) · Uploading → Processing → Finished · Video ID
  4. Scheda Code: P010 con Library ID e Video IDClaude crea video-test.html con il contenitore aspect-ratio 16/9 e ti dà il link: ridimensiona la finestra, resta 16:9
  5. Economica: YouTube Studio → Non in elenco → Incorpora«sostituisci l'iframe di video-test.html con questo» · stesso contenitore, ma logo e suggerimenti a fine video
Cosa dici a Claude · scheda Code

Embed responsive 16:9

Stai lavorando nella cartella nm-os aperta nella scheda Code. Ho una Video Library su Bunny Stream con Library ID [LIBRARY_ID] e un video caricato con Video ID [VIDEO_ID]. Non ho ancora attivato la token authentication: l'embed pubblico funziona sui domini in Allowed Referrers, tra cui localhost. Non uso un terminale: chiedi il permesso prima di creare file, rispondi in italiano.

Compito:
1. Crea video-test.html: pagina HTML completa in italiano (lang="it"), meta viewport, font Inter e Unbounded da Google Fonts, sfondo #05060A, testo #F5F7FA, contenitore centrato max 960px.
2. Titolo h1 "Il pasto sostitutivo in 60 secondi" con "60 secondi" in #C8FF00.
3. Un div con classe "video": width 100%, aspect-ratio 16/9, sfondo #0C0E16, bordo 1px rgba(255,255,255,0.08), raggio 16px, overflow hidden, leggero glow lime; dentro un iframe posizionato assoluto che riempie il contenitore, senza bordo, con src https://iframe.mediadelivery.net/embed/[LIBRARY_ID]/[VIDEO_ID]?autoplay=false&preload=true, loading="lazy", allow="accelerometer; gyroscope; autoplay; encrypted-media; picture-in-picture", allowfullscreen e un title descrittivo.
4. Aggiungi un fallback @supports not (aspect-ratio) con padding-bottom 56.25%.
5. Sotto il video, un paragrafo in #A3A9B8 14px: "Video di esempio del corso NM OS. [NOME BRAND] è un brand fittizio. Il prodotto sostituisce un pasto nel contesto di una dieta ipocalorica, secondo etichetta."
6. Aggiungi al .env.example le righe BUNNY_LIBRARY_ID= e BUNNY_API_KEY= (vuote) e ricordami di NON mettere la API key nell'HTML: l'embed usa solo gli ID, la API key serve solo lato server e nel .env la incollo io.
7. Dammi il link per aprire il file nel browser (o aprilo tu) e dimmi cosa devo controllare ridimensionando la finestra.
8. Registra la versione "Embed Bunny Stream responsive" e carica su GitHub.

Vincoli: nessun JavaScript necessario; nessuna dipendenza esterna oltre Google Fonts e l'iframe Bunny; nessun testo con claim su salute o peso.
M00.L11 · Lezione 11 di 12 · Pratica · 25'

Connettori: Claude ha le mani

Obiettivo: Railway, Resend, GitHub, Canva e Meta Ads collegati con permessi minimi. Sai cosa può fare ciascuno e dove si revoca. E cosa fare per Google Ads.

Un cervello, molte mani

Claude al centro, gli strumenti intorno

App Claude · Chat, Progetti, scheda CodeTu chiedi in italiano«elenca i miei progetti Railway» · «crea la campagna in pausa» · «manda l'email di prova»
ConnettoreRailwaydeploy, log, variabili
ConnettoreResenddomini, email
ConnettoreGitHubrepository, issue
ConnettoreShopifyprodotti, ordini
ConnettoreCanvadesign, Brand Kit
ConnettoreMeta Adscampagne in pausa (M05)
Senza connettore ufficialeGoogle AdsClaude prepara script e istruzioni · tu esegui in Google Ads (M06)
Impostazioni → Connettori

Connetti, login, Autorizza

Claude — Impostazioni · Connettori
💬 Chat
📁 Progetti
⌘ Code
⚙ Impostazioni Connettori ●
🟢 Connesso
Railway

Impostazioni · Disconnetti

🟢 Connesso
Resend

Impostazioni · Disconnetti

🟢 Connesso
Canva

Impostazioni · Disconnetti

🟢 Connesso
GitHub

Only select repositories: nm-os-landing

🟢 Connesso
Meta Ads

Business [NOME] · 1 account pubblicitario

Opzionale
Shopify

Connetti · solo se vendi con Shopify

+ Sfoglia connettoriNotion / Airtable (M07) · Ahrefs / Similarweb (M02, a pagamento)
Cosa può fare ciascun connettore · sempre con permesso

Legge / Fa / Dove lo usi

ConnettoreLeggeFa (sempre con permesso)Dove lo usi
Railwayprogetti, servizi, deploy, log, variabili (valori nascosti), dominicrea progetti e servizi da GitHub, imposta variabili non segrete, riavvia deploy, genera dominiM00, M03, M07, M08, M10
Resenddomini e stato DNS, email inviate e stato, audienceaggiunge domini, manda email, crea broadcast e audienceM00, M03, M07, M10
GitHubrepository, file, versioni, issuecrea repository e modelli, apre issue e pull requestM05, M10
Shopifyprodotti, collezioni, ordini, clienti (se lo usi)crea e modifica prodotti, collezioni, scontiM03, M07
Canvadesign, Brand Kit, cartellecrea design da modello, ridimensiona, esportaM04
Meta Adsaccount, campagne, ad set, ad, metriche, pixelcrea campagne, ad set e ad in pausa, carica creatività, modifica budgetM05
Notion / Airtablepagine, database, recordcrea e aggiorna record: il mini CRM economicoM07
Il permesso in pratica + le 5 regole dei connettori

Consenti una volta. Rifiuta quando vuoi.

  1. Prova: «Imposta sul servizio nm-os-landing la variabile APP_NAME con valore nm-os» → Consenti una voltala richiesta dice quale connettore, quale azione, con quali dati
  2. Prova: «Cancella il servizio nm-os-landing» → RifiutaClaude si ferma e basta. Nelle impostazioni del connettore spegni le azioni che non vuoi mai (es. "delete-service")
  3. Regola 1 · permessi minimisolo il Business che usi, solo il repository che serve, solo il negozio che vendi
  4. Regola 2 · "consenti una volta" finché non conosci l'azione"sempre" solo per le letture
  5. Regola 3 · le azioni distruttive le fai tucancellare, pubblicare, attivare campagne: nel pannello dello strumento, o spente nel connettore
  6. Regola 4 · mai chiavi e password in chati connettori servono a non copiare chiavi; se uno strumento te ne dà una, vive nel .env e su Railway
  7. Regola 5 · sai dove si revocaImpostazioni → Connettori → Disconnetti, più la pagina "app collegate" dello strumento. Nel dubbio revochi e ricolleghi: un minuto
Chi non ha un connettore ufficiale

Google Ads: due strade, stesso Claude

Strada 1 · M06.L05 · script
Claude scrive lo script, tu lo incolli in Google Ads

In Chat Claude prepara lo script (JavaScript che gira dentro Google Ads). Tu: Google Ads → Strumenti → Script → incolla → Autorizza → Esegui. Report e pausa automatica delle keyword che costano troppo, ogni giorno, da solo. Mette in pausa, non attiva.

Strada 2 · M06.L04 · istruzioni
Claude prepara la campagna, tu la costruisci

Struttura completa in Chat: campagna, gruppi, keyword, annunci, negative. Istruzioni passo-passo per l'interfaccia di Google Ads, o file da importare in Google Ads Editor. Un passaggio manuale in più, stessa qualità.

non installare "connettori" Google Ads non ufficiali trovati online · se arriverà quello ufficiale, lo dirà M06 e la pagina Stack del portale

Prompt P011 · Chat nel Progetto NM OS

Inventario dei connettori e Carta dei permessi

Sei il mio assistente nel Progetto NM OS. Ho collegato dei connettori all'app Claude da Impostazioni → Connettori. Non uso un terminale e non ho file di configurazione: tutto passa dai connettori. Voglio un inventario chiaro e una "Carta dei permessi" da salvare qui nel Progetto.

Compito, chiedendo il permesso prima di ogni lettura e senza eseguire alcuna azione di scrittura, modifica o cancellazione:
1. Elenca i connettori che hai a disposizione in questa conversazione (attesi: Railway, Resend, GitHub, Canva, Meta Ads, e Shopify se presente). Se uno di quelli attesi manca, dimmelo.
2. Per ciascun connettore fai UNA sola lettura di prova, la più innocua possibile: Railway → elenco progetti; Resend → elenco domini con stato; GitHub → elenco repository accessibili; Canva → elenco Brand Kit o ultimi design; Meta Ads → elenco account pubblicitari; Shopify → nome del negozio e numero di prodotti. Riporta il risultato in una riga per connettore (senza dati personali di terzi).
3. Compila la tabella "Connettore | Cosa può leggere | Cosa può fare a nome mio | Rischio se usato male | Dove si revoca (nell'app e nel tool)". Per "dove si revoca nel tool" indica il percorso della pagina "app collegate / autorizzazioni" di Railway, Resend, GitHub, Canva, Meta (Business Manager → Integrazioni aziendali) e Shopify.
4. Segnala i permessi troppo larghi che riesci a dedurre dalle letture (es. Meta Ads con più account di quelli che uso: [ELENCA GLI ACCOUNT CHE USI DAVVERO]; GitHub con più repository di nm-os-landing) e dimmi come restringerli.
5. Scrivi la "Carta dei permessi NM OS" in 6 righe: (1) permessi minimi, (2) "consenti una volta" finché non conosco l'azione, (3) azioni distruttive spente o fatte a mano nel tool, (4) mai chiavi in chat, (5) dove si revoca, (6) revisione ogni 30 giorni.
6. Ricordami in una riga che Google Ads non ha un connettore ufficiale e che in M06 userò gli script e le istruzioni passo-passo preparati da te.

Formato: titoli numerati, tabella, italiano, frasi corte. Vincoli: nessuna azione oltre alle letture del punto 2; nessun valore di chiavi, token o variabili nella risposta; se una lettura fallisce, riporta l'errore in italiano semplice e vai avanti.
M00.L12 · Lezione 12 di 12 · Sfida · 15'

SFIDA 72h: la prima landing online

Obiettivo: entro 72 ore la landing "Coming soon" è su Railway, con il tuo nome, una promessa che non parla di guadagno e un form che manda email con Resend. URL nella community.

Cosa deve avere · esempio FitMeal (brand fittizio)

Sette punti

Cosa dici a Claude · scheda Code · un prompt solo

Landing "Coming soon" con form → Resend, su Railway

Stai lavorando nella cartella nm-os aperta nella scheda Code: progetto Node.js ES module con Express in server.js, pubblicato su Railway da GitHub, con il pacchetto resend già installato e RESEND_API_KEY nel .env locale e nelle Variabili di Railway. Hai a disposizione il connettore Railway. Il mio dominio verificato su Resend è [DOMINIO] (se non verificato, usa il mittente onboarding@resend.dev e invia solo a [TUA_EMAIL]). Non uso un terminale: spiega ogni passo in una riga, chiedi il permesso prima di scrivere file o usare un connettore, rispondi in italiano.

Dati:
- Nome e cognome: [NOME COGNOME]
- Brand della landing: [NOME BRAND] (brand personale, non il nome dell'azienda NM salvo policy verificata)
- Promessa (senza cifre di guadagno, senza claim su salute o peso): "[PROMESSA, es. Un pasto sostituito al giorno, con una routine che regge. Guide, ricette e un metodo per non mollare alla seconda settimana.]"
- Email a cui ricevere le iscrizioni: [TUA_EMAIL]
- Mittente: "[NOME BRAND] <ciao@[DOMINIO]>"

Compito:
1. Riscrivi index.html come landing "Coming soon" single-file (CSS e JS inline), lang="it", responsive mobile-first, font Google Unbounded (titoli) e Inter (testo). Palette: sfondo #05060A, superficie #0C0E16, bordo rgba(255,255,255,0.08), raggio 16px, accento #C8FF00 (bottone e una parola del titolo), testo #F5F7FA, secondario #A3A9B8. Un leggero gradient mesh animato nel hero (solo CSS). Struttura: header con wordmark del brand; hero con titolo "[NOME BRAND] sta arrivando", la promessa come sottotitolo, la riga "Un progetto di [NOME COGNOME]"; card con form: Nome (obbligatorio), Email (obbligatoria, type email), checkbox obbligatoria "Ho letto la privacy policy e acconsento a ricevere email da [NOME BRAND]" con link a /privacy, bottone "Avvisami quando parte" disabilitato finché la checkbox non è spuntata; messaggio di successo inline "Grazie [Nome], controlla la tua email." e messaggio di errore inline; footer con "© [ANNO] [NOME BRAND] · Progetto formativo indipendente, non collegato ad alcuna rete di vendita" e link a /privacy. Nessun testo segnaposto.
2. In server.js aggiungi POST /api/lead che: legge nome, email, consenso dal body JSON; rifiuta con 400 se manca il nome, se l'email non è valida (regex semplice) o se consenso non è true; salva { nome, email, consenso: true, data: ISO, ip: req.ip } in leads.json (crea il file se manca, array JSON); invia con Resend una email a LEAD_TO_EMAIL con oggetto "Nuovo iscritto: [nome]" e corpo con nome, email, data; invia al lead una email di conferma con oggetto "Sei in lista: [NOME BRAND]" e un HTML scuro con titolo "Sei dentro." e due righe di testo senza promesse; risponde { ok: true }; in caso di errore Resend logga il messaggio e risponde 500 { ok: false }. Aggiungi un limite semplice: massimo 5 richieste al minuto per IP, in memoria.
3. Aggiungi GET /privacy che serve privacy.html: pagina minima con titolare [NOME COGNOME], email di contatto [TUA_EMAIL], finalità (invio email informative sul lancio), base giuridica (consenso), conservazione (fino a revoca), diritti dell'interessato e come revocare (rispondendo alla email), servizi usati (Railway per l'hosting, Resend per l'invio). Stessa palette.
4. Verifica che leads.json sia nel .gitignore. Aggiorna .env.example con LEAD_TO_EMAIL e MAIL_FROM e usa queste variabili nel codice invece dei valori fissi; aggiungi le due righe con i valori veri al mio .env locale (non sono segreti).
5. Avvia il server, fai tu una richiesta di prova a POST /api/lead con un JSON valido e mostrami la risposta; lasciami il link http://localhost:3000 per provare il form dal browser e aspetta il mio "ok"; poi ferma il server.
6. Registra la versione "Landing Coming soon con form Resend" e carica su GitHub.
7. Con il connettore Railway imposta sul servizio nm-os-landing le variabili LEAD_TO_EMAIL e MAIL_FROM (non sono segrete) e riavvia il deploy; poi leggi i log dell'ultimo deploy e dimmi se è andato a buon fine e qual è l'URL pubblico da provare.

Vincoli: mai le parole "guadagna", "facile", "garantito", "sicuro", "cura", "dimagrisci"; nessuna cifra di guadagno o di peso; nessuna dipendenza oltre express e resend; nessuna chiave nel codice; non chiedermi mai il valore di RESEND_API_KEY.
Se ti blocchi · regola dei 20 minuti

Tre blocchi tipici, tre frasi

Deploy rosso
«Leggi i log dell'ultimo deploy e correggi»

Quasi sempre Claude trova la causa, corregge e ricarica su GitHub. Railway riparte da solo.

Email che non arriva
Dominio Resend non verificato

Errore 403: usa onboarding@resend.dev verso te stesso, o riverifica i record DNS della L07. In Chat: «quale record manca».

Form che non risponde (500)
«Verifica le variabili del servizio e riavvia il deploy»

Mancano LEAD_TO_EMAIL, MAIL_FROM o RESEND_API_KEY su Railway. La chiave, se manca, la incolli tu.

bloccato da 20 minuti? copi l'errore, lo incolli nella scheda Code o nella community con il contesto, e passi avanti · post in #sfida-72h: M00 SFIDA · [NOME] · [URL] · eco/completa · cosa mi ha bloccato di più

Attenzione compliance

Non fare

  • Chiave Resend o Stripe incollata in chat o dentro server.js
  • "Consenti sempre" a un'azione di scrittura di un connettore
  • Form senza checkbox di consenso · landing con il logo dell'azienda senza permesso

Fai

  • Railway Variables + .env, a mano · «verifica che .env non sia tracciato»
  • Permessi minimi (un Business, un repository) · revisione ogni 30 giorni
  • Consenso esplicito, /privacy e doppio consenso (M03) · landing a nome tuo
Fine modulo 00

Cosa hai costruito

  • Claude Pro/Max + Progetto "NM OS" con istruzioni e file
  • App Claude sul computer: scheda Code attiva su Documenti/nm-os
  • Repository privato nm-os-landing caricato da Claude; servizio Railway online con URL, variabili e (se lo hai) dominio
  • Resend verificato, chiave in Railway e .env, prima email ricevuta
  • Lovable, Canva, Higgsfield, Stripe (o Shopify), Bunny attivi
  • Connettori Railway, Resend, GitHub, Canva, Meta Ads collegati con permessi minimi
  • Landing "Coming soon" online con form → Resend, URL nella community
M00
sistema installato
Per chi vuole andare oltre (facoltativo) · non fa parte del percorso

Cosa fa l'app dietro le quinte

Node.js LTS dall'installer ufficiale · login con lo stesso account Claude nel browser
= «crea un repository privato e caricaci questa cartella»
= «metti online questa cartella e dammi l'URL» (qui senza passare da GitHub)
= Impostazioni → Connettori → Canva → Connetti. I Connettori sono server MCP remoti collegati con OAuth; da terminale si aggiungono così, o nel file claude_desktop_config.json