11.08.2026 (2. Tur) Düzeltmeleri — Özet

Bu dosya, ikinci turda bildirdiğin 6 sorun için yapılan değişikliklerin özetidir.

En son değişen dosyalar (bu turda)

Bu turda eklenen yeni dosyalar


1) Çıkış butonu → sadece panel.html# ekliyor, çıkış olmuyor

Kök neden: panel.js, admin.js ve github-yonetim.js‘in init() fonksiyonları TEK bir sıralı await zinciriydi. Zincirdeki herhangi bir adım (ör. mesajlaşma widget’ı kurulumu) beklenmedik bir hata fırlatırsa, o adımdan SONRAKİ her şey hiç çalışmıyordu. wireLogout() en sonda çağrıldığı için çıkışa hiç bağlanmıyordu — buton görünüyordu ama tıklanınca sadece href="#"‘in native tarayıcı davranışı (adres çubuğuna # eklenmesi) gerçekleşiyordu. Çözüm: Üç dosyada da init()‘i yeniden yapılandırdım — her bölüm artık kendi try/catch’i içinde, birbirinden bağımsız kuruluyor. panel.js‘te ayrıca wireLogout()‘u en başa aldım (kritik olduğu için en garantili yer).

2) Panellerde “Yükleniyor…” takılı kalması

Aynı kök neden (yukarıdaki 1. madde) — bir bölüm patlayınca ondan sonraki TÜM bölümler (KVKK, Özel İçerikler, Mesajlar) sonsuza dek “Yükleniyor…” durumunda kalıyordu. Aynı düzeltmeyle çözüldü; artık bir bölüm hata verse bile diğerleri normal yükleniyor, hatalı bölüm konsola (F12 → Console) hangi bölüm olduğunu yazıyor.

3) Sayfa kaymaları / iç içe geçme / mesajlaşma modern görünmüyor / buton bazı tarayıcılarda görünmüyor

Kök neden (hepsinin ortak kaynağı): auth.css, sayfaların Markdown gövdesi içinde (</head>‘den SONRA, <body> içinde) <link> ile yükleniyordu — bu geçersiz HTML’dir ve bazı tarayıcılarda (ve tarayıcı uzantılarında) <body> içindeki <link> etiketleri ya hiç yüklenmiyor ya da farklı/geç önceklilikle yükleniyordu. Bu da tarayıcıya göre değişen görünüm sorunlarının (buton yazısı kayboluyor, mesajlaşma modern görünmüyor) asıl sebebiydi. Çözüm: auth.css‘i _layouts/default.html‘in gerçek <head>‘ine taşıdım; hangi sayfanın bunu yükleyeceğini front-matter’daki auth_css: true bayrağıyla kontrol ediyoruz (9 sayfa güncellendi: giriş, kayıt, şifre sayfaları, panel, admin, vb.). Ek düzeltme (sayfa kaymaları): .panel-section--wide (mesajlaşma bölümünü genişleten) kuralı 100vw tabanlı bir ortalama tekniği kullanıyordu — bu, dikey kaydırma çubuğunun kapladığı alan yüzünden yatay taşmaya ve “kayma” hissine yol açıyordu. body { overflow-x: hidden } eklendi ve teknik, viewport yerine ebeveyne göre hesaplayan daha güvenli bir versiyona çevrildi. .panel-grid‘e eksik olan grid-template-columns ve taşma önleyici min-width:0 kuralları da eklendi.

4) Ad-Soyad “rol kısmında” görünmüyor / kullanıcı güncellese de sistemde değişmiyor

5) Admin e-posta değiştirince eski oturumlardan çıkış yapılmıyor / bildirim gitmiyor

Supabase’in “şu kullanıcıyı ID ile tüm cihazlardan çıkışa zorla” diye hazır bir admin fonksiyonu yok (auth.admin.signOut() kullanıcının kendi JWT’sini ister, admin’de bu yok). Yeni migration’da (0009) admin_force_signout_user() adında bir veritabanı fonksiyonu ekledim — bu, service_role yetkisiyle kullanıcının auth.refresh_tokens ve auth.sessions kayıtlarını iptal ediyor (mevcut access token en geç 1 saat içinde, refresh token’lar ise anında geçersiz olur). admin-change-email fonksiyonu artık e-postayı değiştirdikten hemen sonra bunu otomatik çağırıyor.

Bildirim maili için: ekstra bir SMTP kurulumu istemediğin için, Supabase’in kendi dahili mail sistemini (resetPasswordForEmail) kullanıyoruz — bu, “Reset Password” e-posta şablonu üzerinden gerçekten postalanıyor (Dashboard’dan şablon metnini “e-postan güncellendi” şeklinde özelleştirebilirsin). (Not: İlk denemede generateLink() kullanmıştım ama bu fonksiyonun mail GÖNDERMEDİĞİNİ, sadece bir link ÜRETTİĞİNİ fark edip düzelttim — bu ayrıntıyı burada belirtiyorum çünkü şeffaf olmak istiyorum.)

6) Ek olarak bulduğum/düzelttiğim hatalar


Uygulama adımları (senin yapman gerekenler)

  1. Supabase Dashboard > SQL Editor‘e git:
    • Eğer 0008_email_isim_senkron_ve_kvkk_temizlik.sql‘i daha önce çalıştırmadıysan, önce onu çalıştır.
    • Ardından 0009_admin_zorla_cikis_ve_bildirim.sql‘i çalıştır (bu turun asıl yeni migration’ı).
  2. admin-change-email fonksiyonunu yeniden deploy et (içeriği değişti):
    supabase functions deploy admin-change-email
    
  3. İstersen Dashboard > Authentication > Emails > Reset Password şablonunu, “E-postanız site yöneticisi tarafından güncellendi” gibi bir metinle özelleştirebilirsin (zorunlu değil, varsayılan şablon da işlevsel çalışır).
  4. Geri kalan tüm dosyalar (CSS/JS/HTML/MD) statik olduğu için, siteyi her zamanki gibi yayınlaman (GitHub Pages / Cloudflare Pages push) yeterli.

Not: 0009 migration’ı çalıştırılmadan admin panelinden e-posta değiştirirsen, işlem yine de başarıyla tamamlanır (sadece “eski oturumları sonlandırma” adımı sessizce atlanır ve konsola bir uyarı yazılır) — hiçbir şeyi bozmaz, ama madde 5’in tam çalışması için migration’ın çalıştırılmış olması gerekir.