tayfa
Arayüz Görsel Kimliği · v1

Bileşen kütüphanesi

Her bileşen css/components.css içinde tanımlı ve tüm değerleri css/tokens.css'ten alıyor. Bu sayfa canlı: CSS'i değiştir, sayfayı yenile, farkı burada gör. Next.js'e taşındığında aynı CSS kullanılacak.

1 · Renk

Zeminler dört kademeli: sayfa → yüzey → yükseltilmiş → katman. Bir kart, kartın içindeki kart ve modal farklı kademelerde olur; aksi hâlde arayüz düz ve amatör görünür.

TokenDeğerKullanımKontrast
--bg-base#07090BSayfa zemini—
--bg-surface#0F1114Kart, sidebar, topbar—
--bg-elevated#16191DDropdown, modal, hover—
--bg-overlay#1D2126Input, çip, ikincil buton—
--accent#FF8A1FBirincil buton, aktif durum8.1:1 AAA
--accent-fg#140A02Turuncu üzerindeki her şey8.3:1 AAA
--live#E00E40CANLI etiketi, izleyici noktası4.9:1 AA
--fg#F5F7F8Başlık, önemli metin16.1:1 AAA
--fg-muted#9AA2ABKanal adı, kategori, meta5.4:1 AA
--fg-subtle#676E76Zaman damgası, pasif — 14px+ ve dekoratif3.2:1

Tek kırmızı çizgi: --accent üzerine beyaz yazı yazılmaz (2.4:1). Button bileşeninde metin rengi parametresi yok — varyanttan türüyor, böylece bu hata kodda yapılamaz.

Nötr seçimi kasıtlı: zeminler hafif mavi-soğuk biaslı. Sıcak turuncu soğuk nötr üzerinde daha çok yanar. Nötr gri kullanılmadı. Açık temada turuncu #C45800'e koyulaşır — #FF8A1F beyaz zeminde 4.5:1'i geçmiyor.

1.5 · Üç tema

Sağ üstteki seçiciyle hepsini dene — bu sayfa canlı. Hiçbir bileşen tema bilgisine bakmaz; yalnızca token'lar yeniden tanımlanır.

CANLI12,4B İzle Takip
KOYU · #07090B · varsayılan
CANLI12,4B İzle Takip
AÇIK · #FFFFFF · turuncu koyulaşır
CANLI12,4B İzle Takip
GECE · #000000 · OLED / gece
TemaNasıl açılırNeden var
Koyu bare :root Taahhüt edilmiş varsayılan. Yayın platformu akşam kullanılır; koyu zemin videoyu öne çıkarır.
Açık [data-theme="light"] · prefers-color-scheme Gündüz, parlak ortam, ofis. Turuncu #C45800'e koyulaşır — #FF8A1F beyaz zeminde 4.5:1'i geçmiyor.
Gece [data-theme="night"] Tam siyah. OLED ekranda güç harcamaz ve oynatıcının çevresindeki letterbox sayfaya karışır — ekranda ışık veren tek şey video olur.

Gece temasının teknik farkı: tam siyahta gölge görünmez. Bu yüzden yükseklik (elevation) gölgeyle değil kenarlıkla taşınır — --border ve --border-strong bu temada bir kademe açılır, --shadow-* ise kenarlık tabanlı yeniden tanımlanır. İşletim sisteminde bu temanın karşılığı olmadığı için yalnızca seçiciyle açılır.

Tema seçici · segmented control

Aynı bileşen üründe de kullanılıyor: gecikme modu, ekip yayını düzeni, analitik dönem seçimi. Beş ve üzeri seçenek olursa <select>'e geçilir.

2 · Tipografi

Inter Variable arayüz, JetBrains Mono sayı ve teknik değer. Sayılar her zaman tabular-nums — izleyici sayacı güncellenirken genişlik zıplamaz.

Display · 32/40 · 700 — Kategori sayfası başlığı
H1 · 24/32 · 700 — Sayfa başlığı
H2 · 20/28 · 600 — Bölüm başlığı
H3 · 16/24 · 600 — Kart ve modal başlığı
Body · 14/20 · 400 — Varsayılan gövde metni. Satır uzunluğu metin bloklarında en fazla 72 karakter.
Body strong · 14/20 · 600 — Kanal adı, buton
Small · 13/18 · 400 — Meta, kategori çipi
Caption · 12/16 · 500 · 12.483 izleyici
MICRO · 11/14 · 700 · +0.04em — CANLI ETİKETİ, BADGE
Mono · JetBrains · live_42_7Kq9xZ… · 02:14:33 · 6000 kbps

Türkçe kuralı: büyük harf dönüşümü CSS text-transform: uppercase ile yapılmaz — i harfi I'ya dönüşür. Büyük harfli metinler i18n sözlüğünde hazır büyük yazılır. Bu sayfadaki uppercase'ler sadece Latin etiketlerde.

3 · Butonlar

Altı varyant, üç boyut. Her etkileşimli bileşen yedi durumu karşılamak zorunda: varsayılan, hover, focus-visible, active, disabled, loading, error.

3.1 · Varyantlar

.btn--primary … .btn--danger
primary
Ekranda en fazla bir tane. Ana eylem.
secondary
İkincil eylem — takip, paylaş, düzenle.
outline
Para harcatan eylem (abonelik, jeton) — dikkat çeker, baskın olmaz.
ghost
İptal, kapat, geri. Görsel ağırlığı yok.
live
Sadece yayın durdurma ve canlı müdahale.
danger
Geri alınamaz yönetici eylemi. Onay modalı zorunlu.

3.2 · Boyutlar

28 / 36 / 44px
İkon-butonlarda aria-label zorunlu

3.3 · Durumlar

hover · focus · disabled · loading

Loading durumunda genişlik sabit kalır — etiket korunur, spinner solda açılır. Buton daralıp genişleyince imleç kayar ve kullanıcı yanlış yere basar.

3.4 · Üç zeminde

KOYU TEMA
AÇIK TEMA · TURUNCU KOYULAŞIR
MARKA ZEMİNİ · BEYAZ YOK

4 · Etiket, çip, canlı noktası

Canlı noktası sistemin en çok tekrarlanan öğesi: CANLI etiketinde, izleyici sayacında, sidebar avatarında, kanal kartında. Hepsi aynı 6px daire, aynı kırmızı.

CANLI ÖNE ÇIKAN 👥 EKİP 18+ ✓ DOĞRULANMIŞ Yakında
Türkçe FPS Valorant Rekabetçi
Canlı · nabız atan 12.483 12,4B 02:14:33
canlı halkası · nötr · çevrimdışı · 28 · 64

4.1 · Varsayılan profil fotoğrafı

.avatar__fallback

Fotoğraf yüklemeyen kullanıcı gri bir silueti değil markanın T'sini taşır. Fotoğraf yüklendiğinde <img class="avatar__img"> kutuyu kaplar — koşullu sınıf yok, JavaScript yok, aynı bileşen iki durumu da karşılıyor.

varsayılan · 96
64
40
28 · sohbet
20
fotoğraf yüklenmiş
Kullanıcıya göre ton · --avatar-tint

Ton, kullanıcı adının hash'inden sohbet renk paletiyle aynı 12 renkten seçilir. Böylece sohbette, sidebar'da ve yorumlarda aynı kişi hep aynı renkle görünür — fotoğrafsız kullanıcılar da birbirinden ayırt edilebilir kalır. Varsayılan ton marka turuncusu.

Yükleme akışı
Profil fotoğrafı Kare, en az 300×300 · PNG, JPG veya WebP · en fazla 2 MB

5 · Form alanları

En fazla 140 karakter.
Yanlış kategori keşifte görünürlüğü düşürür.
Geçerli bir e-posta adresi gir.
Hesap doğrulandıktan sonra açılır.
Arama Ctrl K

5.1 · Anahtarlar

5.2 · Yayın anahtarı

en kritik alan
Bu anahtarı kimseyle paylaşma. Paylaşan kişi senin kanalından yayın açabilir.

6 · Gezinme

tayfa
Sekmeler
Filtre pilleri

7 · Kartlar

Kanal kartı ürünün en çok tekrarlanan bileşeni. Hover'da kenarlık accent'e döner, kart 2px yukarı kalkar ve thumbnail animasyonlu önizlemeye geçer.

8 · Oynatıcı kabuğu

Kontrol barı 2.5 saniye hareketsizlikte gizlenir; tam ekranda imleç de gizlenir. Buffer göstergesi 400ms gecikmeli açılır — kısa takılmalarda ekranda flaş olmaz.

CANLI 12,4B Kaynak · 1080p60
02:14:33
Space/K oynat · M sessiz · F tam ekran · T teatral · Alt+X klip · ↑↓ ses

9 · Sohbet

Yeni mesajlarda animasyon yok — 1000 mesaj/dakikada animasyon tarayıcıyı öldürür. Mesajlar 16ms tick ile toplu render edilir.

Sohbet
📌 Turnuva kuralları kanal panelinde. Küfür = direkt ban.
M zeynepmod: hoş geldiniz tayfa
12 ahmetk: bu round kritik
serkan kanala abone oldu! (3 ay üst üste)
pelin: inanılmaz oynuyorsunuz
V canan: @burakyayinda ace geldi mi
deniz, 500 jeton gönderdi: "devam edin!"
T burakyayinda: teşekkürler 🙏
<mesaj silindi>
1 emre: klip alıyorum
Yavaş mod açık · 3 sn
Rozetler
T M V 1 12 24
Yayıncı · moderatör · VIP · tier 1/2/3 abone kıdemi (ay) Kullanıcı adı renkleri
●●● ●●● ●●● ●●●
12 renkli set, hash ile dağıtılır. Koyu zeminde okunabilirliği doğrulandı; abonelerde kullanıcı seçer.

10 · Veri gösterimi

Anlık izleyici 12.483 ▲ %12 · son 1 saat
Yeni takipçi 842 ▲ %4
Bu yayın geliri ₺4.280 ▼ %6
Ortalama izleme 24 dk —
Yayın sağlığı · ölçerler
Bitrate kararlılığı5.940 / 6.000 kbps
Düşen kare%2,4
GPU transcode slot14 / 20
KullanıcıDurumKayıtHarcama
burakyayinda Aktif 12 Mar 2026 ₺1.240
elifcan Aktif 4 Nis 2026 ₺380
spamhesap Askıda 28 Eki 2026 ₺0

11 · Geri bildirim

Veri çeken her ekran dört durumu karşılamak zorunda: yükleniyor (skeleton), boş, hata, dolu. Tek başına "Yükleniyor…" yazısı veya "Veri yok" kabul edilmez.

✓ Klip oluşturulduBağlantı panoya kopyalandı.
! Yayın anahtarı geçersizOBS ayarlarını kontrol et.
burakyayinda yayına başladıValorant · Türkiye finali
Henüz kimseyi takip etmiyorsun Beğendiğin yayıncıları takip et, canlı olduklarında haber ver.
Yayın yüklenemedi Bağlantını kontrol et, sorun devam ederse birazdan tekrar dene.
Yayın anahtarını yenile

Mevcut anahtar anında geçersiz olur ve aktif yayın kesilir. OBS'te yeni anahtarı girmen gerekir.

Skeleton

Skeleton gerçek düzene uyar. Spinner sadece butonda ve oynatıcıda kullanılır.

12 · Canlı yayın ekranı

Ürünün ana ekranı: üstte header, solda takip edilen kanallar, ortada oynatıcı, sağda sohbet. Üç sabit genişlik de token'dan geliyor — topbar 56, sidebar 240, sohbet 340 — böylece burada kurulan ekran ile Next.js'te kurulan ekran ayrışamıyor.

tayfa Ctrl K
CANLI 12,4B Kaynak · 1080p60
02:14:33
Türkiye finali — son maç, 4 kişilik tayfa yayını burakyayinda ✓ Valorant Türkçe Turnuva
12.483 izleyici 2 sa 14 dk 340 klip
CANLI YAYIN EKRANI · giriş yapmış · ekip yayını topbar 56 · sidebar 240 · sohbet 340 · min 1180px

12.1 · Sohbet: misafir ve üye

.chatgate

Misafir sohbeti okur — mesajlar gerçek zamanlı akmaya devam eder, sadece giriş alanı kapıyla değişir. Giriş modal olarak açılır, yayın arkada oynamaya devam eder ve giriş sonrası sayfa yenilenmez: mevcut WebSocket bağlantısı yazma moduna yükseltilir.

Sohbetmisafir
Mzeynepmod: hoş geldiniz tayfa
ahmetk: bu round kritik
pelin: inanılmaz oynuyorsunuz
emre: klip alıyorum
Canlı yayına katılmak için giriş yap Hesabın yok mu? 20 saniyede aç.
Sohbete-posta doğrulanmamış
Mzeynepmod: hoş geldiniz tayfa
ahmetk: bu round kritik
pelin: inanılmaz oynuyorsunuz
emre: klip alıyorum
E-postanı doğrula, sohbete katıl Doğrulama atılabilir hesap spam'ini engelliyor. Google veya Microsoft ile girersen bu adım atlanır.

13 · Giriş ve kayıt

Uygulama içinde auth her zaman modal — mevcut sayfadan ayrılmak yasak, yayın arkada oynamaya devam eder. /giris ve /kayit ayrıca gerçek sayfa olarak var: doğrudan link, e-posta bağlantısı ve arama motoru için.

tayfa Tekrar hoş geldin Sohbete katılmak, takip etmek ve klip almak için giriş yap.
veya e-posta ile
Hesabın yok mu? Kayıt ol
tayfa Tayfaya katıl İzlemek için hesap gerekmiyor — sohbet, takip ve klip için gerekiyor.
veya e-posta ile
✓ Müsait · 3–25 karakter, küçük harf ve alt çizgi
En az 10 karakter. Uzunluk karmaşıklıktan önemli.
Yaş kapısı için gerekli. Sonradan sadece destek değiştirebilir.
Devam ederek Kullanım Şartları ve Gizlilik Politikası'nı kabul etmiş olursun.
Zaten hesabın var mı? Giriş yap
GİRİŞ VE KAYIT · modal olarak açılır, sayfa değişmez Google · Microsoft · Discord · e-posta

Sağlayıcı markaları paletin dışında. Google, Microsoft ve Discord'un giriş yönergeleri markanın kendi renkleriyle görünmesini şart koşuyor — bunlar ürün genelinde renk sabiti yazılan tek yer. İkonlar solda tek kolonda hizalı, metin kalan alanda optik ortalı; her sağlayıcının yönergesinin istediği düzen bu.

sıra
Google → Microsoft → Discord. Discord oyuncu kitlesinde en yüksek dönüşüm, ama Google ve Microsoft daha geniş erişim
OAuth akışı
Popup, redirect değil — oynatıcı pozisyonu ve sohbet geçmişi korunur
e-posta doğrulama
OAuth'ta sağlayıcıdan doğrulanmış gelir → anında sohbet. E-posta ile kayıtta doğrulama şart
hesap birleştirme
Aynı e-posta ile ikinci sağlayıcı bağlanırsa hesaplar birleştirilir, ikinci hesap açılmaz
şifre
argon2id · en az 10 karakter · karmaşıklık kuralı yok, uzunluk ölçülür
Apple
Mobil uygulamada zorunlu (F3) — App Store kuralı

14 · Yayıncı paneli

Yayıncının en çok açtığı ekran yayın ayarları — tek işi OBS'e bağlanmayı kolaylaştırmak. Bu yüzden anahtar en üstte, yanında tek tıkla OBS profili indirme.

tayfa Yayıncı Paneli
Yayındasın 2 sa 14 dk · Valorant 12.483 izleyici 5.940 kbps %2,4 düşen kare
OBS Bağlantı Bilgileri
Bu anahtarı kimseyle paylaşma. Paylaşan kişi senin kanalından yayın açabilir.
son kullanım: 2 sa önce · Ana PC
Yayın Sağlığı
Bitrate kararlılığı5.940 / 6.000 kbps
Düşen kare%2,4
Keyframe aralığı2,0 sn · doğru
Anlık izleyici 12.483 ▲ %12 · son 1 saat
Yeni takipçi 842 ▲ %4
Bu yayın geliri ₺4.280 ▼ %6
Ortalama izleme 24 dk —
YAYINCI PANELİ · yayın ayarları panel nav 208 · min 1180px

15 · Kodlama kuralları

DOĞRU

Renk, boşluk, radius, süre — hepsi token. var(--accent), var(--space-4).

DOĞRU

Boşluk ölçeği: 4 / 8 / 12 / 16 / 20 / 24 / 32 / 40 / 48 / 64. Arası değer yok.

DOĞRU

Geçiş süreleri: mikro 100, normal 150, panel 200, sayfa 250ms. Daha uzunu yok.

DOĞRU

Semantik HTML. <button> tıklanır, <a> gider.

YASAK

Sabit renk kodu (#fff) veya Tailwind varsayılan paleti (bg-gray-800).

YASAK

transition: all. Hangi özellik geçiş yapıyorsa o yazılır.

YASAK

Hover/focus/disabled durumu olmayan etkileşimli öğe.

YASAK

<div onClick>, alert(), dangerouslySetInnerHTML.

Taşıma planı: bu CSS olduğu gibi Next.js'e giriyor. tokens.css Tailwind v4'ün @theme bloğuna bağlanacak (--color-accent: var(--accent)), böylece hem yardımcı sınıflar hem bileşen CSS'i aynı token'ı okuyacak. Bileşenler React'e çevrildiğinde sınıf adları aynı kalır — .btn.btn--primary.