Werewolf: Undercover
L'app che fa da narratore a Lupus in Tabula, così giocano tutti
Incasso mensile: 9464 USD (fonte indicata nella scheda)
Cosa fa
App per iPhone che narra con audio immersivo le partite del gioco del lupo mannaro, eliminando il bisogno di un moderatore. Fatta da un solo sviluppatore francese.
Come guadagna
Gratis con acquisti: 3,99 $ a settimana, 24,99 $ all'anno o 39,99 $ il gioco completo. 737 abbonati, voto 4,5 su 5. Cresciuta grazie alle ricerche nell'App Store. Incassi verificati con RevenueCat.
Rendilo tuo
- In italiano con una voce teatrale: "Il villaggio si addormenta…".
- Ambientazioni nuove: mafia in Sicilia, congiura nell'antica Roma.
- Narratore per altri giochi: cene con delitto, cacce al tesoro.
Le frasi da scrivere all'AI
1. Base del sito e grafica
Crea un'app web in italiano chiamata "Il Narratore": un'app che fa da narratore a Lupus in Tabula con voce e suoni: assegna i ruoli sul telefono, guida le fasi notte e giorno e tiene il conto, così nessuno deve fare il moderatore. Usa React, Vite, TypeScript e Tailwind CSS.
Pagine da creare:
1. Schermata iniziale con ambientazione a scelta
2. Giocatori e ruoli
3. Distribuzione dei ruoli passando il telefono
4. Partita: notte e giorno con voce e musica
5. Fine partita con la rivelazione dei ruoli
Stile: gotico: sfondo nero #0C0A09, rosso sangue #991B1B, luna #FDE68A, carattere "Cinzel" per i titoli, nebbia animata. 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:
- "ambientazioni": nome, testi e file audio per ogni fase, gratis o a pagamento
- "partite": giocatori, ruoli, storico (solo sul telefono)
Regole di sicurezza obbligatorie:
- la partita resta sul telefono e funziona senza internet
- gli audio sono scaricati prima, non in diretta
- gli acquisti si verificano con RevenueCat
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. La regia della notte
L'app è una macchina a stati: notte (lupi, veggente, guardia), alba con l'annuncio delle vittime, discussione con timer, voto, controllo della vittoria. Il telefono resta al centro e la voce dice cosa fare.
Le frasi si registrano una volta sola con ElevenLabs e si includono nell'app, con più varianti per non ripetersi; i nomi dei giocatori si possono sintetizzare al momento o evitare.
Musica e suoni (ululati, campane) con licenza d'uso. Tutto funziona offline: spesso si gioca in posti senza campo.
4. Ruoli e ambientazioni
Editor dei ruoli con bilanciamento consigliato in base ai giocatori. Ambientazioni a pagamento.
Lupus in Tabula è un marchio: usa un nome tuo e regole descritte con parole tue.
5. Pagamenti con Stripe
Aggiungi un pagamento singolo di 9,99 € una volta per sempre. Sblocca tutte le ambientazioni e i ruoli avanzati.
A pagamento riuscito il webhook imposta "piano" a "completo" nella tabella "profili", sulla riga dell'utente indicata in client_reference_id.
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. Offline: in modalità aereo gioca una partita intera con 8 giocatori fino alla vittoria.
Correggi quello che non va e scrivimi cosa hai cambiato.
Dettagli tecnici
Le fasi della partita
Una macchina a stati semplice: dopo ogni passo si controlla se qualcuno ha vinto, altrimenti si va alla fase successiva.
type Giocatore = { nome: string; ruolo: "lupo" | "veggente" | "villico"; vivo: boolean };
type Fase = "notte" | "alba" | "discussione" | "voto" | "fine";
export function vincitore(g: Giocatore[]) {
const vivi = g.filter((x) => x.vivo);
const lupi = vivi.filter((x) => x.ruolo === "lupo").length;
if (lupi === 0) return "villaggio";
if (lupi >= vivi.length - lupi) return "lupi";
return null;
}
export function prossimaFase(f: Fase, g: Giocatore[]): Fase {
if (vincitore(g)) return "fine";
return ({ notte: "alba", alba: "discussione", discussione: "voto", voto: "notte", fine: "fine" } as const)[f];
}
Pezzi comuni a tutti i progetti
Glossario
- Macchina a stati
- Un programma che passa da una fase all'altra secondo regole precise, utile per giochi e procedure.
