Skip to content

Proiecte/Rhovie

Rhovie

O aplicație de îngrijire a pielii cu AI. O scanare a feței îți citește pielea după textură, hidratare, riduri și pigmentare, iar fiecare scanare se salvează, așa că progresul se vede în loc să fie presupus.

ROL
Dezvoltare
AN
2025–2026
PLATFORMĂ
iOS
STARE
Publicată în App Store
Rhovie — Scanarea, blocată până când lumina și încadrarea sunt bune

Scanarea, blocată până când lumina și încadrarea sunt bune

01 / 07

Screen 1 of 7: Scanarea, blocată până când lumina și încadrarea sunt bune

Problema

Îngrijirea pielii se face pe ghicite. Cumperi ceva, îl folosești săptămâni la rând și nu afli niciodată dacă a avut vreun efect.

Rhovie începe cu o scanare a feței care citește pielea pe patru axe, estimează tipul de piele și construiește o rutină de dimineață și una de seară în jurul produselor pe care le ai deja. Fiecare scanare se salvează cu imaginea ei, cu scorurile ei și cu condițiile în care a fost făcută, așa că a doua scanare e cea care îți spune cu adevărat ceva.

Designul de produs și de interfață e al lui Artur Moldovanu, prietenul și partenerul meu de business. Eu am construit produsul: fluxul de scanare, backendul pe Firebase, modelul de cont care trece din anonim în permanent, serviciul de analiză de pe Cloud Run, procesul de lansare și publicarea în magazin.

Cea mai grea constrângere a fost onestitatea. Ar fi fost ușor să întorc un număr sigur pe el din orice poză. Să nu întorci nimic și să explici de ce s-a dovedit a fi exact lucrul care îi face pe oameni să aibă încredere în tot restul.

Rezultatul

Publicată în App Store și încă primește actualizări. Designul interfeței e al lui Artur Moldovanu; tot ce rulează sub el e al meu.

STARE
Publicată în App Store
PLATFORMĂ
iOS
PUBLICATĂ DIN
2025
Produsul

Trei ecrane îl duc.Un singur dispozitiv, trei stări.

Rhovie — state 3

STAREA 01 / 03

Scanarea

Camera nu te lasă să irosești o scanare. O singură față, încadrată destul de mare, ținută aproape drept și luminată fără reflexii sau neclaritate: toate verificate înainte ca declanșatorul să fie activat. Dacă ceva nu e bine, aplicația îți spune care dintre cele douăsprezece verificări a picat, în loc să întoarcă un număr sigur pe el dintr-o poză proastă.

Rhovie — state 8

STAREA 02 / 03

Rutina

Analiza întoarce patru axe și un tip estimat de piele. Rutina se construiește apoi din produsele pe care utilizatorul le are deja, cu golurile semnalate, nu umplute pe tăcute cu lucruri de cumpărat.

Rhovie — state 9

STAREA 03 / 03

Istoricul

Fiecare scanare se salvează cu imaginea, scorurile și condițiile ei. Rostul aplicației e a doua scanare, cea care îți spune dacă a funcționat ceva.

Pe dedesubt

Două decizii care merită explicate.Părțile care au durat cel mai mult.

D—01

Când refuză o poză proastă

O scanare îl costă ceva pe utilizator: timp și, pe planul gratuit, unul dintre puținele credite pe care le are. Să întorci un scor sigur pe el dintr-o poză întunecată și strâmbă e mai rău decât să nu întorci nimic.

Așa că verificarea rulează pe telefon înainte ca declanșatorul să fie activat: exact o față, destul de mare în cadru, în limita a 12° de yaw, 10° de pitch și 8° de roll, plus un semnal de lumină fără subexpunere, reflexii sau neclaritate. Douăsprezece probleme distincte pot bloca declanșatorul, iar camera o numește pe cea întâlnită.

faceQuality.tsTS
// every frame, before the shutter unlocksconst straightEnough =  Math.abs(face.yawAngle) <= MAX_YAW &&  Math.abs(face.pitchAngle) <= MAX_PITCH &&  Math.abs(face.rollAngle) <= MAX_ROLL if (signal.highlightRatio > MAX_HIGHLIGHT_RATIO)  issues.push('glare_detected')// usable only when issues is empty, no credit spent

D—02

Cum muți istoricul unui necunoscut

Poți scana înainte să-ți faci cont. A fost decizia corectă de produs și cea mai grea de inginerie. Până își face cineva cont, poate să aibă deja o lună de scanări legate de o identitate anonimă.

Legarea credențialelor păstrează UID-ul, dar căile din storage, documentele din Firestore și înregistrările de abonament trebuiau să se mute toate ca un singur bloc. E o singură tranzacție în lot, cu reîncercare idempotentă: dacă pică la jumătate, nu se mută nimic.

linkAccount.tsTS
// anon:7f2a… → user:7f2a…, uid preservedawait linkWithCredential(anonUser, cred) const batch = db.batch()moveScans(batch); moveRoutines(batch)moveEntitlements(batch) // all of it, or none of itawait batch.commit()

PE CE E CONSTRUIT

CLIENT
React Native · Expo SDK 54 · TypeScript strict · Zustand · Zod
BACKEND
Firebase Auth, Firestore și Cloud Storage · serviciu de analiză pe Cloud Run
VIZIUNE
Vision Camera · detecție de față ML Kit · rețea facială MediaPipe
OPERARE
Sentry · EAS Build · App Store Connect · TestFlight

CREDITE

Design de produs și de interfață: Artur Moldovanu. Dezvoltarea, backendul, fluxul de viziune computerizată, procesul de lansare și publicarea în magazin sunt ale mele.


STARE

Publicată în App Store și în dezvoltare activă.

PROIECTUL URMĂTOR

TeamTipOut

Calculator de bacșiș pentru echipele din restaurante. Împărțire după orele lucrate, echipe salvate și un export pe care îl vede toată tura.

Preiau proiecte noi

Spune-mi ce construiești.Un plan scris și un preț fix înainte să se miște vreun ban.

Răspund la tot într-o zi lucrătoare. Dacă nu sunt omul potrivit pentru proiect, ți-o spun din start, nu după trei săptămâni.