Am pornit proiectul acum 14 luni din frustrare pură cu softurile mari de facturare din România, mult prea încărcate cu module de gestiune de care un PFA n-are nevoie. Azi am 89 de clienți activi pe abonament recurent (cam 1.100€ MRR) și țin toată infrastructura sub 40€ pe lună. Vă las mai jos cifrele reale, deciziile tehnice și compromisurile făcute pe parcurs.
Stack-ul tehnic: fără Kubernetes, fără serverless scump
Când începi un produs pe cont propriu, cea mai mare greșeală e să proiectezi pentru 100.000 de utilizatori când tu nu ai nici 10. Am ales un stack banal, pe care îl stăpânesc bine și care nu-mi mănâncă bani degeaba când dorm.
Backend-ul e scris în Node.js cu Fastify și TypeScript, legat la o bază de date PostgreSQL. Rulează totul într-un Docker Compose pe un singur VPS de la Hetzner (CPX21: 3 vCPU, 4GB RAM, costă cam 12,50€/lună).
Frontend-ul este un SPA în SvelteKit, servit gratuit prin Cloudflare Pages. Caching-ul pe asset-uri statice e aproape de 98%, așa că traficul către VPS vine strict din apelurile de API.
Pentru generarea de PDF-uri am dat rapid cu capul de pragul de sus. La început porneam un Chromium headless (Puppeteer) direct pe instanța principală. Când 4 utilizatori descărcau rapoarte simultan la sfârșit de lună, procesorul sărea în 100% și API-ul dădea timeout. Am izolat Puppeteer pe un al doilea VPS minuscul (CX11 la Hetzner, încă 4€/lună), transformat într-un worker intern care procesează joburi dintr-o coadă Redis locală.
Costurile reale la virgulă
Factura mea lunară de infrastructură arată cam așa:
- VPS principal (Hetzner CPX21 - API + DB + Redis): 12,50€
- VPS worker PDF (Hetzner CX11): 4,10€
- Cloudflare: 0€ (free tier e arhisuficient pentru volumul ăsta)
- Backblaze B2 (backup baze de date criptate + stocare XML-uri): ~1,50€
- Resend (tranzacționale: resetări de parolă, notificări): 0€ (sub limita de 3.000 mailuri/lună)
- Domeniu .ro: amortizat la ~1€/lună
Total infra curată: vreo 19€ pe lună. Dacă adaug comisioanele Stripe și procesatorul local de plăți (care iau undeva la 2-3% din fiecare tranzacție), costul operațional total nu depășește 45€ într-o lună aglomerată.
Ce trade-off-uri am acceptat și ce doare
Partea mișto e profitabilitatea imediată. Partea mai puțin plăcută ține de mentenanță și responsabilitate.
Nu folosesc Managed Database de la AWS sau DigitalOcean pentru că aș fi sărit direct la minimum 35-50€/lună doar pentru Postgres. Trade-off-ul? Dacă pică discul sau crapă baza la 3 dimineața, mă trezesc eu să fac restore din dump-ul de pe Backblaze. Am un cronjob care face pg_dump, criptează arhiva și o trimite offsite la fiecare 6 ore, plus WAL archiving activ. Pentru un SaaS de facturare unde clienții emit acte ziua, pierderea a max 15 minute de date e un risc asumat contractual prin SLA.
A doua mare durere a fost e-Factura. API-ul ANAF este instabil, dă erori 500 aleatorii și returnează răspunsuri complet diferite de la o săptămână la alta. A trebuit să rescriu complet logica de trimitere cu exponential backoff și stări intermediare în DB, altfel userii primeau impresia că aplicația mea nu funcționează când de fapt pica serverul de la Finanțe.
La 89 de abonați, un sistem simplu bate oricând o arhitectură distribuită sofisticată. Voi până la ce nivel de venit sau utilizatori ați ținut o bază de date self-hosted pe VPS înainte să treceți la managed?