ReadRare
I libri e i documenti tecnici più rari che probabilmente non hai mai letto
Cosa fa
Una raccolta curata di libri e documenti tecnici rari e introvabili, con schede e link dove trovarli.
Come guadagna
Presentato su Hacker News dal suo creatore, che non dichiara incassi. Idee nostre per guadagnare con un progetto simile: link di affiliazione alle librerie, newsletter con sponsor.
Rendilo tuo
- Lo stesso per un'altra passione: libri rari di cucina, fumetti, storia locale.
- Una newsletter settimanale "il libro raro della settimana".
Le frasi da scrivere all'AI
1. Base del sito e grafica
Crea un'app web in italiano chiamata "Biblioteca Rara": una raccolta curata di libri e manuali tecnici rari o fuori catalogo (elettronica, meccanica, informatica d'epoca, artigianato), con schede, e i link a dove trovarli legalmente: biblioteche, archivi digitali, librerie dell'usato. Usa React, Vite, TypeScript e Tailwind CSS.
Pagine da creare:
1. Pagina iniziale con le raccolte tematiche e le ultime schede
2. Ricerca per titolo, autore, argomento, anno
3. Scheda del libro: perché è importante, indice, dove trovarlo, disponibilità
4. Raccolte curate (es. "Radio a valvole", "Primi computer")
5. Segnala un libro e diventa sostenitore
Stile: da biblioteca antica: sfondo carta ingiallita #F6F0E2, verde scuro #1F3B2D, oro #A67C2E, carattere "EB Garamond" per i titoli e "Inter" per i testi, copertine in griglia. 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:
- "libri": titolo, autore, anno, editore, argomento, descrizione, ISBN se c'è, link alle fonti legali, stato dei diritti (pubblico dominio, protetto)
- "segnalazioni": libri proposti dagli utenti, da verificare
- "preferiti": libri salvati, collegati all'utente
Regole di sicurezza obbligatorie:
- le schede sono pubbliche, le scrive solo la redazione
- nessun file dei libri protetti viene caricato o linkato da fonti non autorizzate
- ogni utente vede solo i suoi preferiti e le sue segnalazioni
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. Schede e dove trovarli legalmente
Ogni scheda spiega perché il libro è prezioso, cosa contiene e per chi è utile, con l'indice se disponibile. La sezione "Dove trovarlo" mostra solo fonti legali: copia digitale su Internet Archive o Biblioteca Digitale se di pubblico dominio o prestata legalmente, biblioteche che lo possiedono, e ricerca nell'usato.
Per i libri con ISBN, la disponibilità si controlla in automatico con le API di Open Library (codice nei Dettagli tecnici). Per gli altri la redazione inserisce i link a mano.
Regola chiara: niente PDF pirata, né caricati né linkati.
4. Raccolte e sostenitori
Raccolte tematiche curate con un'introduzione, e newsletter mensile con i ritrovamenti del mese.
Gli utenti segnalano libri rari (con titolo, autore e dove l'hanno visto): la redazione li verifica e li pubblica citando chi li ha segnalati. I sostenitori, con un piccolo abbonamento, ricevono la newsletter estesa e possono salvare liste illimitate.
5. Pagamenti con Stripe
Aggiungi un abbonamento a 3 € al mese (sostenitore). Gratis l'utente ha: ricerca e schede libere per tutti, 10 preferiti. Con il piano Pro sblocca: preferiti e liste illimitati, newsletter estesa e avviso quando un libro salvato compare nell'usato.
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. Diritti: verifica che nessuna scheda di libro protetto contenga link a file scaricabili non autorizzati.
Correggi quello che non va e scrivimi cosa hai cambiato.
Dettagli tecnici
Disponibilità legale da Open Library
Dato un ISBN, chiede a Open Library se esiste una copia leggibile o in prestito digitale e restituisce il link.
type Disponibilita = { stato: "leggibile" | "prestito" | "solo_scheda" | "non_trovato"; link?: string };
export async function disponibilita(isbn: string): Promise<Disponibilita> {
const pulito = isbn.replace(/[^0-9X]/gi, "");
const r = await fetch("https://openlibrary.org/api/volumes/brief/isbn/" + pulito + ".json");
if (!r.ok) return { stato: "non_trovato" };
const dati = await r.json();
const voce = dati.items?.[0];
if (!voce) {
const record = Object.values(dati.records ?? {})[0] as { recordURL?: string } | undefined;
return record?.recordURL ? { stato: "solo_scheda", link: record.recordURL } : { stato: "non_trovato" };
}
return {
stato: voce.status === "full access" ? "leggibile" : voce.status === "lendable" || voce.status === "checked out" ? "prestito" : "solo_scheda",
link: voce.itemURL,
};
}Catalogo con ricerca e segnalazioni
Il catalogo pubblico con ricerca in italiano e le segnalazioni degli utenti da verificare.
create table libri (
id uuid primary key default gen_random_uuid(),
slug text not null unique,
titolo text not null,
autore text not null,
anno int,
argomento text not null,
descrizione text not null,
isbn text,
diritti text not null check (diritti in ('pubblico_dominio', 'protetto', 'da_verificare')),
fonti jsonb not null default '[]', -- [{ tipo: 'biblioteca'|'archivio'|'usato', nome, url }]
ricerca tsvector generated always as (
to_tsvector('italian', titolo || ' ' || autore || ' ' || argomento || ' ' || descrizione)) stored
);
create index on libri using gin (ricerca);
alter table libri enable row level security;
create policy "catalogo pubblico" on libri for select using (true);
create table segnalazioni (
id uuid primary key default gen_random_uuid(),
utente_id uuid not null references auth.users(id) on delete cascade,
titolo text not null,
autore text,
dove_visto text,
stato text not null default 'da_verificare' check (stato in ('da_verificare', 'pubblicato', 'scartato'))
);
alter table segnalazioni enable row level security;
create policy "le mie segnalazioni" on segnalazioni for select using (auth.uid() = utente_id);
create policy "segnalo" on segnalazioni for insert with check (auth.uid() = utente_id and stato = 'da_verificare');
Pezzi comuni a tutti i progetti
Glossario
- JSONB
- Un tipo di colonna che contiene dati strutturati flessibili, come un piccolo documento.
- Slug
- La parte finale e leggibile dell'indirizzo di una pagina, es. /pizzeria-da-mario.
- ISBN
- Il codice unico che identifica un libro pubblicato (dal 1970 circa in poi).
- Pubblico dominio
- Opere i cui diritti d'autore sono scaduti: si possono copiare e condividere liberamente.