NotlarSüreç
Kodcu olmadan bir uygulama geliştirmek: OdiePT'de nerede zorlandım?
OdiePT'nin kodunu ben yazmıyorum, yapay zekâ ajanları yazıyor. Oturum kayıtlarından dört örnekle benim işimin ne olduğunu, ajanların nerede işe yarayıp nerede yetmediğini not ettim.

OdiePT bir antrenman takip uygulaması; adını köpeğim Odie'den alıyor. Nisan 2026'da küçük bir "fitness RPG" kartı olarak başladı, yaz boyunca Hevy'deki antrenmanları oyunlaştırılmış bir panelde gösteren bir projeye dönüştü. Ağustos sonunda sıfırdan yeni bir yapıya geçtim: PT'nin çalışma alanı, üyenin portalı ve stüdyodaki iPad için tek görevli bir kiosk ekranı. Altında Next.js ve Supabase var, giriş Google hesabıyla.
Kodu ben yazmıyorum. Yapay zekâ kodlama ajanları yazıyor, ağırlıkla Codex. Bu not, o oturumların kayıtlarından çıkardığım somut örneklerle benim tarafımın ne olduğunu toparlıyor.
Benim işim üç şeydi
Ne istediğimi tarif etmek, arayüzü yönlendirmek ve bir şeyin yanlış gittiğini fark etmek. Kulağa az geliyor ama ajan bu üçünü kendi başına yapamıyor.
Temmuz'da proje fazla özellikle şişmişti. Temizleyip çalışır halde bırakmak istedim ve ajana açıkça "AI falan istemiyorum" dedim. Uygulamayı yapay zekâyla yapıyorum ama uygulamanın içinde yapay zekâ koç istemedim. Ürün kurallarında hâlâ bu var: Odie bir yol arkadaşı, sağlık ya da antrenman otoritesi değil.
Yeni üye ile eski üye aynı kişi değil
Eylül başında mobil ekranları sıkışık buldum, daha ferah olsun istedim. Aynı işte yeni üyeler için bir karşılama akışı tanımladım: Google ile giriş yapan yeni üye hedefini, deneyimini, boyunu ve kilosunu girmeden kişisel portala geçmeyecek. Ajan seçenekleri önüme koydu, dört alanın da zorunlu olmasını seçtim. Form boy ve kiloda virgüllü yazımı da anlıyor, yarım kalırsa hesaba bağlı bir taslak olarak saklıyor.
Asıl kararı ise ajan soruyu sorunca netleştirdim: bu kural yalnız yeni üyeler için. Uygulamayı zaten kullanan biri bir sonraki girişinde önünde bir form duvarı bulmayacak. Bunu söylemeseydim kuralın herkese uygulanması da teknik olarak "doğru" bir çözüm olurdu. Aynı oturumda kapsamı genişlettim ve PT panelinin mobil düzenini de elden geçirmesini istedim.
Belirsizse boş kalsın
Uygulamada 712 aktif hareket tanımı var ve her birinin doğru ekipman bilgisine, mümkünse doğru hareket görseline bağlanması gerekiyordu. Ajan 712 tanımı ve 1.324 medya kaydını denetledi: 71 hareket kimliği ve ekipmanıyla doğrulanarak eşleşti, 635 hareketin kaynakta karşılığı yoktu, 6 kayıtta varyasyon ya da ekipman çelişiyordu.
Kural basitti: yalnız doğrulanan eşleşme bağlanır. Belirsiz olanlara benzer görünen bir görsel yakıştırılmadı; ekipmanı belirsiz 15 hareket de "sahibi baksın" notuyla bana bırakıldı. Yanlış hareketi gösteren bir görsel, hiç görsel olmamasından daha çok zarar verir; kullanıcı ona bakarak hareketi yapar.
Yüzde yerinde sayarken bacak artıyor olabilir
Ekim'de ilerleme ekranında bacak verisinin artmadığını, bir de daha önce gördüğüm kuvvet ve çeviklik gibi değerleri gösteren bir grafiğin kaybolduğunu fark ettim.
Ajan hesabı açtı. Kas grafiği tamamlanan çalışma setlerinden üretiliyor: hareketin ana kası 1, yardımcı kası 0,5 katkı alıyor, ısınma setleri sayılmıyor. Ekranda gördüğüm yüzde ise bacağın toplam katkı içindeki payıydı. Bacak setleri artarken diğer bölgeler de birlikte artarsa yüzde hiç kıpırdamaz. Yani tek başına yüzde, gerçek bir artışı gizleyebiliyordu. Benim verimde bacağın gerçekten artıp artmadığı ise ayrıca kontrol edilmedi.
Ajan bölge düğmelerini hem mutlak katkıyı hem yüzdeyi gösterecek şekilde değiştirdi ve kas görünümünü radarla açtı. Kaybolduğunu düşündüğüm grafiği ise bulamadı; depoda kuvvet ya da çeviklik serisi çizen bir ekran yoktu. Hangi ekranı kastettiğimi bir ekran adı ya da görüntüyle göstermem gerekiyor. O iş hâlâ açık.
"Yayında" ile "çalışıyor" aynı şey değil
Ağustos'taki ara sürümde kayıt formu genel bir hata veriyordu. Ajana olmadığını söyledim. Arayüzdeki mesaja bakmak yerine kayıt isteğini kendisi tekrarladı ve sağlayıcının asıl cevabını yakaladı: Supabase projesinde yeni kayıt alımı kapalıydı.
Yayın başarılıydı, kayıt sayfası açılıyordu, veritabanı değişiklikleri uygulanmıştı. Bunların hiçbiri kaydın çalıştığını göstermiyordu. Kod tarafında ajan bu hatayı anlaşılır bir Türkçe mesaja çevirdi. Asıl çözüm ise Supabase panelinde bir ayarı açmaktı ve o ayar benim elimdeydi.
Nerede işe yaradı, nerede yetmedi
İşe yaradığı yerler:
- Okumak. "Her şeyi incele oku, başlamaya hazır olduğunda haber ver" dediğimde depoyu, canlı sürümü ve talimatları karşılaştırıp aralarındaki çelişkileri çıkardı.
- Sıkıcı kontrol. Arayüzü 320, 390, 768, 1180 ve 1440 piksel genişlikte tek tek denemek, iki yüzü aşkın testi her değişiklikte yeniden çalıştırmak.
- Kural okumak. Strava'yı eklemeyi sorduğumda önce Strava'nın API politikasını okudu ve mevcut yapının bu kurallara uymadığını söyledi. Entegrasyon, Strava'dan yazılı onay alınmadan yapılmayacak diye beklemede.
Yetmediği yerler:
- Neyi kastettiğimi bilmiyor. Kayıp grafik örneğinde olduğu gibi, gösteremediğim şeyi bulamıyor.
- İlk deneme her zaman tutmuyor. Aynı kayıt işinde iki veritabanı değişikliği önce sözdizimi hatası verdi, kayıt kontrolü de sağlayıcı bilgisini ilk seferde yanlış alandan okuyordu.
- Kendi ortamına takılıyor. Proje Node 22 isterken oturumun Node 24 ile çalıştığı oldu, bir seferinde ağ hatası yüzünden tam test hiç koşamadı.
- Öneri ile yapılan iş karışabiliyor. Bir oturumda büyük bir mobil mimari önerdi; oturumun sonunda kayda geçen iş bir tema değişikliğiydi. Hangisinin gerçekten yapıldığını ayırmak gerekiyor.
Öğrendiklerim
- Seçenekleri ajan çıkarsın, kararı ben vereyim.
- Yeni kullanıcıyı ve var olan kullanıcıyı her zaman ayrı düşüneyim.
- Belirsiz veri boş kalsın; tahminle doldurulmuş bir alan, sonra kimsenin fark etmediği bir hataya dönüşüyor.
- Tek sayı yetmiyor. Yüzdenin yanında mutlak değer de görünsün.
- "Yayında" demek için gerçek akışı baştan sona denemek gerekiyor; testlerin geçmesi canlıda çalıştığını göstermiyor.
- Bir ekrandan bahsediyorsam adını ya da görüntüsünü vereyim.
- Büyük bir işin sonunda devir notu isteyeyim ki bir sonraki ajan aynı yerden devam edebilsin.
Kod yazmadan bir uygulama geliştirmek mümkün. Ama işi bırakmak mümkün değil; ne istediğimi, neyin yanlış durduğunu ve neyin gerçekten bittiğini söylemek hâlâ bana düşüyor.
Alperen


