Bento
Un'intera presentazione in un solo file HTML, da modificare e condividere
Cosa fa
Una presentazione che sta tutta in un file: si apre nel browser, si modifica, contiene i dati dei grafici e permette di lavorare insieme. Oltre mille voti.
Come guadagna
Presentato su Hacker News dal suo creatore, che non dichiara incassi. Idee nostre per guadagnare con un progetto simile: versione per aziende con modelli e marchio aziendale, condivisione con statistiche.
Rendilo tuo
- Per insegnanti: lezioni in un file da mandare agli studenti, che funziona anche senza internet.
- Modelli pronti per pitch di startup in italiano.
Le frasi da scrivere all'AI
1. Base del sito e grafica
Crea un'app web in italiano chiamata "Slide in un File": crea presentazioni che stanno tutte in un unico file HTML: si aprono in qualsiasi browser senza programmi, si modificano dentro il file stesso, contengono i dati dei grafici, e si possono mandare per email. Usa React, Vite, TypeScript e Tailwind CSS.
Pagine da creare:
1. Pagina iniziale con un esempio da scaricare e il prezzo
2. Editor delle slide: testi, immagini, grafici con i dati in tabella
3. Modalità presentazione a schermo intero
4. Salvataggio: scarica il file o salva sopra quello aperto
5. Pagina Pro (collaborazione in tempo reale)
Stile: elegante e minimale: editor bianco con barra nera #111111, accento corallo #F43F5E, carattere "Inter"; temi delle slide tra cui scegliere. 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:
- nessun dato per l'uso base: la presentazione vive nel file
- "presentazioni_condivise": per la collaborazione Pro, contenuto in JSON e chi può modificarlo
- "profili": piano
Regole di sicurezza obbligatorie:
- senza account il file resta solo sul computer dell'utente
- le presentazioni condivise le vedono solo gli invitati
- 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. Un file che contiene tutto
Il file HTML contiene: il programma dell'editor e del presentatore, i testi delle slide, le immagini (incorporate), e i dati dei grafici. Si apre con un doppio clic in qualsiasi browser, anche senza internet.
Quando si salva, il file riscrive se stesso con i nuovi contenuti (codice nei Dettagli tecnici): su Chrome ed Edge può salvare direttamente sopra il file aperto (File System Access API), sugli altri browser scarica la nuova versione.
I grafici (barre, linee, torta) si creano da una tabella modificabile; i dati restano nel file, così chi riceve la presentazione può controllarli.
4. Presentare e collaborare
Modalità presentazione con frecce, note per chi parla in una seconda finestra, e timer. Esportazione in PDF.
Pro: collaborazione in tempo reale (la presentazione si carica online e più persone la modificano insieme con Supabase Realtime), commenti sulle slide e cronologia delle versioni.
5. Pagamenti con Stripe
Aggiungi un abbonamento a 6 € al mese. Gratis l'utente ha: uso completo in file singolo, senza collaborazione online. Con il piano Pro sblocca: collaborazione in tempo reale, commenti, cronologia delle versioni e temi Pro.
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. Portabilità: crea una presentazione con immagini e grafici, mandala per email, aprila su un altro computer senza internet: deve funzionare uguale.
Correggi quello che non va e scrivimi cosa hai cambiato.
Dettagli tecnici
Il file che salva se stesso
I dati della presentazione stanno in un tag script dentro la pagina. Al salvataggio si ricrea l'HTML della pagina con i dati nuovi e lo si scrive sul file aperto o lo si scarica.
// Nel file: <script id="dati" type="application/json">{ ...slide... }</script>
export const leggiDati = () => JSON.parse(document.getElementById("dati")!.textContent!);
function htmlConDati(dati: unknown): string {
const copia = document.documentElement.cloneNode(true) as HTMLElement;
copia.querySelector("#dati")!.textContent = JSON.stringify(dati).replace(/</g, "\\u003c"); // niente </script> nei dati
copia.querySelectorAll("[data-temporaneo]").forEach((el) => el.remove()); // interfaccia dell'editor aperta
return "<!doctype html>\n" + copia.outerHTML;
}
let fileAperto: any = null; // maniglia del file (File System Access API)
export async function salva(dati: unknown, nome = "presentazione.html") {
const contenuto = htmlConDati(dati);
if ("showSaveFilePicker" in window) {
fileAperto ??= await (window as any).showSaveFilePicker({
suggestedName: nome, types: [{ description: "Presentazione", accept: { "text/html": [".html"] } }],
});
const scrittore = await fileAperto.createWritable();
await scrittore.write(contenuto);
await scrittore.close(); // salvato sopra il file
} else {
const a = document.createElement("a"); // altri browser: scarica la nuova versione
a.href = URL.createObjectURL(new Blob([contenuto], { type: "text/html" }));
a.download = nome;
a.click();
}
}
Pezzi comuni a tutti i progetti
Glossario
- JSONB
- Un tipo di colonna che contiene dati strutturati flessibili, come un piccolo documento.
- File System Access API
- Una funzione di Chrome ed Edge che permette a una pagina, con il tuo permesso, di salvare direttamente su un file del computer.
- File autonomo
- Un unico file che contiene tutto ciò che serve per funzionare, senza dipendere da internet o da altri file.