eduardweb.
Prezentări & ShowcaseIntermediar#freelancing#showcase#node-js#saas#sqlite

Cum am ridicat un SaaS de facturare pentru freelanceri RO: Arhitectura și costurile pentru 89 de clienți

De Adrian Voicu, 8 iul. 2026 · 14 vizualizări · 2 like-uri

Postat 8 iul. 2026

Am vrut să văd dacă se poate face un micro-SaaS profitabil pentru piața din România fără să arunc cu bani în AWS sau bugete mari de marketing. Am construit o aplicație simplă de facturare adaptată pentru freelanceri și SRL-uri mici, iar în prezent avem 89 de utilizatori plătitori activi. În postarea asta îți arăt exact arhitectura din spate și de ce mă costă mai puțin de o ieșire în oraș pe lună.

Monolitul plictisitor care își face treaba

Folosesc un singur VPS de vreo 6 dolari de la Hetzner. Stack-ul este pe cât de clasic se poate: Node.js cu Express pe backend, un pic de React pe frontend (servit direct ca fișiere statice de Express) și SQLite ca bază de date.

De ce SQLite? Pentru că la 89 de useri care generează maximum 20 de facturi pe lună fiecare, baza de date e microscopică. Totul stă în memorie, query-urile zboară în sub-milisecunde și nu am de administrat un server separat de database.

Trade-off-ul e evident. Dacă pică VPS-ul sau se corupe fișierul .db, am încurcat-o grav. Ca să dorm liniștit, am scris un script simplu care face backup la baza de date din oră în oră și o urcă securizat într-un bucket de Cloudflare R2. Dacă serverul ia foc, pot ridica o instanță nouă în 10 minute cu tot cu datele salvate.

Coșmarul numit e-Factura și ANAF

Aici am pierdut cei mai mulți peri albi. API-ul ANAF este probabil cel mai instabil sistem cu care am lucrat în 12 ani de programare. Request-uri care dau timeout după 60 de secunde, erori 500 random și o documentație care pare tradusă cu Google Translate din anii 2000.

Inițial, am vrut să fac sync-ul în timp real când dădea userul click. Mare greșeală. Timpii de așteptare blocau serverul. Am rezolvat problema cu o coadă de mesaje locală (folosesc BullMQ cu o instanță mică de Redis pe același VPS). Când userul trimite o factură în e-Factura, job-ul intră în coadă. Dacă ANAF e jos (ceea ce se întâmplă des marțea și joia), workerul face retry automat cu exponential backoff.

Costurile lunare la bani mărunți

Iată cum se împart costurile mele fixe în fiecare lună:

  • VPS Hetzner (2 GB RAM, 1 vCPU): €5.50 (~$6)
  • Cloudflare R2 (pentru PDF-uri și backup-uri de DB): $0 (încă mă încadrez în free tier)
  • Postmark (trimitere emailuri și facturi către clienți): $10
  • Plăți (Stripe): Comision de ~2.9% + €0.25 per tranzacție (nu e cost fix, dar se adună)

Totalul costurilor fixe este de aproximativ 16 dolari pe lună. La 89 de utilizatori care plătesc în medie 25 de lei pe lună (~$5.5), veniturile brute sunt undeva la $490. Nu te îmbogățești din asta, dar e un venit pasiv excelent pentru un proiect dezvoltat cap-coadă în trei weekend-uri.

Sistemul merge brici pentru volumul ăsta. Dacă trec de 500 de useri, probabil va trebui să migrez pe PostgreSQL ca să pot scala aplicația pe mai multe noduri fără să-mi fac griji de lock-ul pe fișierul SQLite.

Cum gestionați voi integrările cu ANAF-ul? Ați găsit vreo metodă inteligentă de a face re-autorizarea token-ului OAuth de la certSIGN fără să fie nevoie de intervenție manuală cu token-ul fizic la fiecare 90 de zile?

Răspunsuri 0

Se încarcă răspunsurile…

Loghează-te pentru a răspunde

Doar membrii comunității pot lăsa comentarii.