Şehir Uygulaması — Mobil ve Yönetim Paneli
Kütahya Sosyal
Kütahyalının "bu hafta şehirde ne var" sorusunu tek yerden cevaplayan şehir uygulaması: Expo mobil istemci, Next.js yönetim paneli ve ikisini tek veri erişim katmanından besleyen self-host Supabase altyapısı.
- Rol
- Solo Geliştirici — mobil, panel, veri katmanı ve sunucu kurulumu
- Dönem
- Temmuz 2026 — Devam ediyor
- Odak
- Bir mobil uygulama ile bir yönetim panelini, oturumları taban tabana farklı olduğu hâlde tek veri erişim katmanı ve tek şema üzerinden yürütmek.
01 / Problem
Çözülmesi gereken neydi?
Şehirde olan biten hiçbir yerde toplu durmuyor. Etkinlik duyurusu mekânın Instagram hesabında, konser afişi bir WhatsApp grubunda, nöbetçi eczane eczacılar odasının sitesinde, belediye etkinliği kurumsal sitede PDF olarak. Tıkanma bilginin yokluğu değil dağınıklığı ve doğrulanamazlığı: kullanıcı beş ayrı yere bakıyor, baktığı yerin güncel olup olmadığını bilmiyor, çoğu kaynak mobilde okunacak biçimde değil. Sonuç, sorunun "nereye gideyim"den "kime sorsam"a düşmesi — şehre yeni gelen öğrencinin ise soracağı kimse yok.
02 / Yaklaşım
Ürünü bir bütün olarak kurmak.
Mobil uygulama ile panel aynı şemayı okuduğu için tek repoda tutuldular; ayrı repolarda şema her değiştiğinde iki tarafın tipleri sessizce ayrışır ve bu sapma derlemede değil çalışma anında patlar. Veri erişim katmanı paylaşılan pakette toplandı ve Supabase istemcisini parametre olarak alıyor: mobilde oturum cihazda güvenli depoda ve istemci tarafında yaşıyor, panelde sunucuda çerezden okunup her istekte yeniden kuruluyor — aynı sorgu gövdesi iki dünyayı da besliyor. Supabase yönetilen servis yerine kendi sunucusunda çalışıyor; abonelik gideri ve medya tavanı yok, bedeli olan güncelleme ve yedek sorumluluğu ise açıkça kabul edildi.
03 / Teknik mimari
Sistemin katmanları
- 01
Mobile client
Expo Router ile dosya tabanlı yönlendirme; sekmeler ana sayfa, harita, sosyal ve profil. Stil NativeWind ile token üzerinden çift tema. Sunucu durumu React Query'de ve kalıcı yazılıyor, böylece uygulama çevrimdışı açıldığında son gördüğü hâli gösteriyor.
- 02
Shared data layer
Üretilmiş veritabanı tipleri, veri erişim modülleri ve sorgu fabrikaları tek pakette. Her fonksiyon Supabase istemcisini parametre alıyor; sorgu mantığı, alan seçimleri, imzalı medya üretimi ve önbellek anahtarları tek yerde duruyor ve sorgu, oturum kimin elindeyse onun yetkisiyle koşuyor.
- 03
Admin panel
Next.js App Router üzerinde içerik modülleri, moderasyon kuyruğu, kullanıcılar, kara liste ve denetim kaydı. Yazma işlemleri Server Action; her biri şema doğrulamasından ve yetki kapısından geçip denetim kaydına yazıyor. Moderasyon ekranları RLS'i aşan bir istemci kullanıyor, çünkü panelin işi tam da yayında olmayanı görmek.
- 04
Self-hosted stack
Postgres, kimlik, REST, realtime, depolama ve ağ geçidi Docker Compose ile aynı sunucuda; panel ayrı bir compose dosyasıyla yayınlanıyor ve depolama arka ucu tek değişkenle dosya sisteminden S3'e çevrilebiliyor. Kurulum sıralı: şemayı sıfırla, migration'ları uygula, seed'i yükle; sonrasında tarihli ve tekrar çalıştırılabilir SQL yamaları.
04 / Ürün kapsamı
Öne çıkan özellikler
- 01
Bu hafta şehirde ne var — etkinlikler tarihine göre, detayında konum ve katılım
- 02
Gezilecek yerler ve mekânlar — kategoriye göre, fotoğraflı, yol tarifiyle
- 03
Şehir haberleri ve günün nöbetçi eczaneleri tek akışta
- 04
Etkinlik ve mekânların tek haritada, yakınlaştıkça açılan kümelerle gösterimi
- 05
Sosyal katman: fotoğraf ve video paylaşımı, beğeni, yorum, takip ve mesajlaşma
- 06
Panelden içerik girişi, şikayet moderasyonu, kara liste ve denetim kaydı
05 / Stack
Bu iş için kullanılan araçlar.
- Expo SDK 56
- React Native
- React 19
- TypeScript
- NativeWind
- React Query
- MapLibre
- Next.js 16
- Tailwind CSS
- zod
- Supabase
- PostgreSQL 17
- PostgREST
- GoTrue
- Turborepo
- pnpm
- Docker Compose
Arayüz
Ürün ekranları




Sonuç
Ne değişti?
Ürün geliştirme aşamasında ve henüz yayınlanmadı; mağazada yok, gerçek kullanıcısı yok, bu yüzden kullanım rakamı da yok. Bugün uçtan uca çalışanlar: keşif çekirdeği, harita ve kümeleme, sosyal akış, takip, mesajlaşma, uygulama içi bildirimler, hesap silme ve panelin içerik ile moderasyon modülleri. Push bildirimi veritabanı tarafında hazır ama cihaz tarafı bekliyor; iş ilanları entegrasyonunun kodu yerinde, yapılandırması değil. Ekran görüntüleri geliştirme ortamından ve demo veriyle alındı.
