DespreProiecteContact
/
Angajează-mă
AcasăDespreProiecteContact
/
Angajează-mă

Studio de dezvoltare web full-stack din București. Proiectez, construiesc și livrez aplicații Next.js moderne și platforme Firebase.

Navigație

  • Despre
  • Proiecte
  • Contact

Legal

  • Confidențialitate
  • Termeni
  • Cookies

© 2026 MHLSQ · Alexandru Mihalașcu · Toate drepturile rezervate

All projects
DuoCart - hero screenshot

DuoCart

View live project

Status

Publicat

Creat

iul. 2026

Actualizat

10 iul. 2026

Tech stack

ReactTypeScriptFirebaseTailwind V4

Doi oameni, o gospodărie, un singur shopping list - mereu sincronizat. DuoCart este un PWA mobile-first în care un cuplu (sau o întreagă gospodărie) împărtășește o listă de cumpărături live, răsfoiește reducerile din săptămâna curentă de la Kaufland, Lidl, Auchan, Mega Image și Penny într-un singur loc și vede totalul curent pe magazin înainte să ajungă la casă. Adaugi un produs pe un telefon, apare instant pe celălalt. Ce face Liste partajate în timp real - pe Firestore, grupate pe magazin, cu subtotale pe magazin și economii live. Adaugi, bifezi, modifici cantitatea; orice schimbare se sincronizează la toți membrii gospodăriei. Oferte zilnice de la 5 lanțuri - un cron pe GitHub Actions scrapează fiecare retailer în fiecare dimineață la 07:00 (API-uri VTEX/GraphQL unde există, fixtures HTML unde nu) și publică un feed normalizat de oferte. Căutare live în catalogul complet - pentru Auchan și Mega Image (care expun stocul întreg), căutarea lovește API-urile live pentru ~60k produse în stoc, nu doar ofertele săptămânale. Comparare de prețuri între magazine - apeși pe orice ofertă ca să vezi același produs la celelalte lanțuri, potrivite după tokenuri de nume și unitate, cele mai ieftine primele. Prețuri unitare și filtre smart - preț pe kg/l extras din titluri, filtrare pe magazin / categorie / interval de preț / starea reducerii, sortare după preț, reducere sau preț unitar. Mai multe gospodării - creezi și comuți între grupuri; ownerii pot redenumi grupul și gestiona membrii; invitațiile sunt un singur link de partajat. Atribuire - vezi cine a adăugat fiecare produs și cine l-a bifat, pe avatar. Sesiuni de cumpărături și istoric - la finalul cumpărăturilor, produsele bifate se arhivează într-o sesiune datată, cu totalul cheltuit și cine a participat. PWA instalabil - handler custom de autentificare Firebase servit de pe domeniul aplicației, capacitate offline, instalare pe ecranul principal pe iOS/Android. Construit cu React 19 + TypeScript + Vite, Tailwind v4 + shadcn/ui (Base UI), design system custom „Forest” Firebase Auth (Google) + Firestore cu reguli de securitate pe baza membership-ului; cache offline persistent Funcții serverless pe Vercel care proxează cataloagele live ale retailerilor și handlerul de auth Firebase Cron pe GitHub Actions pentru scrape-ul zilnic; pachet Node standalone de scraper cu teste pe fixtures (Vitest) Note de dezvoltare: Strat de date conștient de cost - ofertele se citesc din cache-ul persistent și se reîmprospătează cel mult o dată pe zi pe utilizator; scraperul face diff față de documentele existente și scrie doar ce s-a schimbat, ca Firestore să rămână confortabil în free quota, deși sunt mii de oferte. Coș safe la curse - dacă apeși de mai multe ori pe aceeași ofertă, se incrementează un singur document determinist într-o tranzacție Firestore, deci apăsările rapide devin cantitate, nu rânduri duplicate. Scraping onest - fiecare retailer a fost reverse-engineered din propriul frontend; unde un lanț expune doar flyerul săptămânal (Penny/Kaufland/Lidl) aplicația o spune explicit, iar doar cele două lanțuri cu API-uri reale de catalog alimentează căutarea pe stocul complet.

Screenshots

8 images

Like this project?

Let's build something together.

Start a project