HiCaptains'in İçinde: 248 Modüllük Bir Pazaryerinin Anatomisi
Teslim ettiğimiz yat charter pazaryerinden gerçek rakamlar: 248 TypeScript modülü, 39 veritabanı migrasyonu, 3 dil, AI destekli rota planlama. 2026'da production seviyesinde bir pazaryeri kurmanın gerçek maliyeti.
Pazaryeri inşası hakkındaki çoğu yazı, hiç pazaryeri göndermemiş insanlar tarafından yazılıyor. Bu o yazılardan değil. HiCaptains baştan sona inşa ettiğimiz production seviyesinde bir yat charter platformu — arama, rezervasyon, ödeme, sahip panelleri, gerçek zamanlı sohbet ve AI yolculuk asistanı. Aşağıda kod tabanından gerçek rakamlar ve yol boyunca aldığımız kararlar var.
Kod tabanı lansmanda 248 TypeScript modülüne ulaştı. Bir pazaryerinin üç tam yüzeyi olduğunu hatırlayana kadar bu çok geliyor: misafir rezervasyon akışı, sahip filo yönetim paneli ve admin operasyon paneli. Her yüzeyin auth, routing, form, doğrulama, liste görünümleri, detay görünümleri ve modal akışları gerekiyor. Sayı hedef değildi; her birinin izole edilerek test edilebilmesi için modülleri küçük ve odaklı tuttuk.
İlk şemadan lansmana 39 veritabanı migrasyonu yolladık. Her şema değişikliği bir migration dosyası, her migration merge'den önce inceleniyor ve her migration CI'da ileri ve geri çalıştırılıyor. Bu sıkıcı altyapı işi, production'da gece 2'de bir değişikliği geri almak gerektiğinde ilk seferde kendisini ödüyor.
Lansmanda üç dil desteklendi: Türkçe, İngilizce ve bir bölgesel varyant. Çeviri katmanı i18next tarzı anahtar tabanlı, bir anahtar eksik olduğunda İngilizce'ye geri dönüyor. Production metinleri için otomatik çeviri kullanmıyoruz — her string her dilde bir insan tarafından inceleniyor. Sebep, yat charter'ın yüksek güven gerektiren bir işlem olması ve bozuk Türkçe'nin dönüşümü öldürmesi.
En büyük tek mimari karar concierge sohbet için Supabase Realtime'dı. Müşteriler botlar hakkında soru soruyor — uygunluk, evcil hayvan politikaları, kaptan deneyimi — ve cevabı saatler içinde değil saniyeler içinde bekliyorlar. WebSocket ve queue ile sıfırdan gerçek zamanlı sohbet yapmak haftalar alır. Supabase Realtime size presence, mesaj sıralaması ve yeniden bağlanma yönetimini kutudan çıktığı gibi veriyor. İki günde entegre ettik ve o zamandan beri hiç dokunmadık.
Ödemeler sezonluk fiyatlandırma kurallarıyla Stripe üzerinden çalışıyor. Bir yat Ağustos'ta Kasım'dakinin iki katı fiyatta ve fiyatlandırma mantığının hem sahibe (oranları belirleyen) hem de misafire (ödeyen) şeffaf olması gerekiyor. Bunu bir fiyatlandırma kural motoru olarak modelliyoruz: her yatın bir base rate'i ve sezonluk çarpan listesi var, sistem bunları rezervasyon anında uyguluyor ve Stripe nihai tutarı alıyor. Manuel ayarlama yok, yanlış ücretlendirme hakkında destek talepleri yok.
AI yolculuk asistanı doğru yapması en uzun süren özellikti. İlk versiyon genel bir GPT prompt'uydu — "Bodrum'dan Datça'ya 5 günlük bir yat gezisi planla" — ve güzel ama işe yaramaz cevaplar üretiyordu. Tekneleri deniz yasak bölgelerinden geçiren rotalar, var olmayan marinalar ve 2019'dan çekilmiş rüzgar tahminleri. Bunu kısıtlı üretim pipeline'ı olarak yeniden inşa ettik: derlenmiş bir listeden gerçek marina verisi, hava durumu API'sinden gerçek rüzgar pencereleri ve LLM sadece doğrulanmış gerçeklerin etrafındaki insan-okunabilir anlatıyı dolduruyor. Sonuç, makul görünen kurgu yerine gerçekçi, rezerve edilebilir rotalar üreten bir asistan.
İnşa etmediğimiz şeyler: bir öneri motoru, fotoğraf yükleyebilen bir review sistemi veya bir mobil uygulama. Her biri orijinal istek listesindeydi ve her biri çıkarıldı çünkü v1'in çeyrekler değil aylar içinde gerçek kullanıcılarla test edilebilir olması gerekiyordu. Sahip paneli gelir takibi ve rezervasyon takvimleriyle yayınlandı. Review'lar ve öneriler v2'de geliyor.
Benzer bir inşayı planlayan herkes için bunun anlamı: ödemeler, gerçek zamanlı sohbet ve temel AI'lı gerçek bir production pazaryeri, küçük bir kıdemli ekip için 6 haftalık bir sprint değil, 3-5 aylık bir proje. 248 modül ve 39 migration şişkinlik değil — para yöneten çok taraflı bir ürün için minimum uygulanabilir yüzey alanı. İhtiyacınız yoksa AI özelliğini çıkarın. E-postayla yaşayabiliyorsanız gerçek zamanlı sohbeti çıkarın. Ama auth, ödeme veya sahip panelini çıkarmayın, çünkü bir pazaryerini gerçekten çalıştıran şeyler bunlar.
Önemli Çıkarımlar
- 01Gerçek bir production pazaryeri misafir, sahip ve admin yüzeylerinde ~250 TypeScript modülüne ulaşır — şişkinlik değil, minimum uygulanabilir yüzey alanı.
- 02Kickoff'tan lansmana 39 veritabanı migrasyonu, ödeme yöneten bir ürün için normaldir. Her migration merge'den önce CI'da ileri ve geri çalıştırılır.
- 03Supabase Realtime concierge sohbette haftalarca tasarruf sağladı. Sıfırdan gerçek zamanlı mesajlaşma çok haftalık bir proje; yönetilen bir hizmet kullanmak iki günlük bir entegrasyon.
- 04AI özellikleri ham LLM prompt'ları değil, kısıtlı üretim gerektirir. Yolculuk asistanını doğrulanmış gerçekleri (marinalar, hava) enjekte etmek ve LLM'in sadece anlatıyı yazmasına izin vermek için yeniden inşa ettik.
- 05Gerçekçi zamanlama: kıdemli bir ekip için 3-5 ay, 6 haftalık bir sprint değil. AI veya gerçek zamanlı sohbeti çıkarmak normal; auth, ödeme veya sahip panelini çıkarmak pazaryerini bozar.
Sıkça Sorulan Sorular
HiCaptains göndermek ne kadar sürdü?
Kickoff'tan production lansmanına proje, gerçek ödeme yöneten çok taraflı bir pazaryeri için tipik olan birkaç aylık bir zaman çizelgesinde yürüdü. Sürenin büyük kısmı sahip paneli, ödeme entegrasyonu ve AI yolculuk asistanına gitti — açık yüzey olan ama en küçük mühendislik yatırımı olan misafir rezervasyon akışına değil.
Neden özel bir Postgres kurulumu yerine Supabase?
Supabase bize yönetilen Postgres, çok kiracılı veri izolasyonu için Row Level Security, concierge sohbet için Realtime ve Auth verdi — tek bir sağlayıcıdan, tek bir faturalandırma ilişkisiyle. Eşdeğer yığını sıfırdan inşa etmek, ürünü daha iyi yapmadan 4-6 hafta altyapı işi eklerdi.
Stripe'ta sezonluk fiyatlandırmayı nasıl yönettiniz?
Fiyatlandırmayı Stripe'ta değil, kendi veritabanımızda bir kural motoru olarak modelledik. Her yatın bir base rate'i ve sezonluk çarpan listesi var; sistem rezervasyon anında nihai fiyatı hesaplıyor ve Stripe'a o tek tutarı gönderiyor. Bu Stripe'ı basit tutuyor ve sahibe, koda dokunmadan sezonluk oranlarını düzenleyebileceği şeffaf bir arayüz veriyor.
v1 kapsamından neyi çıkardınız?
Üç şey: bir öneri motoru, fotoğraf yükleyebilen bir review sistemi ve bir native mobil uygulama. Her biri orijinal istek listesindeydi. Her biri çıkarıldı çünkü v1'in gerçek bir zaman çizelgesinde gerçek kullanıcıların önünde olması gerekiyordu. Gerçek rezervasyon hacmi olduğunda öğrenebilmemiz için v2 için planlanıyorlar.
2026'da aynı şekilde inşa eder miydiniz?
Çoğunlukla evet. Supabase + Stripe + Next.js yığını bu büyüklükte pazaryerleri için hâlâ doğru seçim. Değiştireceğimiz tek şey AI asistanı için kısıtlı üretim desenine ilk günden başlamak olurdu — doğrulanmış gerçekleri enjekte etmemiz gerektiğini anlamadan önce ham bir LLM prompt'unda iki hafta kaybettik. Ders alındı, şimdi varsayılan playbook'umuza yerleşti.
Projeniz için konuşalım
15 dakika, taahhut yok.