Gizlilik öncelikli kozmetik içerik analizi. Kullanıcılar INCI etiketini fotoğraflayarak içerik bazında yapay zeka risk skoru, komedojenik değerlendirme ve tahriş potansiyeli alır; ürünler arası rutin uyumluluk analizi ve sürükle-bırak haftalık cilt bakım rutini sunar. Kullanıcı verileri (geçmiş, takvim, profil) yalnızca cihazda tutulur; sunucuda sadece anonim cache ve rate-limit metadata bulunur.

Kozmetik ürün içerik listeleri (INCI) anlaşılmazdır: çoğu tüketici adları yorumlayamaz, birlikte kullandığı ürünler arasındaki bileşen çatışmalarını fark edemez. Skinwise bu boşluğu ucuz, hızlı ve gizliliğe saygılı bir çok modlu yapay zeka akışıyla kapatır.
Kullanıcı 1–4 fotoğraf yükler — silindirik ambalajlarda liste döndüğü için çoklu fotoğraf desteği var. Sunucu görselleri sharp ile ≤1024px JPEG'e dönüştürür, SHA-256 hash hesaplar, Upstash Redis'te (24 saat TTL) arar; cache miss durumunda Gemini 2.5 Flash-Lite'a (çok modlu görsel) yapılandırılmış Türkçe promptla istek atar. API, bileşen bazında dökümü ve bileşik risk skorunu içeren tiplenmiş bir ProductAnalysis nesnesi döner ve sonucu Redis'e geri yazar — böylece aynı görselin tekrar yüklenmesi cache'i ücretsiz vurur.
/icerik-analizi — tek ürün etiket analizi/cakisma-analizi — 2–3 ürün kabul eder, birlikte kullanılmaması gereken bileşen çiftlerini (RoutineConflict) yüzeye çıkarır/rutin — sürükle-bırak haftalık cilt bakım rutini; eski /takvim URL'leri kalıcı yönlendirme ile buraya gelir. Backend endpoint /api/routine olarak korunur.Kullanıcı verileri (analiz geçmişi, takvim girişleri, profil) yalnızca cihazda durur — localStorage'da en fazla 30 kayıt, hesap yok, upload yok. Sunucu sadece iki anonim veri tutar (Upstash Redis): rate-limit sayaçları için IP hash ve görsel hash → ProductAnalysis cache'i (24 saat TTL, kullanıcı kimliği bağlı değil).
storage.ts üzerindeki bir migration katmanı, eski çoklu gün içeren rutin kayıtlarını otomatik olarak günlere böler — her gün kendi bağımsız tamamlandı işaretine sahiptir. Analizler, Canvas tabanlı bir PNG oluşturucu (lib/export-report.ts) ile rapor kartı olarak indirilebilir.
Browser → FormData → /api/analyze
↓
sharp normalize (≤1024px JPEG)
↓
SHA-256 görsel hash
↓
Upstash Redis lookup (24s TTL)
↓ (miss)
Gemini 2.5 Flash-Lite (çok modlu görsel)
↓
JSON parse + normalize → tiplenmiş ProductAnalysis
↓
Redis cache yazımı
↓
Frontend: AnalysisContext + localStorage history (max 30)
RATE_LIMIT_ENABLED)prefers-color-scheme ile sürülen aydınlık/karanlık logo + faviconAnimatePresence geçişleri@upstash/redis, @upstash/ratelimit)