Blockit
Instagram e TikTok si sbloccano solo dopo qualche flessione
Incasso mensile: 485 USD (fonte indicata nella scheda)
Cosa fa
App che blocca le app che creano dipendenza finché non si fanno flessioni, squat o plank, verificati con la fotocamera del telefono.
Come guadagna
Ha entrate ricorrenti ogni mese, verificate su TrustMRR. Prezzi e piani esatti sono indicati sul sito del progetto.
Rendilo tuo
- Versione per ragazzi, con i genitori che scelgono gli esercizi.
- Sfide tra amici: chi ha guadagnato più minuti di social con lo sport.
Le frasi da scrivere all'AI
1. Base del sito e grafica
Crea un'app web in italiano chiamata "Prima le Flessioni": aiuta a usare meno i social: prima di aprire Instagram o TikTok si deve fare un piccolo esercizio (flessioni, squat) contato dalla fotocamera. Su iPhone si collega con l'app Comandi. Usa React, Vite, TypeScript e Tailwind CSS.
Pagine da creare:
1. Pagina iniziale con come funziona e il prezzo
2. Registrazione e scelta degli esercizi e delle ripetizioni
3. Guida per collegarlo all'apertura delle app (Comandi su iPhone, Routine su Android)
4. Schermata dell'esercizio con fotocamera e contatore
5. Statistiche: ripetizioni fatte, aperture evitate
Stile: energico e diretto: sfondo nero #0A0A0A, verde neon #22C55E, bianco, carattere "Archivo Black" per il contatore enorme e "Inter" per i testi. 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:
- "sessioni": esercizio, ripetizioni, app che si voleva aprire, completata o rinunciato, data, collegate all'utente
Regole di sicurezza obbligatorie:
- ogni utente vede solo le sue sessioni
- il video della fotocamera non lascia mai il telefono
- 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. Contare le ripetizioni con la fotocamera
Una web app non può bloccare altre app da sola. Su iPhone si usa l'app Comandi: un'automazione "Quando apro Instagram → apri il link di Prima le Flessioni". Crea una pagina con la guida passo passo e immagini; su Android una guida simile con le Routine o app di automazione.
La schermata dell'esercizio usa la fotocamera e MediaPipe Pose direttamente nel browser per contare le ripetizioni (codice nei Dettagli tecnici): per le flessioni guarda l'angolo dei gomiti, per gli squat quello delle ginocchia. Contatore enorme e un suono a ogni ripetizione.
Finite le ripetizioni compare "Fatto! Ora puoi aprire l'app" con il pulsante; oppure "Ci rinuncio": entrambe le scelte si registrano.
4. Statistiche
Statistiche: ripetizioni della settimana, aperture a cui si è rinunciato (il vero risultato), serie di giorni, e l'app più tentata.
Impostazioni: esercizio (flessioni, squat, saltelli), ripetizioni (5–30), e "modalità facile" per chi non può fare flessioni (flessioni al muro).
5. Pagamenti con Stripe
Aggiungi un abbonamento a 2,99 € al mese. Gratis l'utente ha: un esercizio e statistiche di 7 giorni. Con il piano Pro sblocca: tutti gli esercizi, ripetizioni personalizzate e statistiche complete.
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. Conteggio: fai 10 flessioni lente e 10 veloci davanti alla fotocamera: il contatore deve sbagliare al massimo di una.
Correggi quello che non va e scrivimi cosa hai cambiato.
Dettagli tecnici
Contare le flessioni dall'angolo dei gomiti
Conta una ripetizione quando il gomito si piega sotto i 90 gradi e poi si distende sopra i 160: la soglia doppia evita di contare due volte lo stesso movimento.
type Punto = { x: number; y: number; visibility?: number };
function angolo(a: Punto, b: Punto, c: Punto): number {
const r = Math.atan2(c.y - b.y, c.x - b.x) - Math.atan2(a.y - b.y, a.x - b.x);
let g = Math.abs((r * 180) / Math.PI);
return g > 180 ? 360 - g : g;
}
// Punti di MediaPipe Pose: spalla 11/12, gomito 13/14, polso 15/16
export function contatoreFlessioni(onRipetizione: (totale: number) => void) {
let fase: "su" | "giu" = "su";
let totale = 0;
return (punti: Punto[]) => {
// Usa il braccio più visibile alla fotocamera
const sinistro = (punti[13].visibility ?? 0) >= (punti[14].visibility ?? 0);
const [s, g, p] = sinistro ? [punti[11], punti[13], punti[15]] : [punti[12], punti[14], punti[16]];
const gomito = angolo(s, g, p);
if (fase === "su" && gomito < 90) fase = "giu"; // sceso
else if (fase === "giu" && gomito > 160) { // risalito: una ripetizione
fase = "su";
totale++;
onRipetizione(totale);
}
};
}Sessioni e aperture evitate
Le sessioni di esercizio e quante volte, nella settimana, si è rinunciato ad aprire un'app.
create table sessioni (
id uuid primary key default gen_random_uuid(),
utente_id uuid not null references auth.users(id) on delete cascade,
esercizio text not null,
ripetizioni int not null default 0,
app text,
esito text not null check (esito in ('completata', 'rinunciato')),
fatta_il timestamptz not null default now()
);
alter table sessioni enable row level security;
create policy "le mie righe" on sessioni
for all using (auth.uid() = utente_id) with check (auth.uid() = utente_id);
select count(*) filter (where esito = 'rinunciato') as aperture_evitate,
sum(ripetizioni) as ripetizioni_totali
from sessioni
where utente_id = auth.uid() and fatta_il > now() - interval '7 days';
Pezzi comuni a tutti i progetti
Glossario
- MediaPipe
- Una libreria gratuita di Google che riconosce la posizione del corpo in un video, direttamente nel telefono.
- Comandi (iPhone)
- L'app di Apple per creare automazioni, per esempio aprire un sito quando si apre un'altra app.