Sari la conținut

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.

  1. 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ă.

    TehnologiiGo, PHP, Symfony, Python. REST și gRPC, contracte protobuf, versionare, documentație generată din cod.

  2. 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ță.

    TehnologiiKeycloak, RBAC, OIDC cu PKCE, manager de secrete, anonimizare inclusiv pe backup, audit de vulnerabilități.

  3. 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.

    TehnologiiPostgreSQL, MySQL, Redis, Elasticsearch, Neo4j. Modelare, migrări, indexare, backup și proceduri de restaurare.

  4. 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ă.

    TehnologiiDocker, Kubernetes, Hetzner, AWS, Cloudflare, Prometheus și Grafana.

Ș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.

Autentificare

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.

BrowserStrat intermediarServer de identitateAPI + bază de date01 cerere de autentificare02 redirect cu provocare PKCE03 utilizatorul își introduce parola04 redirect înapoi, cu un cod de unică folosință05 codul plus secretul inițial, schimbate pe tokenuri06 doar un cookie httpOnly07 apelurile aplicației, cu cookie-ul08 tokenul atașat pe servernu există rută directă

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.

Infrastructură

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.

PublicInternetfiltrare și protecție la margineLoad balancersingura adresă publică · 80/443Rețea privatăfără adrese publiceCluster de aplicațiiun spațiu separat pentru fiecare proiectnodcontrolnodcontrolnodcontrolnodlucruCluster de baze de datereplicare și restaurare automatenoddatenoddatenoddatedoar privatAdministrareexclusiv prin VPNorice acces public direct este blocat

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ă