← Tutte le idee Marketing e social

Newsletter sulla scrittura

Una newsletter con 2.800 iscritti dedicata alla scrittura

Incasso mensile: 20 USD (fonte indicata nella scheda)

Cosa fa

Newsletter su Substack per chi scrive, con oltre 2.800 iscritti. Venduta per circa 4.000 $: il pubblico costruito ha un valore.

Come guadagna

Incasso annuo dichiarato di circa 235 $ nell'annuncio di vendita su Microns, che verifica i dati. Il nome del progetto non è pubblico.

Rendilo tuo

  • Una newsletter italiana per chi vuole scrivere un libro o un blog.
  • Guadagna con corsi o con una versione a pagamento.

Le frasi da scrivere all'AI

1. Base del sito e grafica

Crea un'app web in italiano chiamata "Penna Viva": una newsletter per chi scrive (racconti, romanzi, blog): ogni settimana una lezione, un esercizio di scrittura e, per gli abbonati, la correzione commentata dei propri testi. Usa React, Vite, TypeScript e Tailwind CSS.

Pagine da creare:
1. Pagina iniziale con l'iscrizione gratuita e il piano a pagamento
2. Archivio delle lezioni: alcune libere, altre per gli abbonati
3. Pagina della lezione con l'esercizio
4. Consegna del proprio testo per la correzione (abbonati)
5. Pannello autore: lezioni, iscritti, testi da correggere

Stile: letterario e intimo: sfondo carta #FDFBF6, inchiostro #1F2937, rosso matita #B91C1C per le correzioni, carattere "Libre Baskerville" per i testi e "Inter" per l'interfaccia, colonna di lettura stretta. Nessuna immagine generica di stock.

Tutto deve funzionare perfettamente da telefono. Tutti i testi in italiano, chiari e senza parole tecniche.

2. Database, account e sicurezza

Collega il progetto a Supabase e attiva la registrazione con email e password.

Crea queste tabelle:
- "lezioni": titolo, testo, esercizio, solo per abbonati o libera, data
- "consegne": testo dell'abbonato, lezione, commento dell'autore, stato (inviata, corretta)

Regole di sicurezza obbligatorie:
- le lezioni libere le leggono tutti; quelle per abbonati solo gli abbonati: lo decide il database
- ogni abbonato vede solo le sue consegne
- il piano non si modifica dal browser

Usa esattamente il codice SQL che trovi nei "Dettagli tecnici" di questa scheda: eseguilo nel SQL Editor di Supabase prima di continuare, poi collega le pagine alle tabelle.

3. Lezioni libere e per abbonati

Ogni settimana l'autore pubblica una lezione (es. "Come scrivere un dialogo che non annoia") con un esercizio. Gli iscritti gratuiti ricevono l'inizio della lezione per email; gli abbonati la lezione completa e l'archivio intero.

Il testo completo delle lezioni per abbonati arriva al browser solo se l'utente è abbonato: la regola sta nel database (codice nei Dettagli tecnici). Gli altri vedono le prime righe e il riquadro "Continua a leggere con l'abbonamento".

Invio delle email con Resend, con doppia conferma dell'iscrizione e disiscrizione con un clic.

4. Correzioni commentate

Gli abbonati consegnano fino a 2 testi al mese (massimo 1.500 parole). Prima della correzione dell'autore, il sito offre una prima lettura automatica: Claude segnala ripetizioni, frasi troppo lunghe e punti poco chiari, senza riscrivere il testo.

L'autore corregge con commenti a margine. L'abbonato riceve un'email quando la correzione è pronta.

5. Pagamenti con Stripe

Aggiungi un abbonamento a 6 € al mese o 60 € all'anno. Gratis l'utente ha: l'inizio delle lezioni e 3 lezioni libere al mese. Con il piano Pro sblocca: tutte le lezioni, l'archivio e 2 correzioni commentate al mese.

A pagamento riuscito il webhook porta l'utente al piano Pro; se l'abbonamento viene disdetto o non rinnovato lo riporta al piano gratuito.

Per la sessione di pagamento e il webhook segui la guida "Pagamenti con Stripe" di Fattibile.

6. Controlli specifici di questo progetto

Oltre ai controlli della guida "Controllo finale", verifica in particolare:
1. Paywall: con un account gratuito prova a leggere il testo completo di una lezione per abbonati chiamando direttamente il database: deve arrivare solo l'anteprima.
Correggi quello che non va e scrivimi cosa hai cambiato.

Dettagli tecnici

Lezioni per abbonati protette dal database

L'anteprima è pubblica; il testo completo sta in una tabella separata, leggibile solo dagli abbonati o per le lezioni libere.

create table lezioni (
  id uuid primary key default gen_random_uuid(),
  slug text not null unique,
  titolo text not null,
  anteprima text not null,             -- le prime righe, per tutti
  solo_abbonati boolean not null default true,
  pubblicata_il date not null default current_date
);

create table testi_lezioni (
  lezione_id uuid primary key references lezioni(id) on delete cascade,
  testo text not null,
  esercizio text not null
);

alter table lezioni enable row level security;
alter table testi_lezioni enable row level security;

create policy "anteprime pubbliche" on lezioni for select using (true);

create policy "testo libero o per abbonati" on testi_lezioni for select using (
  not (select l.solo_abbonati from lezioni l where l.id = lezione_id)
  or exists (select 1 from profili p where p.id = auth.uid() and p.piano = 'pro')
);

create table consegne (
  id uuid primary key default gen_random_uuid(),
  utente_id uuid not null references auth.users(id) on delete cascade,
  lezione_id uuid references lezioni(id),
  testo text not null check (array_length(regexp_split_to_array(trim(testo), '\s+'), 1) <= 1500),
  commento text,
  stato text not null default 'inviata' check (stato in ('inviata', 'corretta')),
  inviata_il timestamptz not null default now()
);
alter table consegne enable row level security;
create policy "le mie consegne" on consegne for select using (auth.uid() = utente_id);
create policy "consegno se abbonato" on consegne for insert with check (
  auth.uid() = utente_id and stato = 'inviata' and commento is null
  and exists (select 1 from profili p where p.id = auth.uid() and p.piano = 'pro'));

Pezzi comuni a tutti i progetti

Glossario

Slug
La parte finale e leggibile dell'indirizzo di una pagina, es. /pizzeria-da-mario.
Paywall
Il punto in cui un contenuto si blocca e serve pagare per vederlo. Qui lo controlla il database, quindi non si può aggirare.