Structura codului sursă
Cum este organizat repository-ul Recash și de ce am ținut totul modular.
Codul platformei Recash este organizat modular, nu ca un singur bloc monolitic — fiecare parte a aplicației funcționează izolat, ușor de urmărit și de schimbat fără să afecteze restul. Acesta este împărțit în patru zone principale:
app/— rutele și interfața vizualălib/— funcțiile care fac logica efectivă: calcule, validări, regulihooks/— cod reutilizabil pe partea de client, precum reconectarea automată la WebSocketws-server/— comunicarea în timp real, ca serviciu independent

Rutele API
Toate rutele sunt versionate explicit, sub app/api/v1/ — o decizie care lasă loc pentru o eventuală versiune viitoare fără a afecta clienții existenți. Dedesubt, fiecare grup de rute acoperă un domeniu individual: posts pentru postări, auth pentru autentificare, ai pentru analiza AI, radar pentru alertele geografice, profile pentru datele utilizatorului, leaderboard pentru clasament.
O rută bine construită face trei lucruri: validează cererea, apelează logica potrivită, răspunde.
Logica aplicației
Fiecare acțiune importantă din aplicație are codul ei dedicat în lib/, separat de rute:
lib/rate-limit.ts— limitare de traficlib/cache.ts— cache-aside genericlib/pubsub.ts— publicare evenimente WebSocketlib/radar.ts— notificări radarlib/badges.ts— acordare badge-uri
Componente server și client
Majoritatea componentelor din Recash sunt Server Components — randate pe server, fără JavaScript trimis în plus către browserul cuiva care doar vrea să vadă o postare. Doar fișierele care încep explicit cu "use client" rulează și în browser, pentru că au nevoie de interactivitate sau de stare pe care doar browserul o poate asigura.
Hook-uri personalizate
Hook-urile adună într-un singur loc logica ce s-ar repeta în mai multe componente. Componentele care le folosesc nu știu nimic despre ce se întâmplă în spate — doar se abonează la date și primesc actualizări:
useRecashSocket— reconectare automată la WebSocket, coadă de mesaje, distribuirea evenimenteloruseNotificationBell— contorul de notificări necitite, actualizat liveusePostLive— starea live a unei postări (status, mesaje noi)

Convenții de proiect
Rutele publice folosesc URL-uri în română, coerent cu publicul aplicației. Fiecare pagină "grea" este separată de fișierul de rută propriu-zis: page.tsx rămâne un punct de intrare simplu, care face fetch-ul inițial de date, iar logica de interfață stă în componenta ei dedicată.
