Context
Cadourile personalizate se află la intersecția dintre un magazin online și o mică fabrică. Un client încarcă o fotografie făcută cu telefonul, în lumină slabă și dintr-un unghi neobișnuit, iar fișierul trebuie transformat într-o imagine care poate fi imprimată pe un produs fizic. Fiecare retuș manual dintre cele două etape crește costurile și prelungește procesul.
Dificultatea vine din imaginile primite. Fotografiile clienților variază mult ca rezoluție, încadrare și calitate, iar persoana care le încarcă are așteptări precise privind redarea propriului chip.
Ce am construit
Fluxul acoperă preluarea fotografiilor din magazin, editarea și verificarea imaginilor cu AI, plus o coadă de revizuire înainte ca rezultatul să fie asociat din nou comenzii.
- Preluare și validare — fotografiile vin din magazin printr-un API protejat cu token și asociat comenzii, sau prin WhatsApp, și sunt verificate (tip, dimensiune și conținut efectiv al fișierului) înainte de orice procesare costisitoare.
- Eliminarea fundalului — subiectul este separat de fundal pentru a putea fi așezat pe șablonul produsului ales.
- Editarea portretului — pașii de editare cu AI adaptează imaginea subiectului la formatul cadoului, în două treceri (întâi corpul, apoi fețele), iar fișierul original este păstrat pentru ca orice pas să poată fi reluat.
- Buclă de verificare — fiecare rezultat este verificat printr-o a doua rulare a modelului, prin raportare la brief, și regenerat automat când nu trece verificarea, astfel încât rezultatele slabe să fie identificate înainte de revizuirea umană.
- Revizuire și trimitere înapoi — rezultatele intră într-o coadă de aprobare/respingere, iar imaginile finale se întorc în magazin prin polling sau callback, astfel încât comanda să meargă mai departe fără exporturi manuale de fișiere.
Stack
O aplicație Next.js/TypeScript cu o bază de date SQLite și stocare locală de fișiere, modele de imagine de la doi furnizori cu fallback automat și reîncercări, plus sharp pentru încadrare și post-procesare. Generarea rulează asincron în spatele API-ului — magazinul primește un ID de job și un callback — iar un job durează de la câteva secunde la câteva minute, astfel încât magazinul nu trebuie să aștepte răspunsul unui model.
Status
Proiect privat. Metricile detaliate și referințele de la clienți sunt disponibile la cerere, sub NDA.