TRen
devam ediyor

Web uygulaması

Esnaf Stok

Küçük esnaf için stok ve kârlılık takibi. E-faturadaki ürünleri otomatik eşleştiriyor, maliyeti kuruşu kuruşuna hesaplıyor; 357 testle doğrulanıyor.

ReactTypeScriptSupabaseVitest
  • Tek başına

Ne yapıyor

Küçük esnaf için web tabanlı stok ve kârlılık takip uygulaması. İşletme sahibi ve kasiyer için ayrı roller var. Ekim 2026’dan beri geliştiriyorum.

Neden

Küçük market gibi esnafın, sattığı bir üründen kâr mı zarar mı ettiğini çoğu zaman bilmediğini fark ettim. Ciro kasada görünüyor, ama bir ürünün maliyeti her yeni faturayla değiştiği için ürün bazında kârı elle hesaplamak neredeyse imkânsız. Esnaf Stok bu soruyu cevaplamak için var: faturayı yükle, satışı yap, hangi üründen ne kazandığını ya da kaybettiğini gör.

Nasıl

  • Yüklenen e-faturalardan (UBL-TR XML) ürünler otomatik eşleşiyor, stok girişi yapılıyor.
  • Ağırlıklı ortalama maliyet kuruş hassasiyetinde (decimal.js) hesaplanıyor.
  • Çok kiracılı yapı: her işletmenin verisi veritabanı seviyesinde Row Level Security ile ayrılıyor; sahip ve kasiyer için ayrı yetkiler.
  • Değiştirilemez (append-only) stok defteri; satır kilitleri ve advisory lock ile eşzamanlılık kontrolü.
  • 260 birim testi, 97 entegrasyon/güvenlik testi; maliyet hesabının TypeScript ve SQL tarafında aynı sonucu verdiği eşlik testi.

Teknolojiler: React, TypeScript, Vite, Supabase (PostgreSQL, Auth, RLS), decimal.js, Vitest.

Yapay zekâyı nerede kullandım

Claude Code ile geliştiriyorum. Ürün tasarımı, iş kuralları, mimari kararlar ve kod incelemesi bende.

ekran görüntüleri

Raporlar ekranı, test verisiyle: bu ayın kâr hesabı. KDV hariç satış, satılan malın maliyeti ve iptaller düşülünce brüt kâr −134,40 ₺, yanında kırmızı Zarar etiketi.
ürün ürün kâr/zarar. burada zarar var!
Faturalar ekranı, test verisiyle: tedarikçi adı, tarih, fatura numarası, tutar ve Onaylandı ya da Taslak etiketiyle yüklenen e-faturaların listesi; sağ üstte Fatura yükle düğmesi.
e-faturayı yükle, ürünler kendini eşleştirsin
Satış ekranı: barkod okutma ya da ürün adı yazma alanı, yanında Kamera düğmesi; sağda toplam tutar ve Nakit, Kart, Havale ödeme düğmeleri.
barkodla satış, kamera da olur

En zor kısım

Kod değil, muhasebe. Başta bu alandaki bilgim çok zayıftı; ağırlıklı ortalama maliyet, KDV hariç satış, iptal edilen bir satışın maliyete etkisi ve e-fatura (UBL-TR) formatı gibi kavramları sıfırdan öğrenmem gerekti.

İkinci zorluk yapay zekâyla çalışmanın kendisiydi. Claude Code’a ne istediğimi net anlatmak ve ürettiği kodu her seferinde testlerle ve kod incelemesiyle doğrulamak ayrı bir disiplin istedi. 357 testin bir sebebi de bu.