← Tutte le idee Giochi e hobby

Bondly

Il gioco di domande per conoscersi meglio in coppia

Incasso mensile: 466 USD (fonte indicata nella scheda)

Cosa fa

Un gioco per le serate in coppia: domande divertenti e profonde per parlare, ridere e conoscersi meglio.

Come guadagna

Ha entrate ricorrenti ogni mese, verificate su TrustMRR. Prezzi e piani esatti sono indicati sul sito del progetto.

Rendilo tuo

  • Domande per amici, per famiglie a cena, per colleghi.
  • Pacchetti a tema: viaggio, primo appuntamento, anniversario.

Le frasi da scrivere all'AI

1. Base del sito e grafica

Crea un'app web in italiano chiamata "Noi Due": un gioco per le coppie: ogni giorno una domanda (divertente, profonda o piccante a scelta), ognuno risponde dal suo telefono e le risposte si vedono solo quando hanno risposto entrambi. Usa React, Vite, TypeScript e Tailwind CSS.

Pagine da creare:
1. Pagina iniziale con esempi di domande e il prezzo
2. Registrazione e collegamento con il partner tramite codice
3. La domanda di oggi: rispondi, poi scopri la risposta dell'altro
4. Mazzi di domande per le serate (primo appuntamento, viaggio, futuro, ricordi)
5. Archivio delle risposte di coppia

Stile: intimo e caldo: sfondo rosa cipria #FDF2F4, bordeaux #881337, oro tenue #D4A373, carattere "DM Serif Display" per le domande e "Inter" per i testi, card grandi da girare. 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:
- "coppie": i due utenti collegati e il codice d'invito
- "domande": testo, mazzo, livello (leggera, profonda, piccante)
- "risposte": domanda, coppia, utente, testo, data

Regole di sicurezza obbligatorie:
- le risposte si vedono solo dentro la coppia
- la risposta del partner si vede solo dopo aver risposto anche tu: lo decide il database
- le domande piccanti si attivano solo se entrambi lo scelgono

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. Rispondere e scoprire

Il primo partner crea la coppia e riceve un codice di 6 caratteri da mandare all'altro. Una volta collegati, ogni giorno compare la stessa domanda per entrambi.

Ognuno scrive la sua risposta senza vedere quella dell'altro. Quando hanno risposto entrambi, le due risposte si girano insieme con un'animazione. La regola che nasconde la risposta del partner finché non hai risposto sta nel database (codice nei Dettagli tecnici), così non si può sbirciare.

Notifica gentile: "Marco ha risposto alla domanda di oggi. Tocca a te!".

4. Mazzi per le serate e archivio

I mazzi sono gruppi di 30 domande per la serata, da fare insieme sullo stesso telefono, girando le carte. Livelli: leggera, profonda, piccante (quest'ultimo solo se attivato da entrambi nelle impostazioni).

Archivio delle risposte di coppia per giorno, con la ricerca. Possibilità di cancellare la coppia e tutte le risposte in qualsiasi momento.

5. Pagamenti con Stripe

Aggiungi un pagamento singolo di 5,99 € una volta per la coppia. Il pagamento sblocca tutti i mazzi e l'archivio completo per entrambi i partner.

A pagamento riuscito il webhook imposta "completa" a true nella tabella "coppie", sulla riga del coppia 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. Segreto: prima di rispondere, prova a leggere la risposta del partner chiamando direttamente il database: deve essere bloccata.
Correggi quello che non va e scrivimi cosa hai cambiato.

Dettagli tecnici

Risposte nascoste finché non rispondi

Puoi leggere la risposta del partner solo se esiste già la tua per la stessa domanda.

create table coppie (
  id uuid primary key default gen_random_uuid(),
  utente_a uuid not null references auth.users(id) on delete cascade,
  utente_b uuid references auth.users(id) on delete cascade,
  codice text not null unique default upper(substr(md5(random()::text), 1, 6)),
  piccante_a boolean not null default false,
  piccante_b boolean not null default false,
  completa boolean not null default false
);

create table risposte (
  domanda_id int not null,
  coppia_id uuid not null references coppie(id) on delete cascade,
  utente_id uuid not null references auth.users(id) on delete cascade,
  testo text not null check (length(testo) <= 1000),
  risposto_il timestamptz not null default now(),
  primary key (domanda_id, coppia_id, utente_id)
);

create function nella_coppia(coppia uuid) returns boolean
language sql stable security definer set search_path = public as $
  select exists (select 1 from coppie where id = coppia and auth.uid() in (utente_a, utente_b));
$;

alter table coppie enable row level security;
alter table risposte enable row level security;

create policy "la mia coppia" on coppie for select using (auth.uid() in (utente_a, utente_b));

create policy "rispondo io" on risposte for insert
  with check (auth.uid() = utente_id and nella_coppia(coppia_id));

-- Vedo la mia risposta sempre; quella del partner solo se ho già risposto
create policy "vedo le risposte" on risposte for select using (
  nella_coppia(coppia_id) and (
    utente_id = auth.uid()
    or exists (select 1 from risposte mia
               where mia.domanda_id = risposte.domanda_id
                 and mia.coppia_id = risposte.coppia_id
                 and mia.utente_id = auth.uid())
  )
);

Entrare nella coppia con il codice

Il secondo partner entra con il codice: la funzione lo collega solo se la coppia ha ancora un posto libero.

create function entra_in_coppia(codice_invito text) returns uuid
language plpgsql security definer set search_path = public as $
declare trovata uuid;
begin
  update coppie set utente_b = auth.uid()
  where codice = upper(codice_invito) and utente_b is null and utente_a <> auth.uid()
  returning id into trovata;
  if trovata is null then raise exception 'Codice non valido o coppia già completa'; end if;
  return trovata;
end $;

Pezzi comuni a tutti i progetti

Glossario

Codice d'invito
Un codice breve che si manda all'altra persona per collegare i due account.