Produs propriu, nutriție și rețete cu ai
GenFitPlan: produs SaaS cu AI, cu date de nutriție reale
Diferența dintre „am pus un chatbot” și un produs cu AI e răspunsul corect când în frigider sunt trei ouă și un borcan de muștar.


- 37–81 ms
- 13,6 KB
- pre-randat, din cache
- 1 H1, 10 H2, 8 H3
Ce am făcut
- Produs și arhitectură
- Integrare model de limbaj
- Interfață
- Securitate și monitorizare
Contextul
GenFitPlan e produsul nostru, nu o lucrare pentru un client. E în limba engleză și se adresează unei piețe internaționale. Îl punem în portofoliu pentru un singur motiv: arată ce se poate construi când proiectul nu e un site, ci un produs cu logică proprie.
Ideea e simplă de povestit și grea de făcut: aplicația știe ce ai în frigider, știe ce obiective de nutriție ai și generează rețete care se încadrează în amândouă. 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ă.
Ce a dictat forma produsului
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, arhitectura trebuie să limiteze, să pună în cache și să separe ce se generează de ce se servește din date existente.
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 trebuie să vină dintr-o bază de date reală, altfel produsul minte utilizatorul despre ce mănâncă.
Prezentarea ș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.
Deciziile luate
Prezentarea e pre-randată, aplicația nu
Pagina publică e generată la build și servită din cache: 13,6 KB de HTML comprimat, complet, cu tot textul în el. Rutele de aplicație rămân dinamice. Aceeași aplicație, două regimuri, pentru două scopuri.
Macronutrienții vin de la USDA, nu de la model
Politica de securitate enumeră explicit sursele externe permise, printre ele API-ul FoodData Central al Departamentului american al Agriculturii. Modelul compune rețeta; cifrele vin dintr-o bază oficială. O separare pe care o poți verifica din antetele site-ului.
Structura urmează întrebările, nu funcțiile
Zece secțiuni în ordinea deciziei: ce face, cum funcționează în trei pași, cât costă, întrebări frecvente. Titlul descrie rezultatul, nu tehnologia. Testimonialele de pe pagină sunt exemplu de așezare, nu clienți reali, și nu le numărăm ca dovadă.
Erorile se raportează singure
Produsul trimite erorile într-un serviciu de monitorizare, pe regiunea europeană. Într-o aplicație cu AI, unde răspunsurile diferă la fiecare rulare, un bug pe care nu îl vezi în raport e un bug pe care nu îl repari niciodată.
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 în iframe de pe alt site e interzisă. La un produs care ține jurnalul alimentar al cuiva, e minimul.
Ce s-a livrat
- Trei module conectate: inventar cu termene de expirare, generator de rețete, jurnal alimentar; plan gratuit și plan cu plată, prezentate public
- Model de limbaj pentru rețete, API-ul FoodData Central al USDA pentru nutriție, monitorizare de erori pe regiunea europeană
- Pagină publică cu 1 H1, 10 H2, 8 H3; proces în 3 pași, prețuri, întrebări frecvente; patru pagini legale
- Pagină pre-randată la build și servită din cache; HSTS pe 2 ani, X-Frame-Options DENY, X-Content-Type-Options, Content-Security-Policy cu fiecare sursă enumerată
Cum am măsurat
Măsurat cu curl, 20 de cereri către pagina principală, în două serii, de pe un server din Germania. Sunt cifre de livrare a documentului HTML, nu de randare completă în browser. Nu publicăm creșteri de trafic sau număr de cereri: nu sunt date publice, deci nu le-ai putea verifica. Dacă între timp s-au schimbat, măsoară din nou.
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ă.

