Codédex
Imparare a programmare come in un videogioco
Incasso mensile: 81.502 USD (fonte indicata nella scheda)
Cosa fa
Piattaforma per imparare a programmare da zero con lezioni brevi in stile videogioco: livelli, punti esperienza, badge e progetti. Ha oltre 250 ore di lezioni gratuite.
Come guadagna
Lezioni base gratis, abbonamento "Club" da 9,99 $ al mese. 6.500 abbonati su circa 2 milioni di utenti, quasi 1,5 milioni di dollari incassati in totale. Incassi verificati con Stripe.
Rendilo tuo
- Tutto in italiano, per ragazzi delle superiori e per chi cambia lavoro.
- Un solo argomento fatto benissimo: Excel e formule, SQL, Python per l'ufficio.
- Classi per gli insegnanti, con i progressi degli studenti.
Le frasi da scrivere all'AI
1. Base del sito e grafica
Crea un'app web in italiano chiamata "Codice Quest": una piattaforma per imparare Python da zero in italiano con lezioni brevi in stile videogioco: esercizi che si eseguono nel browser, punti esperienza, livelli e badge. Usa React, Vite, TypeScript e Tailwind CSS.
Pagine da creare:
1. Pagina iniziale con la mappa del percorso e i prezzi
2. Registrazione
3. Mappa del corso a capitoli e livelli
4. Lezione: spiegazione breve, editor di codice ed esercizio controllato in automatico
5. Profilo con livello, badge e serie di giorni
Stile: da videogioco retrò: sfondo blu scuro #1E1B4B, verde #22C55E, giallo #FACC15, carattere "Press Start 2P" per i titoli e "Inter" per le lezioni, piccoli personaggi pixel. 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": capitolo, ordine, titolo, spiegazione, codice di partenza, test di controllo, gratis o Club
- "progressi": utente, lezione, completata, tentativi, data
- "profili_gioco": punti esperienza, livello, serie di giorni, badge
Regole di sicurezza obbligatorie:
- le lezioni gratuite sono pubbliche, quelle Club solo per gli abbonati
- ogni utente vede e modifica solo i suoi progressi
- punti e badge si assegnano solo dal server
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. Python nel browser e controllo automatico
Il codice si esegue direttamente nel browser con Pyodide (Python compilato per il web): niente server da pagare e nessun rischio, perché il codice dello studente non tocca mai i tuoi server.
Ogni esercizio ha dei test: dopo l'esecuzione si controlla l'output o il valore delle variabili (codice nei Dettagli tecnici). Se è giusto, si salva il progresso e la funzione del database assegna i punti. Se è sbagliato, un pulsante "Aiutino" chiede a Claude un suggerimento senza dare la soluzione.
Le lezioni vanno scritte bene: è il cuore del prodotto. Poche righe di spiegazione, subito un esercizio.
4. Livelli, serie e badge
Ogni lezione dà punti esperienza; ogni 100 punti si sale di livello. La "serie" conta i giorni di fila con almeno una lezione, con un promemoria via email la sera se si sta per perderla.
Badge per traguardi (primo programma, 7 giorni di fila, capitolo completato) e un certificato di fine corso da condividere su LinkedIn.
5. Pagamenti con Stripe
Aggiungi un abbonamento a 6,99 € al mese o 49 € all'anno. Gratis l'utente ha: i primi 3 capitoli. Con il piano Pro sblocca: tutti i capitoli, progetti finali, aiutini illimitati e certificato.
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. Punti: completa una lezione due volte e controlla che i punti vengano dati una volta sola.
Correggi quello che non va e scrivimi cosa hai cambiato.
Dettagli tecnici
Eseguire Python nel browser e controllare l'esercizio
Pyodide si carica una volta sola; poi si esegue il codice dello studente catturando ciò che stampa, e si confronta con il risultato atteso.
import { loadPyodide, type PyodideInterface } from "pyodide";
let py: PyodideInterface | null = null;
export async function esegui(codice: string) {
py ??= await loadPyodide({ indexURL: "https://cdn.jsdelivr.net/pyodide/v0.26.4/full/" });
let uscita = "";
py.setStdout({ batched: (t) => { uscita += t + "\n"; } });
try {
await py.runPythonAsync(codice);
return { ok: true, uscita: uscita.trim() };
} catch (e) {
return { ok: false, uscita: String(e).split("\n").slice(-2).join("\n") }; // solo la riga utile dell'errore
}
}
export async function controlla(codice: string, atteso: string) {
const r = await esegui(codice);
return { ...r, giusto: r.ok && r.uscita === atteso.trim() };
}Punti dati una volta sola
La funzione segna la lezione come completata e assegna i punti solo la prima volta.
create table progressi (
utente_id uuid not null references auth.users(id) on delete cascade,
lezione_id int not null,
completata_il timestamptz not null default now(),
primary key (utente_id, lezione_id)
);
alter table progressi enable row level security;
create policy "i miei progressi" on progressi for select using (auth.uid() = utente_id);
create function completa_lezione(p_lezione int, p_punti int)
returns void language plpgsql security definer set search_path = public as $
begin
insert into progressi (utente_id, lezione_id) values (auth.uid(), p_lezione)
on conflict do nothing;
if found then
update profili_gioco set punti = punti + p_punti, livello = (punti + p_punti) / 100 + 1
where utente_id = auth.uid();
end if;
end $;
Pezzi comuni a tutti i progetti
Glossario
- Pyodide
- Python che funziona dentro il browser: il codice degli studenti gira sul loro computer, non sul tuo server.
