NoteMate
Gli studenti si scambiano gli appunti scritti a mano
Cosa fa
App gratuita dove gli studenti caricano i propri appunti scritti a mano, li condividono con gli altri e chiedono gli appunti delle lezioni perse.
Come guadagna
Il progetto è stato messo in vendita su SideProjectors a circa 620 $. Come guadagna non è indicato pubblicamente.
Rendilo tuo
- Per le università italiane: appunti divisi per ateneo, corso e professore.
- L'AI trasforma gli appunti in schede di ripasso e domande d'esame.
- Attenzione: niente materiale coperto da diritto d'autore, come i libri dei docenti.
Le frasi da scrivere all'AI
1. Base del sito e grafica
Crea un'app web in italiano chiamata "Appunti in Comune": gli studenti della stessa università o scuola caricano i propri appunti (anche foto di quelli scritti a mano), li condividono per corso e chiedono gli appunti delle lezioni perse. Usa React, Vite, TypeScript e Tailwind CSS.
Pagine da creare:
1. Pagina iniziale con università e corsi più attivi
2. Registrazione con email istituzionale (es. @studenti.unibo.it)
3. Pagina del corso: appunti per lezione, richieste aperte
4. Carica appunti: foto o PDF, lezione, argomento
5. Il mio profilo: appunti condivisi, grazie ricevuti
Stile: studentesco e ordinato: sfondo bianco, blu #2563EB, giallo evidenziatore #FDE047, carattere "Nunito", pagine degli appunti come fogli a quadretti. 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:
- "corsi": università, nome del corso, anno
- "appunti": corso, lezione, argomento, file, autore, stato (visibile, segnalato, rimosso), grazie ricevuti
- "richieste": corso, lezione mancante, chi la chiede, risolta da
Regole di sicurezza obbligatorie:
- vede gli appunti solo chi è registrato con l'email della stessa università
- si caricano solo appunti propri: niente slide dei docenti, libri o compiti d'esame
- gli appunti segnalati si nascondono finché un moderatore non li controlla
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. Appunti per corso, solo tra studenti
Ci si registra con l'email istituzionale: il dominio (es. studenti.unibo.it) collega lo studente alla sua università, e vede solo i corsi e gli appunti di quella (regola nei Dettagli tecnici).
Si caricano foto (più pagine diventano un unico documento) o PDF, indicando corso, numero della lezione e argomento. Regole visibili al caricamento: "Carica solo appunti scritti da te. Niente slide dei docenti, libri, tracce o soluzioni d'esame".
Le richieste ("Mi mancano gli appunti della lezione 7 di Analisi") avvisano chi ha caricato appunti in quel corso.
4. Grazie, segnalazioni e moderazione
Ogni appunto ha il pulsante "Grazie": i più ringraziati salgono in cima. Profilo con gli appunti condivisi e i grazie ricevuti.
Pulsante "Segnala" (materiale non proprio, errori gravi, contenuti offensivi): 3 segnalazioni nascondono l'appunto finché un moderatore non lo controlla. Per i docenti: indirizzo dedicato per chiedere la rimozione di materiale proprio.
5. Pagamenti con Stripe
Aggiungi un pagamento singolo di 4,99 € per anno accademico. Il pagamento sblocca i download in PDF, la ricerca nel testo degli appunti e gli avvisi delle richieste. La consultazione resta gratuita.
A pagamento riuscito il webhook imposta "piano" a "pro" 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. Università: registrati con l'email di un'altra università e verifica di non vedere gli appunti della prima.
Correggi quello che non va e scrivimi cosa hai cambiato.
Dettagli tecnici
Appunti visibili solo nella stessa università
Il dominio dell'email dell'utente (dal token di accesso) deve corrispondere a quello dell'università del corso. Gli appunti con 3 segnalazioni si nascondono da soli.
create table universita (
id serial primary key,
nome text not null,
dominio text not null unique -- es. 'studenti.unibo.it'
);
create table corsi (
id uuid primary key default gen_random_uuid(),
universita_id int not null references universita(id),
nome text not null
);
create table appunti (
id uuid primary key default gen_random_uuid(),
corso_id uuid not null references corsi(id) on delete cascade,
autore_id uuid not null references auth.users(id) on delete cascade,
lezione int not null,
argomento text not null,
file_path text not null,
segnalazioni int not null default 0,
stato text not null default 'visibile' check (stato in ('visibile', 'nascosto', 'rimosso'))
);
-- Il dominio dell'email di chi è collegato
create function mio_dominio() returns text language sql stable as $
select split_part(auth.jwt() ->> 'email', '@', 2);
$;
alter table corsi enable row level security;
alter table appunti enable row level security;
create policy "corsi della mia universita" on corsi for select using (
exists (select 1 from universita u where u.id = universita_id and u.dominio = mio_dominio()));
create policy "appunti della mia universita" on appunti for select using (
(stato = 'visibile' or autore_id = auth.uid())
and exists (select 1 from corsi c join universita u on u.id = c.universita_id
where c.id = corso_id and u.dominio = mio_dominio()));
create policy "carico i miei" on appunti for insert with check (
auth.uid() = autore_id and stato = 'visibile' and segnalazioni = 0);
-- Segnala: alla terza segnalazione l'appunto si nasconde
create function segnala(appunto uuid) returns void
language sql security definer set search_path = public as $
update appunti set segnalazioni = segnalazioni + 1,
stato = case when segnalazioni + 1 >= 3 then 'nascosto' else stato end
where id = appunto;
$;
Pezzi comuni a tutti i progetti
Glossario
- Storage
- Lo spazio di Supabase dove si salvano i file, come foto e audio, con le sue regole di accesso.
- JWT
- Il "pass" che il sito riceve quando ti colleghi: contiene, tra le altre cose, la tua email.