← 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

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.