cd /news/developer-tools/revizyon-1-statik-yayin-sitesine-bir… · home topics developer-tools article
[ARTICLE · art-94349] src=dev.to ↗ pub= topic=developer-tools verified=true sentiment=· neutral

Revizyon 1: Statik yayın sitesine bir günde deneysel sosyal katman — park bankı, caz kulübü, fısıltı bulutu

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ı.

read3 min views1 publishedAug 12, 2026

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.

Bu 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.

Günün sonunda üç büyük blok çıktı ortaya:

Site tamamen statik HTML + nginx + Cloudflare. Bu revizyonda da kural bozulmadı. Sosyal özelliklerin tamamı şu üç ilkeyle yazıldı:

ThreadingHTTPServer

): 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

. Cloudflare arkasında WS oturumu yönetmek yerine, olay listesini ts > sonra

filtresiyle artımlı çekiyoruz. 30 eşzamanlı kullanıcı tavanında bunun maliyeti saniyede ~15 hafif JSON isteği; nginx bunu esner bile.

istemci (vanilla JS) ──2 sn'de bir──> nginx /bar/api/ ──> 127.0.0.1:8796
                                                          bellek içi durum:
                                                          MASALAR, KISILER,
                                                          BEKLEYEN, SINYAL

Makale sayfalarına bir günde eklenen etkileşim seti:

window.getSelection()

ile seçim, <mark>

sarma, DOM yolu + metin ofsetiyle LocalStorage'a yazma. Sayfa yeniden yüklendiğinde vurgular yeniden uygulanıyor. Sunucu hiçbir şey görmüyor.readTimeMinutes

ve mood

eklendi; liste sayfaları istemci tarafında filtreleniyor.data-definition

taşı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ğı).

Revizyon notu: Bu setin tamamı ölçüme tabi. Odak haritası gibi "güzel ama belki kimsenin fark etmeyeceği" özellikler ilk budama adayları.

Aynı 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?"

Kabul 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.

Teknik 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ı.

10 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ı.

Masa içinde:

Gece yarısına doğru altı "kült mekân" özelliği daha eklendi:

Gü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ı:

KULUP_ACIK = False

) oturma ve bekleme uçlarını 403 ile kesiyor.True

yapı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.

İ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.

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.

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.

Soruları yorumlara bırakabilirsiniz; özellikle "polling yerine WS kullansaydınız" itirazlarını memnuniyetle tartışırım.

── more in #developer-tools 4 stories · sorted by recency
── more on @güray 3 stories trending now
sponsored brought to you by zahid.host 4,200+ EU-deployed projects
reading about agents? ship yours in a single git push.

Run your AI side-project on zahid.host

EU-based hosting, git-push deploys, automatic HTTPS, no cold starts. Free tier with a custom domain — perfect for shipping the agent you just read about.

$git push zahid main
Live at https://your-agent.zahid.host
Get free account → Pricing
from €0/mo · no card required
LIVE [news/revizyon-1-statik-ya…] indexed:0 read:3min 2026-08-12 ·