Space
Manda file e testi all'istante con un codice di sei caratteri
Cosa fa
Si carica un file o un testo e si ottiene un codice di 6 caratteri: chi lo inserisce sull'altro dispositivo lo riceve subito.
Come guadagna
Startup appena presentata su BetaList, che non dichiara incassi. Idee nostre per guadagnare con un progetto simile: versione Pro con file più grandi e codici che durano di più.
Rendilo tuo
- Per le copisterie: il cliente manda il file da stampare dal telefono con un codice.
- Per insegnanti: materiali alla classe con un codice.
Le frasi da scrivere all'AI
1. Base del sito e grafica
Crea un'app web in italiano chiamata "Codice e Via": si carica un file o un testo e si ottiene un codice di 6 caratteri: chi lo inserisce su un altro dispositivo lo scarica subito. Niente account, niente email, e i file si cancellano da soli dopo 24 ore. Usa React, Vite, TypeScript e Tailwind CSS.
Pagine da creare:
1. Pagina principale: "Invia" (trascina un file o scrivi un testo) e "Ricevi" (inserisci il codice)
2. Dopo l'invio: codice grande, QR, tempo rimasto
3. Ricezione: anteprima del nome e della dimensione, poi download
4. Pagina Pro
5. Pagina "Come proteggiamo i tuoi file"
Stile: essenziale e veloce: sfondo bianco, nero #111827, accento verde acqua #14B8A6, carattere "Inter", codice enorme in "JetBrains Mono". 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:
- "invii": codice, file nello Storage privato o testo, dimensione, scade il, scaricamenti massimi, scaricamenti fatti
- "profili": piano
Regole di sicurezza obbligatorie:
- nessuno può elencare gli invii: si accede solo conoscendo il codice
- i file si scaricano con un link temporaneo e si cancellano dopo la scadenza
- massimo 5 tentativi di codice sbagliato al minuto per evitare chi prova a indovinare
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. Codice, link temporaneo e scadenza
Il file si carica nello Storage privato; la Edge Function "invia" crea un codice di 6 caratteri senza lettere che si confondono (niente 0/O, 1/I), con scadenza a 24 ore e numero massimo di scaricamenti (codice nei Dettagli tecnici).
Chi riceve inserisce il codice: la Edge Function "ricevi" controlla codice e scadenza e restituisce un link firmato valido 60 secondi. Dopo l'ultimo scaricamento o la scadenza, il file viene cancellato da un'operazione programmata ogni ora.
Contro chi prova codici a caso: massimo 5 tentativi sbagliati al minuto per indirizzo.
4. Pro e regole d'uso
Gratis: file fino a 200 MB e 24 ore. Pro: file fino a 5 GB, scadenza fino a 7 giorni, password facoltativa, e codici personalizzati.
Regole d'uso chiare: vietati contenuti illegali, con un indirizzo per le segnalazioni e la rimozione immediata.
5. Pagamenti con Stripe
Aggiungi un pagamento singolo di 5,99 € una volta sola. Il pagamento sblocca file fino a 5 GB, scadenze fino a 7 giorni, password e codici personalizzati.
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. Scadenza: crea un invio, cambia la scadenza nel database a un minuto fa e lancia la pulizia: il file deve sparire dallo Storage e il codice non deve più funzionare.
Correggi quello che non va e scrivimi cosa hai cambiato.
Dettagli tecnici
Invii con codice, scadenza e pulizia
Codici leggibili generati dal database, invii accessibili solo dalle Edge Function, e pulizia oraria dei file scaduti.
create table invii (
codice text primary key,
file_path text,
testo text,
dimensione_byte bigint,
scade_il timestamptz not null default now() + interval '24 hours',
scaricamenti_max int not null default 10,
scaricamenti int not null default 0,
check (file_path is not null or testo is not null)
);
alter table invii enable row level security; -- nessuna regola: solo le Edge Function
-- 6 caratteri senza simboli che si confondono (niente 0, O, 1, I, L)
create function nuovo_codice() returns text language plpgsql as $
declare alfabeto text := 'ABCDEFGHJKMNPQRSTUVWXYZ23456789'; c text;
begin
loop
c := '';
for i in 1..6 loop
c := c || substr(alfabeto, 1 + floor(random() * length(alfabeto))::int, 1);
end loop;
exit when not exists (select 1 from invii where codice = c);
end loop;
return c;
end $;
-- Usata dalla Edge Function "ricevi": restituisce il file e conta lo scaricamento
create function ritira(c text) returns table (file_path text, testo text)
language sql security definer set search_path = public as $
update invii set scaricamenti = scaricamenti + 1
where codice = upper(c) and scade_il > now() and scaricamenti < scaricamenti_max
returning invii.file_path, invii.testo;
$;
revoke execute on function ritira(text) from public, anon, authenticated;
grant execute on function ritira(text) to service_role;
-- Ogni ora: cancella file e invii scaduti o esauriti
select cron.schedule('pulizia-invii', '0 * * * *', $
delete from storage.objects where bucket_id = 'invii' and name in (
select file_path from invii where scade_il < now() or scaricamenti >= scaricamenti_max);
delete from invii where scade_il < now() or scaricamenti >= scaricamenti_max;
$);
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.
- Cron
- Un'operazione programmata che parte da sola a orari fissi, per esempio ogni lunedì mattina.
- Link firmato
- Un link a un file privato che funziona solo per pochi secondi, creato dal server per chi ne ha diritto.