{"slug": "revizyon-1-statik-yayin-sitesine-bir-gunde-deneysel-sosyal-katman-park-banki-caz", "title": "Revizyon 1: Statik yayın sitesine bir günde deneysel sosyal katman — park bankı, caz kulübü, fısıltı bulutu", "summary": "Güray, statik yayın sitesi kafa1milyon.com'a tek günde deneysel bir sosyal katman ekledi: park bankı sohbeti, caz kulübü ve fısıltı bulutu. Tüm özellikler statik HTML, nginx ve Cloudflare üzerinde, WebSocket yerine kısa yoklamayla çalışıyor; kulüp şimdilik üyelik zorunlu olacağı için kapalı.", "body_md": "*Bu serinin yazarı Güray: AI geliştirmecisi, prompt ve analiz mühendisi. Kodun büyük kısmını bir LLM ajanıyla pair programming yaparak yazıyorum. Seri, kafa1milyon.com'un perde arkasını mühendis gözüyle belgeliyor. Bölüm 1'de genel mimariyi anlatmıştım.*\n\nBu yazıdaki her şey **tek bir günde** eklendi ve tamamı **deneysel**. Hepsi canlıda test edilecek; bir kısmı kalıcılaşacak, bir kısmı kaldırılacak, bir kısmı da bambaşka versiyonlara evrilecek. Bunu pazarlama alçakgönüllülüğü olarak değil, mühendislik gerçeği olarak yazıyorum: statik bir yayın sitesine sosyal ve interaktif katman eklemek, hangi özelliğin \"mekânın ruhuna\" oturacağını önceden bilemeyeceğiniz bir deney alanıdır. Ölçüp, izleyip, budayacağız.\n\nGünün sonunda üç büyük blok çıktı ortaya:\n\nSite tamamen statik HTML + nginx + Cloudflare. Bu revizyonda da kural bozulmadı. Sosyal özelliklerin tamamı şu üç ilkeyle yazıldı:\n\n`ThreadingHTTPServer`\n\n): park bankı ve kulüp API'leri süreç belleğinde yaşar. Süreç yeniden başlarsa masalar boşalır. Bu bir eksik değil, tasarım: \"o akşam orada olanlar\" geçiciliği mekânın kimliği.`GET`\n\n. Cloudflare arkasında WS oturumu yönetmek yerine, olay listesini `ts > sonra`\n\nfiltresiyle artımlı çekiyoruz. 30 eşzamanlı kullanıcı tavanında bunun maliyeti saniyede ~15 hafif JSON isteği; nginx bunu esner bile.\n\n```\nistemci (vanilla JS) ──2 sn'de bir──> nginx /bar/api/ ──> 127.0.0.1:8796\n                                                          bellek içi durum:\n                                                          MASALAR, KISILER,\n                                                          BEKLEYEN, SINYAL\n```\n\nMakale sayfalarına bir günde eklenen etkileşim seti:\n\n`window.getSelection()`\n\nile seçim, `<mark>`\n\nsarma, DOM yolu + metin ofsetiyle LocalStorage'a yazma. Sayfa yeniden yüklendiğinde vurgular yeniden uygulanıyor. Sunucu hiçbir şey görmüyor.`readTimeMinutes`\n\nve `mood`\n\neklendi; liste sayfaları istemci tarafında filtreleniyor.`data-definition`\n\ntaşıyan terimlere hover/tık popover'ı.Bunların onboarding'i de ayrı bir tasarım problemiydi: ekranı kaplayan tur yerine, ilk ziyarette 2-3 saniye görünüp kaybolan mikro ipuçları ve \"özelliği tam kullanacağın anda öğreten\" bağlamsal tetikleyiciler kullandık. Kullanıcı bir özelliği bir kez kullandığında ipucu bir daha çıkmıyor (LocalStorage bayrağı).\n\n**Revizyon notu**: Bu setin tamamı ölçüme tabi. Odak haritası gibi \"güzel ama belki kimsenin fark etmeyeceği\" özellikler ilk budama adayları.\n\nAynı yazıyı okuyan iki anonim okur varsa, köşede bir davet beliriyor: *\"Parkta sizinle aynı makaleyi okuyan biri var. Bir bankta oturup iki cümle laflamak ister misiniz?\"*\n\nKabul edenler SVG ile çizilmiş bir park sahnesinde (gece/gündüz temasına duyarlı) karşılıklı iki banka oturuyor. Mesajlar karakterin kafasının üstünde konuşma balonu olarak beliriyor ve 6 saniyede sönüyor. Kalkan tarafın yerine \"diğer okur banktan kalktı\" notu düşüyor.\n\nTeknik olarak en tartışmalı karar: spesifikasyon Socket.io diyordu, biz kısa yoklamayla yazdık. İki kişilik, 140 karakterlik, saniye hassasiyeti gerektirmeyen bir sohbet için WS altyapısı taşımak istemedik. Doğru karar mıydı? Kulüp tarafında göreceğiz; oradaki yük profili farklı.\n\n10 masa (5'i dört, 5'i iki kişilik), caz efsanelerinin adlarını taşıyor: Ella, Coltrane, Nina, Miles... Kuşbakışı SVG salon planında dolu koltuklar kehribar yanıyor. Masalar dolarsa bar alanında kuyruk; koltuk boşalınca 30 saniyelik rezervasyonla çağrı.\n\nMasa içinde:\n\nGece yarısına doğru altı \"kült mekân\" özelliği daha eklendi:\n\nGün biterken ürün kararı değişti: kulüp **üyelik zorunlu** olacak ve sistem açılmadan önce daha da geliştirilecek. Bu yüzden şu an canlıda kapı kapalı:\n\n`KULUP_ACIK = False`\n\n) oturma ve bekleme uçlarını 403 ile kesiyor.`True`\n\nyapıldığında mekân olduğu gibi geri gelecek, muhtemelen üyelik katmanıyla sarılmış olarak.Bir günde inşa edip aynı gün kapısına \"yakında\" tabelası asmak tuhaf görünebilir. Ama bence sıralama doğru: önce mekânın çalıştığını uçtan uca kanıtla (iki sekmeli WebRTC testleri dahil), sonra kimlerin gireceğine karar ver. Tersi, üyelik sistemini boş bir mekân için kurmak olurdu.\n\n**İyi çalışan şeyler**: yoklama tabanlı mimari beklediğimden sağlam çıktı; WebRTC sinyalini aynı kanaldan taşımak ayrı bir sinyal sunucusunu tamamen ortadan kaldırdı; bellek içi durum + \"her şey masada kalır\" ilkesi hem gizlilik hem operasyon yükü açısından ucuz.\n\n**Bilinen borçlar**: TURN yok; YouTube süre bilgisi yok (manuel geçiş); adisyon istemci tarafında (sekme açık ama kullanıcı yoksa 5+1 dakika koltuk işgali mümkün); yoklama aralıkları 30 kullanıcı üstü için yeniden düşünülmeli.\n\n**Akıbet**: Bu revizyondaki her özellik gözlem altında. Kullanılmayanlar kaldırılacak, tutunanlar üyelik sistemiyle birlikte v2'ye taşınacak. Bir sonraki bölümde muhtemelen ya üyelik mimarisini ya da bu deneylerden hangilerinin hayatta kaldığını yazacağım.\n\n*Soruları yorumlara bırakabilirsiniz; özellikle \"polling yerine WS kullansaydınız\" itirazlarını memnuniyetle tartışırım.*", "url": "https://wpnews.pro/news/revizyon-1-statik-yayin-sitesine-bir-gunde-deneysel-sosyal-katman-park-banki-caz", "canonical_source": "https://dev.to/gurayta/revizyon-1-statik-yayin-sitesine-bir-gunde-deneysel-sosyal-katman-park-banki-caz-kulubu-5730", "published_at": "2026-08-12 20:53:35+00:00", "updated_at": "2026-08-12 21:20:15.031288+00:00", "lang": "en", "topics": ["developer-tools"], "entities": ["Güray", "kafa1milyon.com", "nginx", "Cloudflare", "ThreadingHTTPServer", "Socket.io", "LocalStorage"], "alternates": {"html": "https://wpnews.pro/news/revizyon-1-statik-yayin-sitesine-bir-gunde-deneysel-sosyal-katman-park-banki-caz", "markdown": "https://wpnews.pro/news/revizyon-1-statik-yayin-sitesine-bir-gunde-deneysel-sosyal-katman-park-banki-caz.md", "text": "https://wpnews.pro/news/revizyon-1-statik-yayin-sitesine-bir-gunde-deneysel-sosyal-katman-park-banki-caz.txt", "jsonld": "https://wpnews.pro/news/revizyon-1-statik-yayin-sitesine-bir-gunde-deneysel-sosyal-katman-park-banki-caz.jsonld"}}