Înapoi la portofoliu
MobileClient real

Program Lucru

Platformă pentru organizarea programului de lucru, pontaj, ore de recuperat și statistici, completată de PWA offline, alarme mobile sincronizate, notificări Web Push, administrare pe roluri și un modul BBD pentru urmărirea produselor și loturilor.

Program Lucru

Stack principal

Node.js
TypeScript
Express
sql.js
SQLitebcryptexpress-rate-limitWeb PushVAPIDExcelJSReact 19ViteTailwind CSS 4PWAService WorkerZXingReact NativeExpoExpo RouterTanStack QueryZustandNativeWindExpo SecureStoreNotifeeExpo CameraVitestPM2NginxGitHub ActionsEAS Build

Provocarea

Provocarea a fost transformarea unui calendar personal de ture într-o sursă de adevăr folosită simultan de program, pontaj, recuperări, statistici, notificări și alarme, apoi extinderea aceluiași produs cu roluri administrative și un flux BBD cu loturi. Schimbările trebuie să rămână coerente între web și mobile, iar accesul la datele fiecărui utilizator trebuie separat fără a pierde posibilitatea administratorului de a opera transversal.

Soluția

Soluția centralizează regulile și datele într-un API Express/TypeScript, cu tabele separate pentru utilizatori, sesiuni, ture, pontaj, recuperări, reguli de alarmă, subscripții push și entitățile BBD. React consumă API-ul prin hook-uri specializate și oferă PWA cu fallback offline, iar Expo/React Native folosește TanStack Query, SecureStore și Notifee pentru acces mobil și alarme locale sincronizate. Rolurile și ownership-ul sunt verificate server-side, statisticile sunt calculate din program și pontaj, iar BBD folosește loturi, filtrare/paginare și export Excel. GitHub Actions, Nginx și PM2 automatizează livrarea aplicației web și a backend-ului pe VPS.

Complexitate notabilă

Program Lucru a evoluat dintr-un viewer de ture într-un produs operațional multi-user. Fiecare angajat are un calendar propriu cu zile de lucru, libere sau concediu, ore de început și final și observații. Programul poate fi editat punctual sau în bloc pe lună, este disponibil în vizualizări pentru azi, săptămână și lună și alimentează statisticile lunare, pontajul și exportul calendarului în format ICS. Implementarea actuală persistă turele explicit pe zile; repository-ul nu implementează o regulă formală de recurență care să genereze automat programul.

Pontajul leagă timpul efectiv de programul planificat. Utilizatorul poate marca intrarea și ieșirea, poate vedea istoricul lunar, iar sistemul calculează ora estimată de ieșire și statistici precum întârzierile față de ora programată. Înregistrările manuale sunt suportate pentru corecții, cu control de ownership pentru utilizator și acces administrativ pentru vizualizarea sau operarea datelor altor conturi. Separat, orele de recuperat au propriul flux CRUD, cu motiv, număr de ore, stare pending/rezolvat și dată de rezolvare, iar totalurile sunt incluse în statisticile lunare.

Produsul are trei suprafețe conectate la același API. PWA-ul React oferă interfața principală responsive, instalabilă, cu Service Worker, cache pentru utilizare offline și Web Push. Aplicația React Native/Expo reproduce fluxurile esențiale pe mobil și adaugă alarme locale exacte: regulile de alarmă sunt păstrate server-side per utilizator, iar clientul sincronizează programul următoarelor 14 zile și programează local alarmele prin Notifee. Backend-ul include și un scheduler de mesaje Web Push adaptate fazei turei sau tipului de zi, plus administrarea mesajelor și a utilizatorului țintă.

Rolurile confirmate sunt consultant, merch și admin. Administratorul poate gestiona utilizatorii și rolurile, poate inspecta pontajul, poate vedea statistici agregate și poate intra temporar în interfața unui angajat prin impersonare controlată server-side. Accesul la modulul BBD este restricționat la consultant și admin. BBD urmărește produse pe brand și loturi cu lună/an de expirare, cantitate și stare rezolvată, oferă căutare și filtrare server-side, scanare de coduri de bare, note la nivel de brand, istoric pentru cumpărător și export Excel grupat.

Backend-ul este o aplicație Express/TypeScript cu o bază SQLite încărcată prin sql.js și persistată pe disc. Schema a trecut prin migrări incrementale pentru multi-user, sesiuni cu expirare, loturi BBD și mutarea stării de rezolvare la nivel de lot. Autentificarea folosește tokenuri de sesiune generate criptografic, parole bcrypt și migrare transparentă de la hash-uri SHA-256 vechi, iar login-ul este protejat cu rate limiting. Deployment-ul web și backend rulează automat la push pe main prin GitHub Actions și SSH către VPS, cu build Node.js, Nginx și PM2; baza de date are un script separat de backup zilnic cu retenție de șapte zile.

Arhitectura este potrivită pentru un produs intern cu volum moderat și deployment single-instance, dar codul nu este prezentat ca o soluție horizontal scalabilă. Persistența sql.js exportă baza în fișier după mutații, scheduler-ul push trăiește în procesul API, iar unele scripturi vechi — în special importatorul JSON pentru schema single-user — au rămas în urmă față de modelul curent. Aceste limite sunt importante în evaluarea tehnică și definesc direcțiile naturale de evoluție: tranzacții și validare mai strictă pentru scrieri bulk, persistență server-side convențională pentru concurență mai mare și izolarea cache-urilor offline pe identitatea utilizatorului.

Rezultate cheie

  • PWA React pentru programul zilnic, săptămânal și lunar, cu editare pe zi și salvare bulk pe lună
  • Aplicație React Native/Expo conectată la același API, configurată pentru distribuție internă prin EAS
  • Pontaj cu clock-in/clock-out, istoric lunar, corecții manuale și corelare cu programul planificat
  • Statistici lunare pentru ture, ore, zile libere și concediu, recuperări și întârzieri de pontaj
  • Flux separat pentru ore de recuperat, cu stare pending/rezolvat și includere în statisticile lunare
  • Export ICS al programului pentru integrarea cu aplicații de calendar
  • Reguli de alarmă persistate server-side și sincronizare mobilă pentru programarea alarmelor locale pe următoarele 14 zile
  • Web Push cu subscripții VAPID și mesaje alese în funcție de faza turei, zi liberă sau concediu
  • Administrare utilizatori și roluri consultant, merch și admin, plus impersonare pentru suport operațional
  • Modul BBD cu produse, branduri și loturi, căutare și filtrare server-side, scanare barcode și status per lot
  • Istoric al cumpărătorului și note la nivel de brand în modulul BBD
  • Export Excel BBD grupat pe brand și loturi
  • Service Worker cu versiune schimbată automat la build și fallback offline pentru shell și date de program
  • Backup zilnic al bazei SQLite cu retenție de șapte zile
  • Deployment automat al backend-ului și PWA-ului la push pe main prin GitHub Actions, SSH și PM2/Nginx
  • Teste Vitest pentru autentificare și fluxuri BBD, plus teste de smoke și componente în frontend

Proiecte asemănătoare

Vrei ceva similar?

Începe cu wizard-ul de estimare — răspunzi la câteva întrebări și primești un range de preț + timeline realist.