Sari la conținut
BINE GÂNDIT

Produs propriu, facturare electronică, ro e-factura

Emitera: aplicație SaaS de facturare cu integrare RO e-Factura

Un site se judecă după câte telefoane produce. O aplicație, după cât din munca unui om preia.

Schelet HTML livrat
1,6 KB
4,5 KB necomprimat
Cod la prima vizită
≈202 KB
comprimat; 733 KB necomprimat
Răspuns API fără sesiune
401
pe /invoices, /clients, /reports
Mod de livrare
no-store
scheletul nu rămâne blocat în cache

Măsurat în 6 august 2026. Metoda este descrisă mai jos.

Ce am făcut

  • Produs și arhitectură
  • Interfață
  • API și integrare ANAF
  • Securitate
  • Infrastructură comercială

Contextul

Emitera e produsul nostru, nu o lucrare plătită de un client. O spunem de la început, ca să nu existe confuzie: tot ce urmează e despre ce am construit pentru noi, nu despre un rezultat livrat altcuiva.

E o platformă de facturare pentru firme din România, cu facturi, clienți, cheltuieli și rapoarte financiare într-un singur produs, plus comunicare OAuth cu sistemul RO e-Factura al ANAF. Nișa e dictată de lege: firmele nu aleg dacă trimit facturile electronic, ci doar cu ce unealtă. O eroare de integrare nu e un bug de interfață, e o factură care nu ajunge la ANAF.

Ce a dictat forma produsului

  1. Integrarea cu ANAF nu iartă aproximări

    RO e-Factura are format impus, autentificare OAuth și erori pe care utilizatorul final nu are cum să le descifreze. Aplicația gestionează tokenuri, retrimiteri și stări intermediare, iar utilizatorul înțelege în ce stare e factura fără documentație tehnică.

  2. Datele financiare cer alt nivel de securitate

    Într-un site de prezentare, cel mai rău lucru e un formular de spam. Aici sunt facturi, coduri fiscale și date de firmă. Nivelul de protecție se decide la început, în arhitectură, nu la final, cu un plugin.

  3. Un produs cu abonament are nevoie de infrastructură de produs

    Pagini legale, politică de anulare și rambursare, termeni, cookies, contact. Fără ele nu poți încasa abonamente și nu treci de verificările procesatorilor de plăți.

Deciziile luate

  1. Aplicație, nu site, și asumat ca atare

    Browserul primește un schelet HTML de 4,5 KB și construiește interfața din JavaScript: alegerea corectă pentru o unealtă în care omul stă și lucrează. Costul e real și îl spunem pe față: pagina publică nu are conținut pentru motoarele de căutare. Pentru un produs vândut prin campanii și recomandări, e un compromis acceptat.

  2. API-ul e separat și închis implicit

    Orice cerere către rutele de date primește 401 fără sesiune validă; se poate verifica din exterior. Separarea permite ca mâine să existe o aplicație de mobil peste același API, fără rescrierea logicii.

  3. Politici de securitate scrise, nu presupuse

    Content-Security-Policy cu surse enumerate una câte una și hash-uri pentru scripturile inline, HSTS pe un an cu subdomenii, Cross-Origin-Opener-Policy, Referrer-Policy „no-referrer”, permisiuni de cameră și microfon revocate explicit. Aplicația refuză să fie încărcată în iframe de pe alt domeniu.

  4. Autentificare cu Google, pe lângă cea clasică

    Un cont nou se face în câteva secunde, fără încă o parolă. La un produs cu abonament, frecarea de la înregistrare e primul loc unde pierzi utilizatori.

  5. Scheletul nu se cache-uiește niciodată

    Scheletul e servit cu „no-store”, iar fișierele de cod au hash în nume. La fiecare versiune nouă utilizatorii primesc imediat codul nou, fără să rămână blocați într-o versiune veche din cache.

  6. Partea comercială, tratată ca parte din produs

    Sitemap-ul public are 6 rute, patru dintre ele legale: termeni, confidențialitate, cookies, anulare și rambursare. Un SaaS pe abonament fără paginile astea nu e un SaaS, e un demo.

Ce s-a livrat

  • Rute pentru autentificare, înregistrare, panou, facturi, clienți, cheltuieli, rapoarte și setări; frontend Angular, API separat care răspunde 401 fără sesiune
  • Comunicare OAuth cu RO e-Factura (ANAF); autentificare cu Google, singura sursă externă de script permisă; WebSocket permis pentru actualizări în timp real
  • Content-Security-Policy cu surse enumerate și hash-uri, HSTS 1 an cu subdomenii, HTTP/2 cu HTTP/3 anunțat, COOP, Referrer-Policy, X-Content-Type-Options, Permissions-Policy
  • Date structurate SoftwareApplication cu prețul afișat, manifest PWA, set complet de favicon-uri, sitemap cu 6 rute și robots.txt

Cum am măsurat

6 august 2026

Aici lipsește intenționat timpul de răspuns: aplicația e găzduită pe același server de pe care rulăm măsurătorile, așa că orice valoare ar fi spectaculoasă și fără sens. Ce vezi sunt mărimi și coduri de răspuns, identice indiferent de unde măsori. Pentru timpi reali, rulează PageSpeed Insights pe domeniu.

Pagina, cap-coadă

Derulează captura sau deschide site-ul.

Captura e făcută pe site-ul live, la 1440 și 412 px lățime. Ține cursorul pe ramă ca să vezi pagina întreagă.

Emitera: pagina principală, pe desktop
Emitera: pagina principală, pe telefon

Pasul următor

Ce ar trebui să facă site-ul tău ca să merite investiția?

Sună-ne și spune-ne cum ajung clienții astăzi la tine. Îți răspundem cu traseul pe care l-am construi, ce am măsura și un interval de preț.

Răspuns în aceeași zi lucrătoare, direct de la Adrian — omul care îți va construi sistemul.

Începe diagnosticul

Două minute acum. Răspuns concret în aceeași zi lucrătoare.

Lasă numărul dacă preferi o discuție scurtă. Emailul este suficient dacă nu poți vorbi.

Îți răspunde Adrian, nu un call-center. Fără newsletter.