← Projelere dön

Exptract - AI Destekli Gider Takibi

Nedir

Fişin fotoğrafını çekiyorsunuz, harcama deftere işlenmiş oluyor. Exptract, tarayıcıda yaşayan ama telefona uygulama gibi kurulan bir gelir-gider takipçisi: bir görüntü modeli fişteki tutarı, tarihi, işyerini ve kategoriyi okuyor; siz özete bakıp onaylıyorsunuz. Elle girişler de aynı yoldan ilerliyor ve her ekran hem Türkçe hem İngilizce.

Exptract'te taranan fişin kontrolü: okunan tutar, kategori ve tarih kaydedilmeye hazır

Ürün yöneticisiyim, mühendis değilim. Uygulamayı tek başıma Claude Code ile geliştirdim — kodu o yazdı, kararların tamamı bendeydi: kapsam, tasarım, güvenlik, uyumluluk.

Nasıl çalışır

Ön yüz, React + Vite ile geliştirilmiş bir PWA. Kimlik doğrulama, Postgres veritabanı, dosya depolama ve sunucu tarafı fonksiyonlar Supabase’te; her tabloda satır düzeyinde güvenlik (RLS) var. Fiş okuma Gemini Flash-Lite ile yapılıyor ve model yalnızca sunucu tarafındaki bir fonksiyondan çağrılıyor — API anahtarı tarayıcıya hiç inmiyor. Yapay zekâ taramaları ayda 10 ile sınırlı; sınıra gelen kullanıcı tek dokunuşla bekleme listesine katılıyor.

Exptract ana ekranı: aylık bakiye, gelir-gider toplamları ve tarama sayacı

Uyumluluk tarafı vitrin süsü değil. Kullanıcı onayı, istemcinin yalnızca okuyabildiği bir tabloda kayıt altına alınıyor; iki dilli gizlilik politikası gerçek veri akışlarını anlatıyor; hesap silme ise her şeyi gerçekten siliyor — veritabanı kaskadının tek başına ulaşamadığı fiş görselleri dahil. Girişleri Cloudflare Turnstile koruyor, dağıtım Vercel üzerinde.

Ne öğrendim

Bütün geliştirme boyunca kod incelemesinden yalnızca iki bug kaçtı; ikisini de uygulamayı kullanıcı gibi kurcalarken yakaladım. Biri, giriş formundaki doğrulama mesajlarının uygulamanın değil tarayıcının dilinde çıkmasıydı; öbürü, zaten kayıtlı bir e-postayla üye olunmaya çalışılınca ekranın sessizce asılı kalması. Beş dakikalık tıklama turu, her fazda kod incelemesinden daha çok iş çıkardı.

En büyük dersi, hata ayıklamanın dibe vurduğu an verdi. Fiş okuyucu, tek bir yanıltıcı “CORS hatası”nın arkasında beş ayrı şekilde bozuktu — fonksiyon aslında çöküyor ve gerçeği söyleyecek başlıkları döndüremeden ölüyordu. Yığının en dibinde ise yapay zekâ sağlayıcısının cevabı: limit: 0. O modele ücretsiz kota sıfırmış. Hatalar okunur hale gelince her katman tek satırlık bir düzeltmeye dönüştü.

Uyumluluk da bir onay kutusu değil, sistem. “Kullanıcı verisini silebilsin” kulağa basit geliyor; ama veritabanı kaskadı depodaki fiş görsellerine ulaşmıyor ve kullanıcı onayının, uygulamanın yalnızca okuyabildiği — sonradan kimsenin değiştiremediği — bir tabloda tutulması gerekiyordu.