{"id":30347992,"url":"https://github.com/thecoderpinar/typing-speed-race","last_synced_at":"2025-08-18T17:30:19.061Z","repository":{"id":309073048,"uuid":"1035085793","full_name":"ThecoderPinar/typing-speed-race","owner":"ThecoderPinar","description":"Tek dosyalık yazma hızı oyunu: canlı WPM, doğruluk, hata ısı haritası, ghost, sekme içi lobi.","archived":false,"fork":false,"pushed_at":"2025-08-09T16:22:38.000Z","size":39,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-08-09T18:13:46.609Z","etag":null,"topics":["canvas","game","ghost","javascript","pratice","single-file","typing","web","wpm"],"latest_commit_sha":null,"homepage":"https://katmanrace.vercel.app","language":"HTML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ThecoderPinar.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-08-09T16:15:24.000Z","updated_at":"2025-08-09T16:22:46.000Z","dependencies_parsed_at":"2025-08-09T18:14:51.297Z","dependency_job_id":"f7efc9bd-b419-42b0-9687-13a05d59202a","html_url":"https://github.com/ThecoderPinar/typing-speed-race","commit_stats":null,"previous_names":["thecoderpinar/typing-speed-race"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/ThecoderPinar/typing-speed-race","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ThecoderPinar%2Ftyping-speed-race","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ThecoderPinar%2Ftyping-speed-race/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ThecoderPinar%2Ftyping-speed-race/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ThecoderPinar%2Ftyping-speed-race/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ThecoderPinar","download_url":"https://codeload.github.com/ThecoderPinar/typing-speed-race/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ThecoderPinar%2Ftyping-speed-race/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":271029759,"owners_count":24687485,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-18T02:00:08.743Z","response_time":89,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["canvas","game","ghost","javascript","pratice","single-file","typing","web","wpm"],"created_at":"2025-08-18T17:30:14.901Z","updated_at":"2025-08-18T17:30:18.941Z","avatar_url":"https://github.com/ThecoderPinar.png","language":"HTML","readme":"# Katman Hız Yarışı\n\nModern, hafif ve tamamen **tek dosyalık (index.html)** bir yazma hızı / WPM antrenman uygulaması. Sekme içi (aynı tarayıcı) lobi desteği, canlı WPM ve doğruluk grafikleri, karakter bazlı hata ısı haritası, sezon puanı mantığı (yerel), otomatik tema \u0026 font seçenekleri, hayalet (ghost) referans koşu ve başarım sistemi içerir.\n\n\u003e Online (WebSocket) modu proje sadeleştirme kararıyla bu sürümde kaldırıldı. Yerel (BroadcastChannel) temelli lobi hâlâ mevcut: Aynı tarayıcıda birden fazla sekme açıp aynı lobi koduna girerek senkron yarışabilirsiniz.\n\n## Özellikler\n- Tek HTML dosyasında tüm uygulama (harici bağımlılık yok)\n- WPM / Doğruluk gerçek zamanlı hesaplama\n- Canlı mini WPM trend grafiği + geçmiş performans grafiği\n- Hata ısı haritası (en çok hata yapılan karakterler)\n- İki mod: Süreli (timed) \u0026 Sonsuz (endless)\n- Zorluk türleri: short, long, mixed, code, numbers\n- Türkçe / İngilizce paragraf havuzları + özel metin girişi\n- Hata davranışı seçenekleri: normal, stop, block\n- Otomatik başlat \u0026 otomatik yeni paragraf\n- Sekme içi çoklu lobi (BroadcastChannel) — 2–10 kişi\n- Senkron başlangıç (geri sayım + hedef ts) mekanizması\n- Ghost (en iyi koşudan referans ilerleme)\n- Başarım (achievement) sistemi\n- Tema (dark, light, solarized, contrast) ve monospace seçenekleri\n- Geçmiş WPM \u0026 doğruluk kaydı (son 30 tur) + JSON dışa aktarma\n- Clipboard kopyalama yardımcıları (lobi kodu, geçmiş)\n\n## Hızlı Başlangıç\n1. Depoyu / klasörü indir veya kopyala.\n2. `index.html` dosyasını modern bir tarayıcıyla aç (Chrome, Firefox, Edge).\n3. Takma adını girip Kaydet'e tıkla.\n4. Solo mod için \"Solo Oyna\" ya da lobi için \"Lobiye Git\".\n5. Lobi oluştur: Ad gir -\u003e \"Yeni Lobi Oluştur\" -\u003e Kod otomatik oluşur.\n6. Başka sekmede aynı kodla katıl (maks 10 sekme / oyuncu).\n7. \"Herkesi Başlat\" (host) ile senkron geri sayım ve yarış.\n\n\u003e Not: Dosyayı `file://` protokolü ile açmak yeterli. İstersen basit bir HTTP statik sunucu kullan:\n\n```powershell\n# PowerShell (Python yüklüyse)\npython -m http.server 8080\n# Sonra http://localhost:8080/index.html\n```\n\n## Lobi Sistemi (Yerel)\n- Aynı tarayıcı içinde sekmeler arası iletişim `BroadcastChannel('tsr_'+code)` kullanır.\n- Lobi verisi `localStorage` içinde tutulur; sekmeler gerçek zamanlı üye listesi \u0026 ilerleme günceller.\n- Host lobi silerse diğer sekmeler bilgilendirilir (`DELETED`).\n- Start senkronu: Host `START` mesajında gelecekteki bir timestamp (NOW + 400ms) yayınlar, herkes aynı anda başlar.\n\n## Ghost (Hayalet) Nasıl Çalışır?\n- Geçmiş koşular içinde en yüksek WPM sonucu (metin + süre) referans alınır.\n- Karakter indeksleri doğrusal zaman payı ile haritalanır (basit model).\n- Yarış sırasında hayaletin o anda olması gereken karakter işaretlenir.\n\n## Başarımlar\n| ID | Koşul |\n|----|-------|\n| first_run | İlk skor kaydı |\n| 50wpm | \u003e= 50 WPM |\n| 80wpm | \u003e= 80 WPM |\n| 100wpm | \u003e= 100 WPM |\n| no_error | %100 doğruluk |\n| streak3 | Son 3 koşu \u003e= 40 WPM |\n\nVeriler `localStorage: tsr_achievements_v1` içinde saklanır.\n\n## Depolama Anahtarları\n| Key | Amaç |\n|-----|------|\n| tsr_profile_v1 | Kullanıcı profil (id + name) |\n| tsr_history_v1 | Son 30 skor geçmişi |\n| tsr_lobby_v1 | Aktif lobi kodu |\n| tsr_lobbies_v1 | Lobi meta + üyeler |\n| tsr_leaderboards_v1 | Lobi bazlı liderlik listeleri |\n| tsr_ghost_v1 | Ghost referans verisi |\n| tsr_achievements_v1 | Başarım durumları |\n\n## Klavye Kısayolları\n| Kısayol | İşlev |\n|---------|-------|\n| ESC | Sıfırla / iptal |\n| Tab | Yeni paragraf (devre dışı seçilebilir) |\n| Alt+L | Lobi görünümü |\n| Alt+G | Oyun görünümü |\n\n## Yapı / Kod Organizasyonu\nTek dosyada (index.html) şu bloklar:\n- CSS (tema + layout + bileşenler)\n- HTML (lobi paneli, oyun paneli, istatistikler)\n- JS\n  - Paragraf havuzları\n  - Config \u0026 tema uygulama\n  - Oyun döngüsü (state, tick, WPM/accuracy hesaplama)\n  - Grafik çizimleri (canvas ring + geçmiş + canlı WPM)\n  - Ghost / word timing\n  - Lobi yerel senkron (BroadcastChannel)\n  - Liderlik ve başarımlar\n  - Hata ısı haritası\n  - Export / clipboard yardımcıları\n\n## Geliştirme İpuçları\n- Refaktör istersen `index.html` içinden JS kodlarını modüler hale getirip `src/` altına bölebilirsin.\n- Canvas çizimlerinde performans: Yalnızca gerekli olduğunda yeniden boyutlandır (mevcut mantık bunu yapıyor).\n- Uzun vadede online modu tekrar eklemek istersen geçmiş WebSocket yapısını ayrı bir `client.js` içinde konumlandırman temiz olur.\n\n## Olası Gelecek İyileştirmeler\n- Gerçek sunucu destekli online lobi (yeniden)\n- Sunucu doğrulamalı skor tablosu (anti-cheat)\n- Çok dillilik için JSON sözlük dosyaları\n- Mobil dokunmatik optimizasyonları\n- Hedef metin içinde dinamik zor kelime renklendirme\n- Kişiselleştirilmiş antrenman (en çok hata yapılan karakterleri yoğun içeren paragraf üretimi)\n\n## Sorun Giderme\n| Belirti | Çözüm |\n|---------|-------|\n| Lobi görünmüyor / senkron değil | Sekmeyi yenile; lobi meta verisi bozulduysa `localStorage` temizle. |\n| Ghost görünmüyor | Önce en az 1 tam koşu yap; en iyi koşu kaydı olmalı. |\n| WPM düşük hesaplanıyor | 5 karakter = 1 kelime standardı; bu normal. |\n\n## Lisans\n(Lisans belirtmek istiyorsan buraya ekle. Örn: MIT)\n\n---\nİyi yarışlar! Geliştirme fikirlerin veya hata raporların için issue / mesaj bırakabilirsin.\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthecoderpinar%2Ftyping-speed-race","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fthecoderpinar%2Ftyping-speed-race","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthecoderpinar%2Ftyping-speed-race/lists"}