Înapoi la portofoliu
MobileClient real

PCUTB

Ecosistem web și mobile pentru un barber shop, cu programări pe sloturi calculate din servicii și program, aprobare administrativă, remindere push, administrarea clienților și serviciilor, statistici și mecanisme de loialitate.

PCUTB

Stack principal

Node.js
TypeScript
Express 5
Sequelize
MySQLJWTbcryptSvelteKit 2Svelte 5Tailwind CSS 4React NativeExpoExpo RouterReact QueryZustandNativeWindExpo SecureStoreExpo NotificationsWeb PushResendNodemailernode-cronPM2GitHub ActionsEAS BuildEAS Update

Provocarea

Provocarea a fost sincronizarea programului real al salonului cu trei interfețe diferite, fără ca utilizatorii sau administratorul să poată crea ușor suprapuneri. Sloturile trebuie să țină cont de durata serviciului, orarul săptămânal, zile speciale, pauze, programări existente și momentul curent, iar schimbările de status trebuie propagate prin notificări către actorul potrivit. În paralel, autentificarea și distribuția mobile trebuiau să funcționeze coerent pe web, iOS și Android.

Soluția

Soluția separă API-ul Node.js/TypeScript de clienții web și mobile. Express și Sequelize centralizează validarea, autentificarea, regulile de booking și persistența în MySQL; SvelteKit folosește proxy-uri server-side și cookie-uri HttpOnly pentru fluxurile autentificate, iar aplicațiile Expo folosesc React Query, Zustand și SecureStore. Disponibilitatea este calculată din serviciu, program, excepții, pauze și rezervări existente, iar interfețele de booking actualizează periodic sloturile cât timp utilizatorul alege ora. Notificările persistente sunt completate de Expo Push și Web Push, iar joburile node-cron rulează reminderele și procesele de loialitate. Deployment-ul web și backend este automatizat prin GitHub Actions și PM2, iar aplicația administrativă are workflow separat pentru OTA, build-uri native, artefacte și submit în store.

Complexitate notabilă

PCUTB este un produs operațional construit în jurul relației dintre client și salon. Clientul se poate înregistra, își verifică emailul și creează o programare alegând serviciul, ziua și ora. Durata și prețul provin din catalogul administrat de salon, iar backend-ul calculează intervalul final, aplică programul săptămânal, zilele speciale și pauzele și respinge sloturile care se suprapun cu programări existente.

Programările create de clienți intră în așteptare, iar zona de administrare oferă calendar, ocupare pe zile, filtre, creare manuală, editare, confirmare, respingere și marcarea neprezentărilor. Administratorul poate gestiona serviciile, programul recurent, excepțiile de calendar, utilizatorii, notificările, recenziile și versiunile aplicațiilor. Regulile includ anularea de către client doar cu mai mult de 24 de ore înainte, protecție împotriva programărilor în trecut și verificări de suprapunere cu pauzele și rezervările deja existente.

Notificările sunt tratate pe mai multe canale. Evenimente precum programare nouă, confirmare, respingere, modificare sau anulare creează notificări persistente și pot declanșa Expo Push pentru aplicațiile mobile și Web Push pentru browser. Un job cron verifică periodic programările confirmate și trimite remindere în ferestrele de 24 de ore și o oră înainte, folosind flag-uri persistente pentru a evita retrimiterea normală a aceluiași reminder.

Produsul are trei suprafețe principale peste același API: site-ul SvelteKit pentru clienți și administrare, aplicația React Native/Expo pentru clienți și aplicația React Native/Expo dedicată administratorului. Pe web, sesiunea folosește cookie-uri HttpOnly și refresh token; pe mobile, tokenurile sunt persistate în SecureStore, iar interceptorul HTTP serializează refresh-ul atunci când mai multe requesturi primesc simultan 401. Tema vizuală este comună, cu paletă dark/light și accent auriu configurabil.

Pe lângă booking, backend-ul include statistici operaționale și un strat de loialitate bazat pe puncte, tranzacții și mini-jocuri. Joburile acordă puncte pentru programări finalizate și gestionează resetarea lunară și leaderboard-ul. Site-ul este public la pcutb.ro, aplicația de client este publicată în App Store, iar repository-urile includ deployment automat pentru backend și web plus un pipeline EAS pentru build, OTA update și submit al aplicației administrative.

Rezultate cheie

  • Site public SvelteKit pentru prezentare, autentificare, programări și suprafețe de administrare
  • Aplicație React Native/Expo pentru clienți publicată în App Store
  • Aplicație React Native/Expo separată pentru administrarea operațională a salonului
  • Flux de booking cu serviciu unic, durată și preț din catalog, sloturi calculate și verificarea suprapunerilor
  • Program săptămânal, pauze și zile speciale folosite direct în calculul disponibilității
  • Workflow de programare pending → confirmată sau respinsă, cu anulare controlată și administrarea neprezentărilor
  • Creare și editare manuală a programărilor din interfața de administrare, inclusiv ocupare pe calendar
  • Notificări persistente, Expo Push și Web Push pentru evenimentele importante din ciclul programării
  • Remindere automate pentru programările confirmate în ferestrele de 24 de ore și o oră înainte
  • Administrarea utilizatorilor, serviciilor, programului, zilelor speciale, recenziilor și versiunilor aplicației
  • Statistici pe programări, venit calculat din serviciile confirmate, servicii și starea utilizatorilor
  • Sistem de puncte și istoric de tranzacții conectat la programări, leaderboard și mini-jocuri de loialitate
  • Deployment automat al backend-ului și site-ului pe VPS cu GitHub Actions și PM2
  • Pipeline EAS pentru OTA update, build-uri iOS/Android, artefacte și submit controlat al aplicației administrative

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.