GenFitPlan: produs SaaS cu inteligență artificială
Diferența dintre „am pus un chatbot pe site” și un produs cu AI e că al doilea trebuie să dea un răspuns corect chiar și când utilizatorul are în frigider doar trei ouă și un borcan de muștar.
Produs SaaS cu AI — produs propriu


01 /Contextul proiectului
Ce e GenFitPlan și de ce l-am construit
GenFitPlan e produsul meu, nu o lucrare pentru un client. E în limba engleză și se adresează unei piețe internaționale, nu firmelor din România — îl pun în portofoliu pentru un singur motiv: arată ce pot construi când proiectul nu e un site, ci un produs cu logică proprie.
Ideea e simplă de povestit și grea de implementat: aplicația știe ce ai în frigider, știe ce obiective de nutriție ai și generează rețete care se încadrează în amândouă. Are trei părți conectate — inventar cu termene de expirare, generator de rețete și jurnal alimentar care se completează singur când gătești o rețetă generată.
02 /Constrângeri
Ce dicta, de fapt, forma site-ului
Fiecare decizie de mai jos vine dintr-una din constrângerile astea. Fără ele, ar fi rămas doar preferințe de design.
AI-ul costă bani la fiecare cerere
Fiecare rețetă generată e un apel plătit către un model de limbaj. Într-un produs cu plan gratuit, asta înseamnă că arhitectura trebuie să limiteze, să cache-uiască și să separe clar ce se generează de ce se servește din date deja existente. Altfel produsul se scufundă în costuri exact atunci când începe să meargă.
Datele de nutriție trebuie să fie reale
Un model de limbaj inventează valori nutriționale cu aceeași convingere cu care le și nimerește. Macronutrienții nu pot veni din text generat; trebuie să vină dintr-o bază de date reală, altfel produsul e o jucărie care minte utilizatorul despre ce mănâncă.
Pagina de prezentare și aplicația au nevoi opuse
Prezentarea trebuie să fie instant și indexabilă. Aplicația din spatele autentificării trebuie să fie interactivă și dinamică. Rezolvate la fel, una dintre ele iese prost.
03 /Abordarea
Deciziile luate și motivul din spatele fiecăreia
Un site nu e o listă de secțiuni. E o serie de decizii care fie duc vizitatorul la contact, fie îl pierd pe drum.
- 01
Prezentarea e pre-randată, aplicația nu
Pagina publică e generată la build și servită din cache — serverul confirmă asta prin antetele de pre-randare și prin cache-ul care raportează „HIT”. Rezultat: 13,6 KB de HTML comprimat, complet, cu tot textul și structura în el, livrat în sub 0,1 secunde. Rutele de aplicație, în schimb, rămân dinamice. Aceeași aplicație, două regimuri, pentru că au două scopuri diferite.
- 02
Macronutrienții vin de la USDA, nu de la model
Politica de securitate a paginii enumeră explicit sursele externe permise, iar printre ele e API-ul FoodData Central al Departamentului american al Agriculturii. Modelul de limbaj compune rețeta; cifrele de nutriție vin dintr-o bază de date oficială. E o separare de responsabilități pe care o poți verifica din antetele site-ului, fără să ai acces la cod.
- 03
Structura paginii urmează întrebările, nu funcțiile
Zece secțiuni, în ordinea în care se formează decizia: ce face, cum funcționează în trei pași, cât costă, întrebări frecvente. Titlul nu descrie tehnologia, ci rezultatul — „mănâncă ce ai deja, atinge-ți obiectivele”. Nimeni nu cumpără „generare de rețete cu AI”; oamenii cumpără să nu mai comande mâncare la ora opt seara. Pagina are și o secțiune de testimoniale, pe care nu o trec la capitolul dovezi: e un produs lansat recent, textele de acolo sunt exemplu de așezare în pagină, nu clienți reali. Pe site-ul ăsta nu număr ca dovadă ceva ce nu pot verifica — nici când e produsul meu.
- 04
Erorile se raportează singure
Produsul trimite erorile într-un serviciu de monitorizare, pe regiunea europeană. Într-o aplicație cu AI, unde răspunsurile sunt diferite la fiecare rulare, un bug pe care nu îl vezi în raport e un bug pe care nu îl repari niciodată — utilizatorul nu îți scrie, pur și simplu pleacă.
- 05
Sursele externe sunt enumerate una câte una
Politica de securitate nu spune „permite tot”. Enumeră fiecare domeniu care are voie să ruleze cod, să deschidă conexiuni sau să livreze imagini, iar încărcarea produsului în iframe de pe alt site e interzisă complet. La un produs care ține jurnalul alimentar al cuiva, adică date de sănătate, asta e minimul.
04 /Ce s-a livrat
Inventarul paginii live, nu o listă de promisiuni
Tot ce urmează există acum pe genfitplan.com și se poate verifica deschizând site-ul sau sursa paginii.
Produsul
- Trei module conectate: inventar cu termene de expirare, generator de rețete, jurnal alimentar
- Rute de aplicație pentru inventar, rețete, jurnal, plan premium și suport
- Plan gratuit și plan cu plată, prezentate public pe pagina principală
- Patru pagini legale: termeni, confidențialitate, cookies, GDPR
Integrări
- Model de limbaj pentru generarea rețetelor
- API-ul FoodData Central al USDA pentru date de nutriție
- Bibliotecă de imagini externă pentru fotografiile din interfață
- Monitorizare de erori pe regiunea europeană
Structura paginii publice
- Ierarhie de titluri: 1 × H1, 10 × H2, 8 × H3
- Proces explicat în 3 pași, secțiune de prețuri și întrebări frecvente
- Formular de abonare la newsletter
- 12 destinații interne distincte — module, autentificare și pagini legale — plus 8 ancore în pagină
Livrare și securitate
- Pagină pre-randată la build și servită din cache (antetele de pre-randare și cache: HIT)
- 13,6 KB HTML comprimat, 82 KB necomprimat
- HSTS pe 2 ani, X-Frame-Options: DENY, X-Content-Type-Options
- Content-Security-Policy cu fiecare sursă externă enumerată explicit
05 /Fapte măsurate
Cifre de pe site-ul live, cu metoda alături
Nu scriu creșteri de trafic sau număr de lead-uri: nu sunt date publice, deci nu le poți verifica. Astea se pot verifica, iar dacă între timp s-au schimbat, măsoară din nou.
Timp până la primul byte
37–81 ms
20 de cereri, în două serii
Document HTML livrat complet
0,04–0,08 s
HTML transferat, comprimat
13,6 KB
HTML necomprimat
82 KB
Mod de livrare
pre-randat, din cache
antet de pre-randare · cache: HIT
Structura paginii
1 H1 · 10 H2 · 8 H3
Cum am măsurat · 6 august 2026
Măsurat cu curl, 20 de cereri către pagina principală, în două serii separate, de pe un server din Germania. Sunt cifre de livrare a documentului HTML, nu de randare completă în browser. Pentru partea de browser, deschide raportul PageSpeed de mai jos: rulează pe infrastructura Google, nu pe a mea.
Proiectul de mai sus e o singură formă de a rezolva problema. Dacă ai nevoie de un site de prezentare pentru firma ta, de un magazin online din care chiar se cumpără sau de o aplicație web care să preia o parte din munca zilnică, pe fiecare pagină scrie ce include, cum se lucrează și de la ce buget pornește.
Următorul pas
Ai o idee de produs care are nevoie de mai mult decât un site?
Spune-mi ce vrei să facă produsul și pentru cine. Îți răspund cu o direcție tehnică, cu ce s-ar construi întâi și cu un interval de preț, fără obligații.
- Răspuns în aceeași zi lucrătoare, direct de la cel care construiește
- O direcție concretă + interval de preț, nu un „vă contactăm noi”
- Fără obligații și fără insistențe după