← Tutti i progetti
Catalogo e collezione Dragon Ball Fusion World
Catalogo non ufficiale delle carte, con filtri per colore, tipo, costo e rarità e un tracker della collezione posseduta.
- Anno
- 2026
- Ruolo
- Progetto personale
- Stack
- Next.js, TypeScript, Tailwind CSS, Prisma, PostgreSQL, Vitest
- Link
- Demo ↗
Il problema
Un catalogo delle carte di Dragon Ball Fusion World, espansione per espansione, in cui filtrare per colore, tipo, costo, rarità e tratto e segnare quali carte possiedo.
Il mio ruolo
Tutto il percorso dei dati: raccolta delle carte dal sito ufficiale, database, interfaccia e pubblicazione. Le immagini stanno su un bucket Cloudflare R2, il database su Neon, il sito su Vercel.
Le decisioni
- Raccolta dei dati con uno scraper a concorrenza limitata e una breve pausa tra le richieste, per non martellare il sito di origine. I parser sono provati su pagine HTML salvate.
- Immagini ottimizzate con AVIF per primo e WebP come ripiego, e solo alle larghezze realmente usate dalla griglia: senza elenco, Next ne genererebbe di molto più grandi del necessario.
- Cache delle immagini ottimizzate di un anno: un file scaricato non cambia mai, quindi la conversione si paga una volta sola.
I compromessi
- Le immagini sono passate da Vercel Blob a Cloudflare R2 dopo aver superato il limite di operazioni del piano gratuito durante il caricamento. R2 non fa pagare la banda in uscita.
- Per ora le immagini escono dall'indirizzo pubblico di sviluppo di R2 e non da un dominio mio: più semplice, ma con limiti di velocità se il traffico cresce.
La qualità
- Test automatici con Vitest sui parser dello scraper e sulle query dei dati.
- Qualità delle immagini dichiarate esplicitamente, con valori più alti per le miniature dei mazzi, dove il testo piccolo si impasta.
Cosa rifarei diversamente
- Collegare un dominio al bucket delle immagini al posto dell'indirizzo di sviluppo.
- Automatizzare l'arrivo delle immagini delle nuove espansioni: oggi il caricamento su R2 e l'aggiornamento degli indirizzi nel database sono due passi a mano.