KırşehirAppŞehir uygulaması
Kırşehir'in otobüsünü, nöbetçi eczanesini, etkinliğini, esnafını ve haberini tek yerde toplayan şehir platformu. Flutter ile yazılmış bir mobil uygulama, Next.js üzerinde çalışan bir yönetim masası ve şehrin açık verisini okuyup kendi afişini tasarlayan sekiz bottan oluşuyor. Dış bir yapay zekâ servisine bağlı değil: dil motoru, OCR ve afiş çizimi sunucuda, kendi kodumla çalışıyor.
- 14 hat · 137 durak
- otobüs ağı (GTFS)
- 8 bot
- otomatik içerik üretimi
- 0
- dış yapay zekâ servisi
Sorun
Bir şehirde yaşayan birinin günlük soruları dağınık kaynaklarda duruyor: otobüs saatleri belediyenin PDF'inde, nöbetçi eczane İl Sağlık Müdürlüğü'nün görsel çizelgesinde, etkinlikler Instagram hikâyelerinde, su ve elektrik kesintileri yerel basında. Hiçbiri tek yerde değil ve çoğu bir makinenin okuyabileceği biçimde yayınlanmıyor.
Ne yaptım
- Mobil uygulama (Flutter): gece ve gündüze göre değişen "gökyüzü" teması, Gün Halkası, Yayın akışı, hat ve durak ekranları, nöbetçi eczane, harita ve Keşfet. Masaüstü tarayıcıda telefon çerçevesi içinde açılıyor, Android'de APK olarak kuruluyor.
- Canlı şehir motoru: Toplayıcı → Göz (OCR) → Anlayıcı → Doğrulayıcı → Tasarımcı → Yayıncı zinciri. Belediye duyuruları, altı yerel basın kaynağı, eczane çizelgesi, hava durumu ve tarifeler düzenli olarak okunuyor.
- Türkçe dil motoru: "yarın akşam 8'de" ya da "09.00–17.00 arası" gibi ifadelerden tarih ve saati, metinden mahalle ve mekânı çıkarıyor. Kesinti haberine "Yarın Bağbaşı'nda 8 saat su yok" gibi kendi başlığını yazıyor, kurum ağzını tarafsız dile çeviriyor.
- Sekiz bot: Haberci, Rehber, Durakçı, Eczacı, Havacı, Ahi (esnaf fırsatları), Tarihçi ve Şehir. Her paylaşım bir "afiş tarifi": sunucu tarifi PNG/WebP'ye çiziyor, uygulama aynı tarifi canlı ve hareketli oynatıyor.
- Şehir Masası ve Esnaf Masası: editörün bot kararlarını gerekçeleriyle gördüğü yönetim paneli ve işletmelerin kendi kampanyalarını girdiği ayrı bir panel.
Teknik kararlar
Neden dış yapay zekâ yok?
Her gün yüzlerce kısa metin işleniyor. Her birini ücretli bir dil modeline göndermek hem pahalı hem de denetlenemez olurdu. Kural tabanlı Türkçe motor ucuz ve hızlı; üstelik her kararının gerekçesini yazıyor, editör bir metnin neden öyle yazıldığını görebiliyor.
Hassas içerik her zaman insana
Siyasi içerik, bir işletme hakkında olumsuz iddia ve tarife değişikliği hiçbir zaman otomatik yayınlanmıyor; doğrulayıcı bunları her seferinde editör onayına gönderiyor.
Eczane çizelgesi piksellerden okunuyor
Nöbet çizelgesi görsel olarak yayınlanıyor. Tablonun ızgara çizgileri piksellerden bulunup hücrelere bölünüyor, karekod hücreleri atlanıyor, okunan adlar bilinen eczanelere harf mesafesiyle eşleniyor. İlk gerçek çizelgede 60 satırın 59'u doğru okundu.
Afiş bir görsel değil, veri
Paylaşımlar hazır görsel olarak saklanmıyor; 10 palet, 7 desen ve 4 yerleşimden oluşan bir tarif olarak saklanıyor. Aynı tarif hem paylaşım görseline dönüşüyor hem de uygulamada animasyonlu oynatılıyor: başlık kelime kelime yükseliyor, rakam sayıyor, hat kendini çiziyor.
Durum
Canlı prototip olarak çalışıyor: tanıtım sayfası, web uygulaması, Android APK ve yönetim masaları açık. Sıradaki adımlar Instagram bağlantısı, belediyeden eksik hat güzergâhlarının alınması, push bildirim ve mağaza yayını.

