Ce fac
De la prima linie de cod până la serverul din producție.
Patru domenii care se leagă între ele: aplicația, datele din spatele ei, accesul la ele și mașinile pe care rulează. Le fac pe toate, ca să nu rămâi cu un cod pe care trebuie să găsești pe altcineva să-l pună online.
- 001
Backend și API-uri
Partea care ține produsul în viață: autentificare, comenzi, programări, integrări și fluxurile de zi cu zi. API-uri REST pentru clienții din browser și gRPC între serviciile interne, cu contracte în protobuf, ca o schimbare de câmp să strice build-ul, nu producția. Scriu întâi simplu și pe responsabilități clare - KISS și SOLID - și modelez complexitatea pe domeniu peste o fundație zdravănă.
- 002
Securitate și GDPR
Acces pe roluri prin Keycloak, cu autentificarea izolată într-un strat separat pe care browserul nu îl poate ocoli. Caut vulnerabilități în dependențe și le repar înainte să conteze, iar parolele și cheile stau într-un manager de secrete, nu în fișiere uitate pe server. Toată dezvoltarea și testarea se fac pe o copie anonimizată a bazei, iar procedura de anonimizare curăță inclusiv copiile de siguranță.
- 003
Date și căutare
Modele care rezistă la realitate și migrări care nu pierd rânduri. Indexez pe baza interogărilor care se execută efectiv, nu pe cele pe care le anticipam la început. Backup din minut în minut pentru ultima oră, din oră în oră pentru ultima zi, zilnic pentru ultima lună, lunar pentru ultimul an și anual după aceea - cu restaurări disponibile la cerere și verificate în fiecare noapte.
- 004
Cloud și monitorizare
Fac eu tot deployment-ul. Doar sistemele de tip load balancer au adresă publică; clusterul de aplicații și cel de baze de date au numai adrese private și au comunicarea publică blocată, iar administrarea se face exclusiv prin VPN. Ambele clustere rulează pe mai multe noduri, așa că dacă pică unul aplicația rămâne în picioare pe celelalte. Nodurile se află în centre de date din țări diferite, pentru redundanță crescută.
Și, când proiectul o cere
Interfețe web
Aproape fiecare proiect are una: React 19 cu TanStack Router și Query, TypeScript și Tailwind, cu tipurile venind direct din contractele backendului, ca un câmp redenumit în bază să nu ajungă o pagină albă în producție.
Aplicații mobile
Doar unde chiar se folosesc pe telefon. Încep cu o aplicație web instalabilă, fără magazin de aplicații și fără actualizări de așteptat, și trec la cod nativ când o cere hardware-ul: GPS în fundal, cameră sau notificări push care trebuie să sune și cu ecranul stins. Aplicația șoferilor din Get Home Safe este nativă Android, construită în Flutter, exact pentru asta.
Programare muzicală
De aici am pornit: audio în timp real în C++ cu JUCE, Max/MSP, Pure Data, SuperCollider și hardware Eurorack. Când bugetul de latență se măsoară în eșantioane, înveți obiceiuri care rămân.
Cum arată pe dinăuntru
Două decizii de arhitectură, desenate.
Sunt lucrurile pe care le explic oricum la prima discuție. Mai simplu desenate decât descrise.
Browserul nu primește niciodată un token
Autentificarea trece printr-un server de identitate separat, iar schimbul de coduri pe tokenuri se face pe server. În browser ajunge doar un cookie httpOnly, pe care JavaScript-ul din pagină nu îl poate citi.
Codul de unică folosință nu poate fi folosit de altcineva chiar dacă e interceptat: schimbul cere și secretul generat la pasul unu, care nu părăsește niciodată serverul. Tokenurile se reînnoiesc tot pe server, fără ca utilizatorul să observe, iar rolurile din token decid ce are voie să facă fiecare.
O singură adresă publică, restul închis
Traficul intră printr-un load balancer și atât. Clusterul de aplicații și cel de baze de date au numai adrese private, iar spre ele comunicarea publică este blocată complet.
Fiecare cluster rulează pe mai multe noduri, deci un nod căzut nu oprește aplicația. Traficul între aplicații și baze de date nu iese niciodată în internet, iar administrarea nu are nicio ușă publică: se intră doar prin VPN.
Pasul următor
Hai să vedem dacă se potrivește.
O discuție e de obicei de ajuns ca să ne dăm seama amândoi.
Cere o ofertă