Luka Petrovic
← Indietro

Dashi

Dashi è un exchange per carte Pokémon, in joint venture con Mirmex, uno dei maggiori rivenditori di carte collezionabili in Italia. I collezionisti depositano le carte fisiche una volta sola, poi le comprano, vendono e scambiano online senza spedizioni in mezzo, e le ritirano quando vogliono. Ho costruito tutta la piattaforma da solo.

Apri dashi.gg ↗
carte in custodia
40.000+
app in un unico monorepo
6
test automatici
1.700+
La home page di Dashi

Il problema

Su un marketplace ogni scambio è un pacco. Aspetti giorni, imballi, e una carta da pochi centesimi non la vendi proprio, perché la spedizione costa più della carta. La condizione è quella che dichiara il venditore, quindi non è mai coerente.

Dashi sposta la parte fisica in due momenti soltanto, il deposito e il ritiro. Ogni carta viene controllata quando entra, e da lì in poi la proprietà passa di mano all'istante.

Cosa ho costruito

Sei app in un unico monorepo Bun e Turborepo. L'exchange in Next.js 16. L'app hub che lo staff usa per accettare i depositi, controllare il grading, gestire il magazzino e preparare i ritiri. Un'app Expo per iOS e Android. Un tracker della collezione, un blog e un piccolo server di stampa che pilota le stampanti di etichette e lo scanner in magazzino.

Tutto gira su un unico backend Convex: dati in tempo reale, job pianificati, workflow e aggregati per cose come il prezzo minimo e il valore del portafoglio. Clerk per gli account, Stripe per le ricariche del wallet e i pagamenti, Resend per le email, Sentry e PostHog per vedere cosa si rompe e cosa usano le persone.

La custodia è la parte difficile

Una carta su Dashi è un oggetto fisico che qualcuno ci ha affidato, quindi il modello dati è rigoroso. Una print è la voce di catalogo, una card è la singola copia fisica in custodia. Il sistema non butta mai via una carta: la corregge, la mette in quarantena, la instrada o la restituisce, e ogni passaggio lascia una traccia.

I depositi passano da accettazione, riconoscimento, grading e stoccaggio, per carte singole e per lotti da migliaia.

Riconoscere le carte

Le scansioni vengono confrontate prima con il catalogo tramite embedding multimodali. Solo quando il risultato non è chiaro un modello linguistico guarda l'immagine, e sceglie da una lista breve di candidati invece di tirare a indovinare. Il grading AI funziona allo stesso modo, con un modello di riserva quando il principale fallisce.

Per tararlo rigioco set versionati di scansioni vere, con le risposte giuste note, su un deployment separato, e leggo la precisione per segmento prima di cambiare qualcosa in produzione.

Come ci lavoro

Ogni funzionalità parte da una specifica scritta e da un piano nel repo. Gli agenti scrivono gran parte del codice, la CI fa lint, test, typecheck e build su ogni pull request, un bot di review commenta, e backend e app vanno in deploy insieme. È così che una persona sola fa andare avanti sei app.

Stack

Next.js · Expo · Convex · Bun · Turborepo · Clerk · Stripe · AI SDK · Sentry