Sari la conținut
Toate proiectele

Web app

DuoCart

Lista de cumpărături a unei gospodării, sincronizată în timp real, plus ofertele zilnice de la Kaufland, Lidl, Auchan, Mega Image și Penny, comparate între magazine.

DuoCart - hero screenshot

DuoCart e o aplicație PWA pentru o gospodărie care are o singură listă de cumpărături. Adaugi un produs pe un telefon și apare imediat pe celălalt, grupat pe magazin, cu subtotal și cu cât economisești din reduceri.

În fiecare dimineață la 07:00, un cron pe GitHub Actions preia ofertele de la Kaufland, Lidl, Auchan, Mega Image și Penny. Unde retailerul are un API (VTEX sau GraphQL) scraperul îl folosește, iar unde nu are, citește HTML-ul. Fiecare magazin a fost reverse-engineered din propriul site. La Auchan și Mega Image căutarea merge live pe tot catalogul, aproximativ 60.000 de produse în stoc. Penny, Kaufland și Lidl publică doar pliantul săptămânal, iar aplicația spune asta deschis.

În aplicație poți:

  • compara același produs între lanțuri, potrivit după nume și unitate, cu cel mai ieftin primul
  • vedea prețul pe kg sau pe litru, extras din titlu, și filtra după magazin, categorie, preț sau reducere
  • crea mai multe gospodării și invita membri cu un singur link
  • vedea pe avatar cine a adăugat și cine a bifat fiecare produs
  • încheia cumpărăturile într-o sesiune datată, cu totalul cheltuit și cu cine a participat

Ofertele se citesc din cache-ul persistent și se reîmprospătează cel mult o dată pe zi pentru fiecare utilizator, iar scraperul scrie în Firestore doar ce s-a schimbat. Așa, mii de oferte încap în cota gratuită. Dacă apeși de mai multe ori pe aceeași ofertă, o tranzacție Firestore crește cantitatea pe un singur document, deci nu apar rânduri duplicate. Aplicația se instalează pe iOS și Android, merge offline, iar autentificarea Firebase e servită de pe domeniul ei.

Stack: React 19, TypeScript, Vite, Tailwind CSS v4, shadcn/ui, Firebase Auth și Firestore, funcții serverless pe Vercel, GitHub Actions și Vitest pentru scraper.

Capturi

4 imagini

Vrei ceva asemănător?

Începe un proiect