Costruisci il Sistema
Alla fine hai una landing online con il tuo dominio, un form che manda email, il tracking acceso e un checkout che incassa.
Otto lezioni. Un sistema online.
- Architettura del sistemacosa parla con cosa, dove vive ogni pezzo
- Copy della landing con Claudeapertura, promessa, 3 passi, FAQ, CTA
- Genera la landing con Claude Codeindex.html e server.js, online su Railway
- DominioIONOS → DNS → Railway, SSL automatico (Cloudflare DNS opzionale)
- Form → Resendemail transazionale con consenso GDPR
- TrackingPixel Meta + GA4 / Google Tag
- CheckoutStripe Payment Links o Shopify
- Il tuo video sulla landingYouTube non in elenco o Bunny Stream
Architettura del sistema
Obiettivo: disegnare il sistema su un foglio e sapere dove vive ogni pezzo.
Sei pezzi che si parlano
ogni nodo si accende con →
Tre case. Tre indirizzi.
La cartella di codice con index.html e server.js. Ogni modifica è un commit: puoi sempre tornare indietro.
Prende il codice da GitHub e lo mette online. Variabili d'ambiente per le chiavi. Hobby 5 $/mese.
Compri dominio e casella email. Un record CNAME lo collega a Railway, l'SSL lo fa Railway. Cloudflare DNS è opzionale.
Copy della landing con Claude
Obiettivo: il testo completo della landing, sezione per sezione, già compliant.
Il prompt che scrive la landing
Sei un copywriter senior specializzato in landing page per il benessere in Italia. Contesto: azienda [nome azienda], prodotto [prodotto, es. sostituto pasto proteico], cliente ideale [descrizione dal Validation Report], angolo scelto [angolo vincente]. Usa i documenti del progetto (Validation Report, Compliance Card) come fonte. Compito: scrivi il testo completo di una landing con questa struttura, in ordine: 1. Apertura (titolo max 12 parole, sottotitolo max 25) 2. Problema (3 frasi con le parole del cliente, senza esagerare) 3. Promessa verificabile (cosa succede davvero usando il prodotto secondo etichetta) 4. Come funziona in 3 passi (un verbo per passo) 5. Il prodotto secondo etichetta (ingredienti, uso, avvertenze come da scheda ufficiale) 6. Prova sociale: 2 testimonianze plausibili + disclaimer "risultati individuali, non rappresentativi della media" 7. FAQ: 5 domande reali (spedizione, uso, controindicazioni, resi, contatti) 8. CTA finale (una sola azione: lascia l'email / acquista) Vincoli compliance non negoziabili: nessun claim medico (niente "cura", "dimagrisci", "elimina"), mai promesse di guadagno, sostituti pasto descritti come "sostituzione di un pasto nel contesto di una dieta ipocalorica", oli essenziali come benessere e routine. Tono: diretto, italiano, frasi corte. Formato: markdown, un titolo H2 per sezione.
Genera la landing con Claude Code
Obiettivo: la tua landing online su un indirizzo Railway pubblico.
Descrivi. Claude costruisce.
Crea una landing page single-file per [nome azienda] · prodotto [prodotto]. Usa il testo contenuto in copy-landing.md (nella cartella) senza riscriverlo. Struttura del progetto: - index.html: HTML + CSS + JS inline, responsive, font Google (Inter), dark premium. Sezioni nell'ordine del testo. Form con campi nome, email, checkbox consenso obbligatoria con testo "Ho letto la privacy policy e acconsento al trattamento dei dati". - server.js: Node 20 + Express. Serve index.html e privacy.html. Endpoint POST /api/lead: valida email e consenso, risponde 400 se manca il consenso. Legge RESEND_API_KEY, LEAD_TO_EMAIL e PORT da variabili d'ambiente (mai hard-coded). - privacy.html: privacy policy GDPR con titolare [nome e indirizzo], finalità, base giuridica (consenso), conservazione, diritti dell'interessato, contatto [email]. - Cookie banner: nessun cookie di tracciamento prima del click "Accetta". - package.json con script "start": "node server.js" e dipendenze express, resend. Vincoli: nessun testo diverso da quello del file, nessun claim medico, mai promesse di guadagno. Alla fine mostrami l'albero dei file e come avviare in locale.
Da cartella vuota a online
Ora lo facciamo davvero rec
Il tuo dominio
Obiettivo: la landing risponde su www.[tuodominio].it, con il lucchetto SSL.
IONOS → DNS → Railway
- Compra il dominio su IONOS≈ 1 € il primo anno · scegli .it o .com · aggiungi la casella email tuo@tuodominio.it, rifiuta il resto
- Su Railway: Settings → Networking → Custom Domaininserisci www.[tuodominio].it · Railway ti mostra il record CNAME
- Su IONOS: Domini & SSL → dominio → DNS → Aggiungi recordtipo CNAME · nome host www · punta a [xxx].up.railway.app · TTL 1 ora
- Radice senza wwwIONOS → Modifica destinazione → Inoltra dominio → https://www.[tuodominio].it (301) · oppure DNS su Cloudflare con CNAME su @ (nuvola grigia)
- Aspetta il segno verde su RailwaySSL automatico · da 5 minuti a qualche ora per la propagazione
Colleghiamo il dominio rec
Form → Resend
Obiettivo: ogni contatto riceve l'email di conferma e tu la notifica. Con consenso.
L'endpoint che manda l'email
app.post('/api/lead', async (req, res) => {
const { nome, email, consenso } = req.body;
if (!email || !email.includes('@')) return res.status(400).json({ ok:false, err:'email' });
if (consenso !== true) return res.status(400).json({ ok:false, err:'consenso' });
const r = await fetch('https://api.resend.com/emails', {
method: 'POST',
headers: { 'Authorization': `Bearer ${process.env.RESEND_API_KEY}`, 'Content-Type': 'application/json' },
body: JSON.stringify({
from: 'Nome <info@[tuodominio].it>',
to: [email],
subject: 'Conferma la tua iscrizione',
html: `<p>Ciao ${nome}, clicca per confermare: <a href="https://www.[tuodominio].it/conferma?e=${encodeURIComponent(email)}">Confermo</a></p>
<p><a href="https://www.[tuodominio].it/privacy">Privacy policy</a></p>`
})
});
if (!r.ok) return res.status(502).json({ ok:false, err:'resend' });
await salvaLead({ nome, email, consenso: new Date().toISOString() }); // Notion o Postgres
res.json({ ok:true });
});
Attiviamo Resend rec
Tracking: Pixel e GA4
Obiettivo: Meta e Google vedono ogni visita e ogni contatto della tua landing.
Il prompt che inserisce i tag
Aggiungi il tracking a index.html, senza toccare copy e layout.
1. Meta Pixel: inserisci il codice base nel <head> con ID [PIXEL_ID].
Evento PageView al caricamento. Evento "Lead" (fbq('track','Lead')) SOLO dopo
la risposta ok:true di POST /api/lead, mai al semplice click.
2. Google Tag (gtag.js) con ID [G-XXXXXXX] (GA4). Evento "generate_lead"
nello stesso punto dell'evento Lead di Meta, con parametro { method: 'landing_form' }.
3. Consenso: carica entrambi i tag solo dopo il click "Accetta" del cookie banner
(usa localStorage "cookie_consent" = "yes"). Prima di quel click: nessuna richiesta
a facebook.com o google-analytics.com.
4. Metti PIXEL_ID e G-ID in due costanti in cima allo script, così le cambio in un punto solo.
Alla fine: mostrami il diff e dimmi come verifico con Meta Pixel Helper e Tag Assistant.
Poi carica su GitHub con il messaggio "tracking" (Railway ridistribuisce da solo).
Prendiamo gli ID veri rec
Il tracking funziona se…
- Meta Pixel Helper (estensione Chrome) mostra PageView sulla landingsolo dopo "Accetta" sul cookie banner
- Compilo il form: Pixel Helper mostra l'evento Lead
- Tag Assistant (tagassistant.google.com) vede il tag G- collegato
- In GA4 → Tempo reale compare l'evento generate_lead
- Prima del consenso: zero richieste a facebook.com o google-analytics.comcontrolla in DevTools → Network
Checkout: Stripe o Shopify
Obiettivo: un bottone "Acquista" che incassa davvero, nei limiti della policy aziendale.
Un prodotto o un catalogo?
Crei il link dal pannello Stripe in 2 minuti, lo incolli nel bottone. Nessun abbonamento: solo 1,5 % + 0,25 € per carta UE. Fattura e IVA come da tuo regime.
Stripe Checkout integrato da Claude Code (sessione, webhook, email ordine). Oppure Shopify Starter 5 €/mese o Basic 27 €/mese se hai più prodotti, varianti e spedizioni.
Il tuo video sulla landing
Obiettivo: un video che parte veloce, senza pubblicità di altri.
YouTube non in elenco o Bunny Stream
<!-- ECONOMICO · YouTube "non in elenco": gratis, ma mostra video suggeriti di altri -->
<div class="video">
<iframe src="https://www.youtube-nocookie.com/embed/[VIDEO_ID]?rel=0&modestbranding=1"
allow="autoplay; fullscreen" allowfullscreen loading="lazy"></iframe>
</div>
<!-- COMPLETO · Bunny Stream: CDN veloce, nessun branding, token auth opzionale (~1 $/mese) -->
<div class="video">
<iframe src="https://iframe.mediadelivery.net/embed/[LIBRARY_ID]/[VIDEO_ID]?autoplay=false&preload=true"
allow="autoplay; fullscreen; picture-in-picture" allowfullscreen loading="lazy"></iframe>
</div>
<!-- in entrambi i casi: .video { aspect-ratio: 16/9 } iframe { width:100%; height:100% } -->
Due strade. Stessa landing online.
| Funzione | Economico | Completo |
|---|---|---|
| AI | Claude Pro 20 €/meseapp con scheda Code e Connettori inclusi | Claude Max (stessa app, più capacità) da 100 €/mese |
| Codice + hosting | GitHub Free + Railway Hobby 5 $/mese | GitHub + Railway Pro + Postgres 20 $/mese |
| Dominio + email + DNS | IONOS dominio + casella email ≈ 1 € il 1° annoDNS su IONOS | IONOS dominio + email professionale ~10-20 €/anno + Cloudflare DNS Free (opzionale) |
| Resend Free 0 €3.000 email/mese | Resend Pro + Broadcasts 20 $/mese | |
| Checkout | Stripe Payment Links solo commissioni 1,5 % + 0,25 € | Stripe Checkout integrato o Shopify Basic 27 €/mese |
| Video | YouTube non in elenco 0 € | Bunny Stream ~1 $/mese |
| Totale indicativo | ≈ 26 €/mese + dominio | ≈ 165 €/mese + dominio |
Non dire
- "Perdi 5 kg in 2 settimane"
- "L'olio di lavanda cura l'insonnia"
- "Un sistema che ti paga mentre dormi"
Di' invece
- "Sostituisce un pasto nel contesto di una dieta ipocalorica"
- "Una routine serale di benessere con la lavanda"
- "Un sistema di vendita online che gira 24/7"
Cosa hai costruito
- Landing pubblicata su Railway, codice su GitHub
- Dominio tuo con SSL (IONOS + Railway)
- Form con consenso → Resend, doppio consenso attivo
- Pixel Meta + GA4 / Google Tag con evento Lead
- Checkout Stripe (o Shopify) collegato al bottone
- Video sulla landing (YouTube o Bunny Stream)