🏠HOA Manager
← Toate articolele
Update major16 iunie 2026• 12 minute citire

HOA Manager 2.0 — ce s-a schimbat și de ce contează pentru asociația ta

Versiunea 2.0 nu e doar o listă de feature-uri noi — e răspunsul la frustrările pe care ni le-au transmis administratorii și președinții cu care am lucrat în primele luni. Marketplace cu furnizori verificați. Vot ponderat corect conform Legii 196. Aplicație mobilă cu vot offline. Onboarding ghidat de la zero. Plus un audit de securitate care a scos la iveală — și a reparat — 24 de probleme înainte ca prima asociație reală să le întâlnească.

Mai jos e lista completă cu explicații. Sări direct la secțiunea care te interesează:

🛒 FUNCȚIE NOUĂ

1. Marketplace de furnizori cu cerere de ofertă (RFQ)

Problema: Acoperișul curge. Trebuie reparat. Ce faci? Suni 2 cunoscuți, primești un număr de telefon scris pe o servețică, faci o căutare pe Google, găsești 5 firme, suni la 3 (la celelalte 2 nu răspunde nimeni), aștepți să-ți trimită ofertele pe email — una pe email, una pe WhatsApp, una vine pe hârtie când vine inginerul să măsoare. Le pui pe masă la CEX, președintele se uită confuz la 3 formate diferite, nu sunt comparabile, iar la întrebarea cenzorului „de ce firma X și nu firma Y?" răspunsul e „că ne-a recomandat-o vecinul de la 2". Iar peste 2 ani când vine controlul ANAF, dosarul e plin de print-uri WhatsApp.

Soluția 2.0: Marketplace-ul HOA Manager e un catalog de furnizori verificați (CUI valid, IBAN, categorii de servicii, recenzii) accesibil din orice asociație. Din pagina unui proiect, apesi „Cere oferte" și alegi 3-5 furnizori. Fiecare primește email cu un link unic — completează oferta într-un formular standard (preț, termen execuție, garanție, condiții plată). Tu vezi toate ofertele într-un tabel comparabil, exportabil ca PDF pentru procesul verbal.

⛔ Înainte
  • Telefoane, WhatsApp, hârtii
  • Oferte în 3 formate diferite
  • Comparație din cap, fără documentație
  • „Vecinul a recomandat firma X"
  • Dosar fizic pentru control ANAF
✓ Cu HOA Manager 2.0
  • 3-5 furnizori contactați în 1 minut
  • Oferte structurate, comparabile
  • Comparație side-by-side cu PDF export
  • Decizie documentată cu motivare
  • Totul digital, audit-ready

Două flow-uri pentru a aduce furnizori în catalog

Public — furnizorii deja verificați de echipa HOA Manager apar în catalogul comun. Aici ajung cu recenziile lor, evaluările, statisticile (câte asociații i-au folosit, rata de răspuns la RFQ).

Privat → Pending → Public — adăugi tu un furnizor pe care l-ai folosit (de exemplu, instalatorul cu care lucrezi de 10 ani). Inițial e vizibil doar pentru asociația ta. Opțional, îl recomanzi pentru catalogul public — echipa noastră verifică datele (CUI, IBAN, activitate) și-l publică pentru alte asociații. Așa creștem catalogul împreună, dar fără spam.

💡 Pentru proprietari: ai vizibilitate pe oferte primite la fiecare proiect. Nu mai trebuie să crezi pe cuvânt „am ales cel mai bun preț" — vezi singur cele 4 oferte cu condițiile fiecăruia.
🗳️ FUNCȚIE NOUĂ

2. Vot online ponderat pe cotă indiviză — corect, conform Legii 196

Greșeala comună: La Adunarea Generală se votează „obiecția: reparație acoperiș, cost 50.000 lei". Au votat 18 proprietari: 13 pentru, 5 împotrivă. Președintele anunță „a trecut cu 13/18 = 72%, peste pragul de 2/3". Doar că asta nu e ce spune Legea 196.

Legea 196/2018 art. 48-52 e foarte clară: pragul pentru deciziile importante (lucrări peste un prag, modificare fond, schimbare administrator) este 2/3 din cotele indivize prezente, nu 2/3 din numărul persoanelor care au votat. Diferența:

📐 Exemplu numeric concret

Bloc cu 40 apartamente, cotele indivize variază între 1,8% (garsoniere) și 3,5% (4 camere). La Adunare se prezintă proprietarii cu cote însumate de 78% (restul absenți). Pragul de 2/3 din cotele prezente = 52% din total bloc (78% × 2/3 = 52%).

Au votat „pentru" 13 proprietari, dar erau dintre cei cu apartamente mici (cote totale 31%). Au votat „împotrivă" 5 proprietari, dar erau apartamente mari (cote totale 22%). Mai era unul abținut (5%).

Conform Legii: 31% pentru < 52% prag → VOTUL NU TRECE. Chiar dacă numeric 13 vs 5 pare clar pentru. Procesul verbal cu „13/18 voturi pentru, decizie aprobată" devine atacabil în instanță.

Soluția 2.0: sistemul calculează automat tipul de vot corect:

  • Adunare Generală (AG) → vot ponderat. Fiecare „pentru/împotrivă/abținere" e ponderat cu cota indiviză a apartamentului. Sistemul afișează live: suma cotelor prezente, pragul de 2/3, statusul curent.
  • Comitet Executiv (CEX) → vot simplu. Aici Legea cere majoritate simplă din membri, deci 1 persoană = 1 vot.
  • Procesul verbal automat include: lista prezenților cu cotele lor, fiecare vot nominal (sau anonim dacă alegi „secret"), calculul transparent. Semnătură electronică pentru președinte și cenzor. Auditabil 100%.
📱 FUNCȚIE NOUĂ

3. Aplicație mobilă PWA cu vot offline

Problema: Adunarea Generală e în sala de sport a școlii din cartier, semnal mobil slab. Proprietarii deschid HOA Manager pe telefon ca să voteze, apasă „Pentru", dar loading-ul ține 20 de secunde și pe jumătate dintre ei pică conexiunea. Voturile se pierd. Cineva zice „lăsați, votăm cu mâna pe hârtie" și toată digitalizarea capătă efectul invers.

Soluția 2.0: HOA Manager funcționează ca Progressive Web App — o categorie de aplicații web care se comportă ca native pe mobil:

Instalare în 3 secunde, fără App Store

Proprietarii nu trebuie să caute în App Store / Play Store. Deschid `hoa-manager.ro` în Safari (iPhone) sau Chrome (Android), apasă „Add to Home Screen" și primesc o iconiță pe ecran care deschide aplicația în full-screen, fără bara browser-ului. Arată și se comportă exact ca o aplicație nativă.

Vot offline cu sincronizare automată

Aici e magia: dacă semnalul pică în timpul votului la AGA, votul tău nu se pierde. E salvat local în telefon (într-o coadă IndexedDB) și trimis automat de îndată ce telefonul recapătă conexiunea. Vezi un banner discret galben „Ești offline — voturile se salvează local". Când vine internet-ul înapoi, un toast verde „✓ Votul tău offline a fost trimis cu succes".

Sub capotă, asta merge prin Service Worker + Background Sync API — exact tehnologia folosită de aplicațiile mari (Gmail, Twitter) pentru offline.

Scurtături rapide din ecranul de start

Long-press pe iconița HOA Manager pe iPhone/Android scoate 4 scurtături: Apartament, Vot, Sesizare, Plată. Click pe „Vot" și ești direct în ședința activă, fără să navighezi prin meniuri.

Touch targets corecte pentru deget

Toate butoanele, intrările, dropdown-urile sunt acum 44×44 pixeli minim (standardul Apple HIG + Material Design). Nu mai dai click pe „Anulează" când voiai „Confirmă". Testat pe iPhone Safari și Android Chrome la rezoluții mici și mari.

📅 FUNCȚIE NOUĂ

4. Onboarding ghidat în 6 pași pentru asociații cu istoric

Întrebarea care a oprit cele mai multe asociații: „OK, dar cum mut 5 ani de date din Excel-uri și caiete în platforma voastră? Nu-mi pot permite să pierd o săptămână pentru asta."

Soluția 2.0: Wizard la /dashboard/onboarding care te ghidează în 6 pași, cu strategie de „cutoff date" — pici o dată (ex. 30 iunie 2026) și totul de dinainte devine snapshot importat, totul de după managementat nativ.

  1. Locație (bloc / scară) — un formular simplu cu nume, adresă, oraș.
  2. Apartamente — CSV upload (sau paste). Header strict, preview înainte de import, eroare pe rând cu rândul greșit. Coloane: număr, tip (apartament/garaj/parcare/boxă), etaj, suprafață, cotă indiviză, date proprietar.
  3. Restanțe legacy — partea cea mai grea, deja rezolvată. Format CSV cu o linie per (apartament × lună): amount_due (cât a fost facturat), amount_paid(cât a plătit). Sistemul calculează automat restanța = due − paid, creează o datorie cu data scadenței corectă, iar penalitățile (0,2%/zi conform art. 78) se vor recalcula corect cu aging păstrat.
  4. Categorii cheltuieli — pas nou care înlocuiește o oră de muncă manuală. Vezi detalii în secțiunea 5.
  5. Solduri inițiale fonduri — câți bani sunt în fond reparații, rulment, cotizație specială la data cutoff. Setezi opening_balance și sistemul îl ia ca punct de pornire.
  6. Invitație proprietari în bulk — toate apartamentele cu owner_emailcompletat primesc email cu link unic. Fiecare își creează cont și apartamentul se atașează automat la userul lor.
💡 Idempotent înseamnă că poți relua importul dacă apare o eroare la mijloc — rândurile deja importate sunt sărite (detectate prin descriere standardizată), iar tu vezi exact ce a mers și ce nu. Fără date duplicate, fără rollback complicat, fără frică să dai retry.
📂 FUNCȚIE NOUĂ

5. Template categorii cheltuieli — un click și ai start

La onboarding, pasul „Categorii cheltuieli" are un buton „🚀 Inițializează cu template standard" care creează într-o tranzacție atomică toate categoriile tipice de HOA: apă rece, apă caldă, energie electrică spații comune, gaz, salubritate, salarii, asigurare, mentenanță, cheltuieli neprevăzute. Cu setări corecte de distribuție (per apartament, per cotă, per persoană) pe fiecare.

Înlocuiește o oră de muncă cu 1 click. Le poți edita oricând după — adăugi, ștergi, redenumești.

📨 ÎMBUNĂTĂȚIRE

6. Gestionare invitații: șterge, retrimite, repară

Lista de invitații pending acum are 2 butoane pe fiecare rând:

  • 📧 Retrimite — resetează expirarea la 7 zile și trimite email proaspăt cu același link. Util când proprietarul l-a pierdut sau l-ai introdus greșit.
  • 🗑 Șterge — pentru cazuri când invitația a fost emisă greșit. Link-ul vechi nu mai funcționează imediat.

Plus: bug major la transferul de proprietate, rezolvat

Anterior, butonul „Detașează proprietar" curăța doar numele, telefonul și email-ul din apartament — dar nu curăța referința la userul vechi (owner_user_id). Rezultatul: apartamentul părea „fără proprietar" în UI, dar la momentul invitării unui nou proprietar, sistemul îl filtra ca „ocupat". Acum se curăță complet, iar apartamentul devine disponibil pentru invitație nou proprietar fără reziduuri.

🔒 AUDIT SECURITATE

8. Audit complet de securitate: 24 de probleme rezolvate

Înainte de a primi prima asociație reală în producție, am rulat un audit intern pe matricea RBAC (drepturi pe roluri), race conditions, injection, rate limiting. Rezultat: 6 probleme BLOCKER + 10 HIGH + 8 MEDIUM identificate și rezolvate. Câteva exemple:

RBAC: locații și onboarding restricționate la admin

Anterior, un proprietar care nu citea atent textul putea crea un bloc nou prin wizard-ul de onboarding (matrice RBAC dă Full pe „properties" la proprietar pentru a-și edita apartamentul, dar același flag a fost aplicat și la operațiuni de top-level). Acum operațiunile de structură (creare bloc, bulk-import apartamente) cer permisiunea settings — disponibilă doar pentru administrator, președinte, vicepreședinte.

Race condition la submiterea de oferte RFQ

Dacă doi furnizori submiteau oferte la aceeași cerere în același moment, era teoretic posibil ca al doilea să suprascrie pe primul. Acum la nivel de bază de date: UNIQUE(rfq_id) pe tabelul de quotes + SELECT FOR UPDATE în RPC + tratare grațioasă a conflictului în UI („Cererea a fost deja completată, încearcă din nou").

Rate limiting pe endpoint-uri publice

Submitarea ofertei RFQ și acceptarea invitației sunt endpoint-uri publice (fără autentificare). Acum au rate limit per IP — nu mai poate cineva să spamuieze 1000 de oferte pe un RFQ ca să-l facă inutilizabil.

Cron auth timing-safe

Cron-urile (notificări garanție, e-Factura sync, SLA escalator, plăți recurente) verifică un Bearer token. Anterior, compararea folosea === — vulnerabilă la timing attacks (un atacator poate să deducă byte cu byte token-ul corect din diferențele subtile de timp de răspuns). Acum folosește crypto.timingSafeEqual — constant-time, indiferent unde e byte-ul greșit, timpul de răspuns e identic.

🔬 De ce contează: aceste probleme nu fac diferența pentru o asociație de 10 apartamente. Dar pentru moment când platforma va găzdui 100+ asociații cu mii de proprietari și tranzacții bancare, audit-ul preventiv e diferența între „bug minor reparat în 24h" și „breach care apare în presă". Mai bine acum decât atunci.
📧 ÎMBUNĂTĂȚIRE

9. Email-uri care chiar ajung la destinatari

Un episode neplăcut pe care l-am rezolvat: contul nostru de email service (Resend) s-a confruntat cu o problemă administrativă pe domeniul hoa-manager.ro (revocare cheie DKIM unilaterală la migrarea lor pe AWS SES, fără notificare). Câteva ore am livrat invitații cu warning „Email NU a fost livrat" și un workaround manual (copy-paste link în WhatsApp).

Soluția: am mutat domeniul pe un cont nou, am recreat DNS-ul DKIM, am separat chei pentru production și dev. Email-urile pleacă acum instant, cu rate de livrare normală. Plus, am actualizat codul ca toate cele 16 endpoint-uri care trimit email să citească adresa din env variable — astfel viitoarele probleme similare nu mai necesită deploy, ci doar o schimbare de config în Vercel.

Pe scurt: orice asociație nouă care se înregistrează acum primește email-urile de invitație, notificările de plată, alertele de garanție, comunicările oficiale, fără întârzieri.

Tot ce e mai sus, plus 60 de îmbunătățiri mărunte

Demo-ul gratuit te lasă să vezi toate cele 9 funcționalități noi în acțiune: marketplace cu 8 furnizori, RFQ cu oferte mock, AGA simulat cu vot ponderat, PWA install, onboarding wizard de la zero. Fără card, fără înregistrare. 2 minute să arunci o privire.

Accesează demo →Vezi prețurile