Sari la conținutul principal
Spring Boot

Aplicație de programări pentru saloane

Pentru proprietarii de saloane mici

Aplicație web completă pentru saloane: programări online, calendar, angajați și administrare. Construită cu Spring Boot și React. Încearcă demo-ul.

  • Programări de pe mobil și PC
  • Servicii cu preț și durată
  • Frizer la alegere sau primul liber
  • Protecție împotriva programărilor duble
  • Confirmare pe email
  • Panou pentru servicii, angajați, absențe și programări
  • Spring Boot, Hibernate și PostgreSQL

Dacă ai un salon, sigur cunoști asta

Clienți care scriu pe Instagram, sună când ești cu alt client sau trimit mesaj seara târziu. Răspunzi când poți, dar programările ajung în mai multe locuri: calendarul telefonului, un carnețel, un chat sau memoria ta.

Când salonul crește puțin, devine greu de ținut sub control. Ai servicii, prețuri, angajați, absențe și ore libere, iar clienții vor să se programeze simplu.

Nordic Cuts arată cum se poate rezolva asta cu o aplicație web proprie pentru un salon mic.

Ce este Nordic Cuts

Nordic Cuts este o aplicație web completă pentru frizerii și saloane. Clientul alege serviciul, frizerul, data și ora direct din browser, de pe mobil sau de pe PC, și vede prețul și durata înainte să trimită programarea.

În spatele paginii publice există un panou de administrare unde salonul gestionează servicii, frizeri, absențe și programări. Soluția e construită cu Java, Spring Boot, React și PostgreSQL. E o aplicație adevărată, nu o pagină de contact cu un formular.

Nordic Cuts în noul design: pagina principală și fluxul de programare derulate automat

Pentru clienții tăi

Clientul alege serviciul și vede ce frizeri îl fac. Dacă nu are o preferință, alege „Hvem som helst” (oricine), iar sistemul găsește primul frizer liber.

Apoi alege data și o oră liberă, completează numele, telefonul și emailul și acceptă condițiile de confidențialitate. Programarea se salvează în aceeași bază de date pe care o folosește panoul de administrare.

Pentru tine, ca proprietar

Vezi ce este programat, cine face fiecare lucrare și ce servicii oferă salonul. Frizerii sunt legați de serviciile pe care le fac, absențele se înregistrează, iar fiecare programare are un status: în așteptare, confirmată, anulată sau finalizată.

Soluția poate trimite clientului o confirmare pe email, un email când se schimbă statusul și o notificare salonului pentru fiecare programare nouă. Nu plătești comision pe programare, iar datele clienților rămân în baza de date a salonului.

Ce include

  • Pagină publică pentru salon, cu un design întunecat și modern.
  • Programare online în patru pași: serviciu, frizer, oră și date de contact.
  • „Hvem som helst” (oricine): sistemul alege primul frizer liber care face serviciul.
  • Protecție împotriva programărilor duble, verificată în backend.
  • Servicii cu preț, durată și descriere.
  • Frizeri cu poză, status și serviciile pe care le fac.
  • Înregistrarea absențelor angajaților.
  • Programări cu status: în așteptare, confirmată, anulată și finalizată.
  • Confirmare pe email pentru client și notificări pentru salon.
  • Acord de confidențialitate (GDPR) în formularul de programare.
  • Autentificare cu roluri de administrator și utilizator.

Pentru cine se potrivește

Se potrivește frizeriilor, barber shop-urilor și saloanelor mici care vor să-și controleze propriul flux de programări. Merge și pentru alte afaceri cu programări, unde clientul alege persoana, serviciul și ora.

Dacă azi gestionezi multe lucruri manual, o astfel de soluție îți poate economisi timp și le face clienților programarea mai simplă.

Cum lucrăm

Nu este un șablon fix în care toată lumea primește exact același lucru. Folosim demo-ul ca punct de plecare și îl adaptăm la salonul tău: servicii, prețuri, angajați, limbi, design și flux de lucru.

Există un cost de pornire pentru dezvoltare și configurare, apoi mentenanță și hosting stabilite clar. Știi ce este inclus înainte să începem.

Tehnologia din spatele Nordic Cuts

Partea asta e pentru curioși sau pentru programatorul pe care vrei să-l întrebi. Pe scurt: o singură aplicație Spring Boot care servește și API-ul, și aplicația React, cu PostgreSQL ca bază de date.

ComponentăTehnologieCe face
BackendJava 21, Spring Boot 4.1, JHipster 9.4API REST, reguli de programare, email și securitate
Bază de datePostgreSQLSalvează servicii, frizeri, absențe și programări
ORMHibernate 7 cu Spring Data JPA și EhcacheLeagă clasele Java de tabele, cu cache pentru citiri frecvente
Modificări de schemăLiquibaseModificări versionate, aplicate automat la pornire
BuildMaven Wrapper și frontend-maven-pluginConstruiește backendul și frontendul într-un singur JAR executabil
FrontendReact 19, TypeScript 5.9, Tailwind CSSPagina publică și fluxul de programare, gândite întâi pentru mobil
AdministrareReact, Redux Toolkit, Bootstrap 5Servicii, frizeri, absențe, programări și utilizatori
SecuritateSpring Security cu JWTAutentificare și roluri de administrator și utilizator
HostingDocker pe Railway (UE)Health check, deploy automat din main și repornire la eroare
CalitateGitHub Actions, JUnit, Jest, Cypress, TestcontainersFiecare modificare e testată înainte să ajungă în producție

Backend: Java 21 și Spring Boot 4.1

Baza a fost generată cu JHipster 9.4, apoi adaptată și extinsă pentru un salon. Codul e organizat pe straturi: resursele REST primesc cererile, clasele de serviciu conțin regulile de business, iar repository-urile vorbesc cu baza de date. DTO-urile sunt mapate cu MapStruct, iar tot ce intră e validat cu Bean Validation înainte să fie salvat.

Regulile de programare stau în backend, nu doar în browser. Înainte să salveze o programare, sistemul verifică dacă frizerul nu are deja o programare care se suprapune. Programările anulate nu contează. Dacă clientul alege „Hvem som helst”, backendul caută un frizer activ care face serviciul și e liber în acel interval. Calendarul citește orele ocupate dintr-un endpoint separat și le afișează ca indisponibile.

Emailurile se trimit cu Spring Mail și șabloane Thymeleaf: confirmare pentru client, mesaj la schimbarea statusului și notificare pentru salon.

Bază de date: PostgreSQL, Hibernate și Liquibase

Patru entități JPA descriu salonul: Tjeneste (serviciu), Frisor (frizer), Fravaer (absență) și Bestilling (programare). Un frizer poate face mai multe servicii (many-to-many), o programare indică un serviciu și un frizer, iar o absență aparține unui frizer. Hibernate 7 face legătura dintre obiectele Java și tabelele din PostgreSQL, iar Ehcache e cache de nivel doi pentru datele citite des.

Schema bazei de date nu se modifică niciodată de mână. Fiecare modificare e un changelog Liquibase versionat în Git, aplicat automat la pornirea aplicației. Local folosim H2, testele rulează pe un PostgreSQL real în Docker prin Testcontainers, iar producția folosește PostgreSQL pe Railway.

Securitate și API

Panoul de administrare e protejat cu Spring Security și tokenuri JWT, cu roluri separate de administrator și utilizator. Fără autentificare poți face doar ce îi trebuie unui client: să citești serviciile și frizerii activi, să vezi orele ocupate și să trimiți o programare. Restul cere autentificare, iar API-ul de administrare cere rolul de administrator.

API-ul e documentat cu OpenAPI (springdoc). Spring Boot Actuator oferă health check și metrici în format Prometheus, ca să vezi oricând că aplicația e în viață.

Frontend: React 19 și TypeScript

Frontendul e scris în TypeScript cu React 19, React Router 7 și Redux Toolkit și e împachetat cu Webpack 5. Formularele folosesc react-hook-form, cu validare pe fiecare câmp, apelurile către API trec prin Axios, iar datele calendaristice sunt gestionate cu Day.js.

Partea publică folosește Tailwind CSS, cu un design întunecat propriu, „amber glass”: panouri de sticlă, pete de lumină caldă, granulație de film și animații discrete. Animațiile se opresc când utilizatorul a ales mișcare redusă în sistemul de operare. Panoul de administrare folosește Bootstrap 5.

Maven construiește totul într-un singur fișier

O singură comandă Maven construiește toată soluția. Maven Wrapper fixează versiunea de Maven, iar frontend-maven-plugin instalează Node 24 și construiește aplicația React în cadrul build-ului Maven. Rezultatul e un singur JAR executabil, cu backend și frontend.

Dockerfile-ul construiește în două etape. O imagine cu JDK compilează și împachetează aplicația, iar imaginea finală conține doar runtime-ul Java 21 și JAR-ul. Imaginea e mai mică și sunt mai puține lucruri care se pot strica.

Teste și CI

Fiecare pull request trece prin GitHub Actions înainte de merge: ESLint, verificare TypeScript, teste Jest, build de producție pentru frontend, verificarea formatării Java cu Prettier și Spotless și, la final, Maven verify cu teste unitare și de integrare pe PostgreSQL. Totul durează cam cinci minute.

În total sunt peste 500 de teste automate: 318 în Java și 219 în frontend. Pe lângă ele există teste end-to-end în Cypress și teste de arhitectură în ArchUnit, care verifică respectarea straturilor.

Hosting pe Railway

Aplicația rulează ca un container Docker pe Railway, în UE, cu PostgreSQL ca serviciu separat. Când se schimbă main, Railway construiește o imagine nouă și îi trimite trafic abia după ce răspunde /management/health. Dacă aplicația cade, repornește singură, iar o versiune anterioară poate fi restaurată.

Fluxul de lucru e același pentru fiecare modificare: branch separat, pull request, CI verde, merge în develop și apoi un release în main, care se publică automat.

„Nu se poate face asta în cinci minute cu vibe coding?”

Ba sigur că da. Scrii „fă-mi o aplicație de programări pentru frizerie”, apeși Enter și după cinci minute ai ceva care arată ca o aplicație de programări. Apoi vine sâmbătă dimineața: doi clienți la ușă cu aceeași oră, nimeni nu știe unde s-au salvat programările, iar aplicația merge doar pe laptopul programatorului.

Nordic Cuts a durat ceva mai mult de cinci minute: 88 de commituri, 39 de pull requesturi și peste 500 de teste automate din ianuarie 2026. Singurul lucru care durează cu adevărat cinci minute e rularea CI. Și noi folosim AI în fiecare zi și ne scutește de multe ore, dar regulile din backend, testele și operarea țin programările în funcțiune într-o sâmbătă cu salonul plin.

Încearcă demo-ul și vorbim

Demo-ul este deschis. Testează fluxul de programare și vezi cum ar fi pentru un client. Dacă ai întrebări, discutăm și vedem ce se potrivește salonului tău.

Te întrebi dacă o aplicație proprie merită pentru salonul tău? Citește ghidul Sistem de programări pentru salon: aplicație proprie sau soluție gata făcută?.