Recash - Web - Bihor - Lucrari 2026 Nationala

Informatii generale

Descriere

Cu toții avem acasă sticle de returnat, dar de multe ori nu ajungem să le reciclăm: este nevoie să te deplasezi, să stai la coadă la aparat și să pierzi timp. Așa se strâng sacii plini de sticle în locuințe, iar banii pe garanție rămân neîncasați. :bottle_with_popping_cork:

Recash rezolvă exact această problemă. Este un marketplace care pune în legătură două tipuri de oameni: cei care au sticle de returnat și cei care sunt dispuși să vină să le preia, în schimbul unui procent din valoarea garanției, stabilit de comun acord. Pe scurt, funcționează ca un „Uber pentru reciclare”. :automobile::recycling_symbol:

Cum funcționează, pas cu pas:

:house: Ai sticle de reciclat? Creezi un anunț: câte sticle ai, unde te afli și cât la sută din valoare oferi celui care vine să le ia.
:robot: Te ajută inteligența artificială – pe baza unei poze, platforma estimează câte sticle ai și cât valorează.
:world_map: Colectorul vede anunțurile din apropierea lui pe o hartă și îl alege pe cel care îi convine.
:speech_balloon: Vă puteți contacta direct pe platformă ca să stabiliți detaliile.
:money_with_wings: Plata se face pe loc: când colectorul ajunge la tine și ridică sticlele, îți dă partea ta din bani, cât ați stabilit în anunț.
:white_check_mark: Restul banilor rămân colectorului, care duce mai departe sticlele la aparat.

:sparkles: Funcționalități cheie

:world_map: Hartă interactivă cu grupare inteligentă (clustering) – anunțurile din apropiere sunt afișate pe o hartă, iar punctele apropiate se grupează automat în funcție de nivelul de zoom, pentru o vizualizare clară chiar și în zonele aglomerate.
:robot: Analiză AI a sticlelor – un model de inteligență artificială procesează fotografiile din anunț și estimează automat numărul de sticle și valoarea aferentă.
:counterclockwise_arrows_button: Ciclu de viață complet al unui anunț – fiecare anunț parcurge stări bine definite: DESCHIS → PRELUAT → ÎN CURS → FINALIZAT, cu un flux de aprobare a colectorului de către poster.
:speech_balloon: Mesagerie în timp real – chat integrat pe fiecare anunț, cu indicator de tastare, pentru coordonarea directă între poster și colector.
:e_mail: Notificări pe email – utilizatorii primesc emailuri automate la evenimente importante (o cerere de colectare, aprobarea sau respingerea unei preluări), cu opțiune de abonare/dezabonare.
:bell: Notificări în aplicație, în timp real – alerte instant la preluare, sosirea colectorului, finalizare, anulare, expirare, evaluări noi și insigne obținute.
:locked: Confirmare prin cod la finalizare – tranzacția este validată printr-un cod, care confirmă predarea reală a sticlelor.
:alarm_clock: Program de disponibilitate – utilizatorul poate stabili intervalele orare (pe zile ale săptămânii) în care este disponibil pentru predarea sticlelor.
:hourglass_done: Expirare automată a anunțurilor – anunțurile nepreluate expiră automat, menținând lista de anunțuri actuală și relevantă.
:satellite_antenna: Radar – colectorii sunt notificați automat la apariția unor anunțuri noi în zona lor de interes.
:star: Sistem de încredere și reputație – evaluări reciproce și recenzii asociate fiecărei tranzacții finalizate, care asigură transparență între utilizatori.
:sports_medal: Gamificare – un sistem extins de insigne (primul anunț, colector experimentat, impact ecologic, rating perfect etc.) și un clasament al utilizatorilor, menite să stimuleze implicarea.
:bar_chart: Monitorizarea progresului – statistici individuale privind numărul de sticle reciclate, câștigurile acumulate și impactul asupra mediului.

Tehnologii

:artist_palette: Frontend

:atom_symbol: Next.js 16, React 19 și TypeScript – o aplicație rapidă și fiabilă.
:dashing_away: Tailwind CSS – o interfață consistentă și complet responsive.
:clapper_board: Framer Motion și Lenis – animații fluide și o experiență de navigare rafinată.
:world_map: Leaflet cu Leaflet.markercluster – harta interactivă și gruparea automată (clustering) a anunțurilor apropiate.
:counterclockwise_arrows_button: SWR – încărcarea și sincronizarea eficientă a datelor.

:hammer_and_wrench: Backend

:puzzle_piece: API Next.js versionat (/api/v1) – logica de business a platformei.
:file_cabinet: Prisma ORM cu MongoDB – bază de date optimizată prin indecși dedicați pentru interogări geospațiale, sortarea anunțurilor și activitatea utilizatorilor.
:locked_with_key: NextAuth (Auth.js) cu Google OAuth – autentificare securizată, bazată pe JWT.
:white_check_mark: Zod – validarea strictă a datelor la fiecare cerere.
:e_mail: Resend – trimiterea notificărilor prin email.

:high_voltage: Timp real și performanță

:electric_plug: Server WebSocket dedicat – mesagerie live și actualizarea instantanee a anunțurilor.
:rocket: Redis – caching, mecanism publish/subscribe și rate limiting pentru protejarea API-ului.

:globe_with_meridians: Internaționalizare

:globe_showing_europe_africa: Interfață bilingvă, disponibilă în română și engleză.
:currency_exchange: Comutare între monedele RON și EUR, cu conversie automată a valorilor.

:wheelchair_symbol: Accesibilitate

:label: Etichete descriptive (aria-label, aria-hidden, aria-pressed) pentru elementele interactive, astfel încât aplicația să fie corect interpretată de cititoarele de ecran.
:keyboard: Navigare de la tastatură, cu stări de focus vizibile (focus:ring) pe butoane și câmpuri.
:framed_picture: Text alternativ pentru imagini și structură semantică a conținutului.
:mobile_phone: Design complet responsive, adaptat pentru telefon, tabletă și desktop.

:test_tube: Testare și calitate

:microscope: Teste unitare (calculul valorii, împărțirea sumelor, sistemul de insigne), realizate cu Vitest.
:link: Teste end-to-end pentru fluxurile principale (creare anunț, preluare, finalizare cu cod), realizate cu Playwright.
:robot: Integrare continuă (CI) prin GitHub Actions, pentru rularea automată a verificărilor la fiecare modificare a codului.

:locked: Securitate

:locked_with_key: Autentificare securizată prin Google OAuth și sesiuni gestionate de NextAuth, cu cookie-uri de tip Secure – fără stocarea parolelor pe platformă.
:shield: Autorizare la nivel de rută – un middleware protejează paginile și endpoint-urile sensibile, respingând cererile neautentificate (răspuns 401).
:vertical_traffic_light: Rate limiting – limitarea numărului de cereri pe unitate de timp (implementat cu Redis), pentru a preveni abuzurile și atacurile de tip brute-force.
:white_check_mark: Validarea strictă a datelor de intrare cu Zod și verificarea identificatorilor, pentru a preveni datele malformate și injectările.

:books: Documentație

Platforma dispune de un website de documentație tehnică disponibil la adresa https://docs.recash.ro/, care detaliază arhitectura, funcționalitățile, deciziile de design și măsurile de securitate.

:rocket: Deployment

Aplicația este containerizată cu Docker și rulează pe platforma Railway, cu deployment automat.

Cerinte sistem

Pentru utilizarea platformei:

:globe_with_meridians: Un browser modern (Google Chrome, Mozilla Firefox, Microsoft Edge, Safari), actualizat.
:antenna_bars: Conexiune la internet.
:mobile_phone: Un dispozitiv cu serviciile de localizare (GPS) active, necesare pentru harta cu anunțuri.
:key: Un cont de utilizator (autentificare prin Google).

Pentru dezvoltare și rulare locală:

:laptop: Sistem de operare macOS, Linux sau Windows, cu minimum 8 GB RAM (recomandat 16 GB).
:green_square: Node.js (versiune recentă) și managerul de pachete pnpm.
:leaf_fluttering_in_wind: MongoDB – baza de date.
:red_circle: Redis – pentru caching, publish/subscribe și rate limiting.
:spouting_whale: Docker (opțional, pentru containerizare).
:wrench: Variabile de mediu configurate (chei OAuth, conexiuni la baza de date, curs valutar RON/EUR etc.).
:memo: Un editor de cod (Visual Studio Code, WebStorm etc.).

Realizatori

David-Alexandru Rotar

  • Scoala: Colegiul National “Samuil Vulcan” Beius
  • Clasa: 12
  • Judet: Bihor
  • Oras: Sanmartin de Beius

Screenshots

Salut! Te rog să acorzi drepturi contului @InfoeducatieJudge pe GitHub pentru a preda codul sursă al proiectului.