Changelog · 44 sürüm

Neler değişti.

Vellum Tweaks her sürümle daha iyi oluyor. Aşağıda son güncellemelere — hangi özellik geldi, hangi pürüz giderildi, neyi yeniden düşündük — kronolojik olarak göz atabilirsin.

44Sürüm
149Yenilik bölümü
380Madde
  1. v0.22.2 — Ses fidelity'sini bozan iki tweak kaldırıldı

    Ses önemli. Bass boost, virtual surround, loudness equalization, Netflix HD audio gibi şeyleri 5-15ms latency için feda etmek mantıklı bir trade-off değil. v0.20.0'da bu yola çıkmıştık, geri çekiyoruz.

    Kaldırılan tweak'ler

    • **`hardware.audio-disable-enhancements`** ("Tüm enhancement'lar kapalı") — Bass boost, virtual surround, loudness EQ tüm cihazlarda kapatılıyordu. Ses fidelity'sini ciddi düşürüyor.
    • **`hardware.audio-disable-protected-dg`** ("DRM korumalı pipeline kapalı") — Protected Audio DG kapatılınca Netflix/Spotify HD audio düşük kalitede çalıyordu. ~1-3ms için kabul edilemez bir trade.

    Kalan ses tweak'i

    • **`hardware.audio-comm-no-duck`** ("Çağrı sırasında ses kısma off") — Bu kalsın, çünkü ses kalitesine HİÇ dokunmuyor. Sadece Discord/Teams aktifken Windows'un oyun sesini %80 düşürmesini engelliyor (ducking davranışı). Pozisyonel ses bütünlüğü için kritik, fidelity'ye etkisi yok.

    Etki

    • Hardware sayfası → Ses subtab'ı: 3 → 1 tweak
    • Web `/tweaks` katalogu güncellendi: tweak count 76 → 74 (catalog'dan tek kaynak okuyor)
    • Daha önce bu iki tweak'i uyguladıysan: registry değerleri yerinde kalır ama UI'den artık kontrol edilemez. Manuel revert için: HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\MMDevices\Audio\Render\* altındaki `{1864a4f8-...},3` değerlerini sil + AudioSrv restart, ve HKLM\SYSTEM\CurrentControlSet\Services\AudioEndpointBuilder\Parameters\DisableProtectedAudioDG değerini sil.
  2. v0.22.1 — Switch ON state yeşile çekildi

    Önceki sürümde Switch ON state'i beyaz track + dark thumb idi. Daha berrak görünüyordu ama "active = aktif" semantik sinyalini taşımıyordu. Şimdi Switch açıkken success-yeşili (`var(--success)` #50e3c2) track + white thumb — uygulamanın geri kalanındaki "aktif/uygulandı" semantiğiyle (KAYITLI rozeti, latency dashboard sağlık dot'u, success toast) tutarlı.

    Detay

    Etki: tüm tweak kartları (Hardware/Network/Gaming/System/Privacy), GameDetailModal'daki sessionOnly + True Stretch + Process Suspender + GPU Override toggle'ları, Settings'teki autoUpdate + Discord Rich Presence toggle'ları — hepsinde aynı "yeşil = aktif" sinyali.

    • **Track**: `bg-success` (#50e3c2) ON state'inde
    • **Thumb**: white sabit (her iki state'de) — track'in renk değişimi state cue'sunu tek başına taşıyor
    • **Outer glow**: `0 0 10px -2px rgba(80,227,194,0.5)` — küçük boyutta da fark edilir aktif vurgusu
    • **Inner ring**: `inset 0 0 0 1px rgba(0,0,0,0.18)` koyu yeşil iç ring → flat blob değil, tactile pill
    • **Focus outline** beyazdan yeşile çekildi — ton tutarlılığı
  3. v0.22.0 — Discord Rich Presence + Boost Geçmişi

    İki yeni özellik; ikisi de aynı boost lifecycle event stream'ine bağlı.

    Discord Rich Presence

    Boost & Play çalışırken Discord status'ünde Vellum görünür:

    ``` Oynuyor: Vellum Tweaks Boosting · Valorant 13 tweak applied ```

    Ne zaman ne gösterir:

    Açma/kapama: **Settings → Entegrasyonlar → Discord Rich Presence** (default açık).

    Mekanikler:

    • **Application name** (Oynuyor satırı): "Vellum Tweaks" — oyunun adı DEĞİL. Discord developer portalında kayıtlı app name'den gelir.
    • **Details** (alt satır): "Boosting · <oyun adı>". Hangi oyunun boost edildiğini söyler.
    • **State** (en alt satır): "{N} tweak applied". Apply chain ilerledikçe sayı canlı olarak güncellenir.
    • **Elapsed timer**: boost başladığı andan itibaren tickliyor.
    • Local IPC transport (Windows named-pipe) — OAuth yok, network çağrısı yok.
    • Discord açık değilse, app id register edilmemişse, ya da bağlantı düşerse — **fail-soft**. Boost akışını hiç bloklamaz, sessizce log'a düşer.
    • Tweak apply chain'i sırasında activity her başarılı tweak'ten sonra güncellenir (sayı canlı).
    • Settings'ten kapatınca activity hemen temizlenir, IPC pipe kapanır.

    Boost Geçmişi (`/history`)

    Sidebar → "Geçmiş". Her Boost & Play oturumunun timeline'ı:

    Mekanikler:

    Latest oturum dot'u rail'de pulse animasyonuyla, in-flight oturum dot'u da pulse ile.

    • **Oyun adı + zaman** (Bugün 14:32 / 8 May 09:14 vb.)
    • **Tweak sayısı** (uygulanan), **süre** (boost'un başından sonuna), **revert sayısı**
    • **Exit chip** — normal / launcher zaman aşımı / 20 dk üst sınır / başlatılamadı / iptal / hata. Her durum kendi tone'unda (success-yeşili, warning-amber, danger-red).
    • **Flag chip'leri** — bu oturumda hangi opsiyonel feature'lar açıktı: Seans / True Stretch / Suspend / GPU Override.
    • `<userData>/boost-history.json` üzerinde yaşar. Son 50 oturum saklanır, eskiler düşer.
    • Oturum başlangıcında satır açılır, tweak'ler uygulandıkça incremental update olur (crash mid-chain → "8/13 tweak'i uygulamış" doğru kayıtlı kalır).
    • Oturum bitince exit reason + revert count stamp'lenir.
    • App boot'ta `reconcileOnBoot()` çağrılır: önceki çalışmadan kalan in-flight satırlar varsa "error" olarak finalize edilir + açıklayıcı mesaj eklenir.
    • Stats: timeline başında toplam oturum, toplam tweak, toplam süre.

    Boost lifecycle hooks

    İki yeni feature aynı altyapıdan besleniyor:

    ``` boostAndPlay() ├── recordHistoryStart() ──→ history.json (in-flight row açılır) ├── discord.setBoostActivity() ──→ Discord pipe (etkinlik yazılır) ├── apply tweak loop: │ ├── recordHistoryApplied() ──→ incremental update │ └── discord.setBoostActivity() ──→ count update ├── (game runs) └── exit (clean / launcher-timeout / hard-ceiling / cancel / error / no-revert) ├── recordHistoryEnd() ──→ exit reason + revert count └── discord.clearActivity() ──→ Discord status temizlenir ```

    `endTelemetry` helper'ı her revert site'ında deterministic — historyId'yi clearActive'den önce yakalıyor, böylece async revert akışında bile doğru satır finalize ediliyor.

    Diğer

    • Yeni IPC namespace: `IPC.Discord.SetEnabled`, `IPC.History.{List,Clear}`
    • Yeni paketler: `discord-rpc` + `@types/discord-rpc`
    • `Discord App ID`: env üzerinden (`VELLUM_DISCORD_APP_ID`) veya kod-içi placeholder. Production deploy'unda gerçek app id ile replace edilmeli.
    • Settings store'a `discordRichPresence` pref'i eklendi (persistent localStorage), useEffect ile main'e sync.
  4. v0.21.5 — Switch görünmezlik bug'ı + tweak kart "ikiz GÜVENLİ" düzeltmesi

    İki gerçek tasarım hatası ve birkaç tutarlılık iyileştirmesi.

    Switch görünmezlik bug'ı (toggle ON state)

    Switch'in ON state'inde track beyaz (`--accent: #ffffff`) ve thumb da beyaz idi → thumb track'in içine karışıp kayboluyor, kullanıcının gözüne "düz beyaz şişkin pill" olarak gözüküyordu.

    Etki: Network/Gaming/Hardware/System/Privacy hepsindeki tweak kartlarındaki Switch'ler. Onboarding flow'daki sessionOnly toggle. GameDetailModal'daki True Stretch + Override toggle'ları. WhatsNew + UpdateAvailableModal opsiyonel toggle'ları.

    • **Thumb ON state** — `bg-white` → `bg-bg-base` (koyu charcoal). Beyaz track üzerinde keskin koyu thumb, app'in geri kalanındaki "white tile → dark icon" dilini kuruyor.
    • **Track ON state** — `inset 0 0 0 1px rgba(0,0,0,0.08)` ince iç ring eklendi, beyaz slab karanlık çevreye karşı düz görünmüyor.
    • **Thumb shadow** — ON state'inde shadow biraz daha derin (`rgba(0,0,0,0.55)` vs `0.4`), thumb track üzerinde "yapışık" değil "kalkık" duruyor.

    TweakCard — ikiz "GÜVENLİ" rozeti

    Risk pill ("GÜVENLİ" / "ORTA" / "İLERİ") YANINDA bir de Warning/Safe chip vardı. Tweak'in açık bir warning text'i yoksa Safe chip "Güvenli" yazıyordu — ki bu zaten risk pill ile aynı bilgiyi tekrar ediyordu.

    • **Safe chip kaldırıldı** — Warning chip artık yalnızca tweak'in hand-authored `warning` text'i varsa görünür. Yoksa risk pill tek başına yeterli.
    • **Warning chip rengi danger-red → warning-amber** — uyarılar hata değil ihtar. Aynı semantic ayrım modal'da da uygulandı (uyarı callout'u red'den amber'e).

    TweakDetailModal — "Önerilir" rozeti kontrast iyileştirmesi

    Tüm kart + modal yüzeyi artık tek tutarlı görsel sözlükte konuşuyor: koyu surface → beyaz vurgu, beyaz tile → koyu içerik, semantic colors (success-green, warning-amber, danger-red) yalnızca ait oldukları yerlerde.

    • "Önerilir" pill rengi `var(--accent-soft) = #e5e5e5` translucent white bg → inverted white-gradient + koyu charcoal text. Diğer "şu anki" / "yeni sürüm" / "HAZIR" pill'leriyle aynı dilde tek tutarlı görünüm.
  5. v0.21.4 — Sistematik kontrast & renk audit'i

    Beyaz-on-beyaz "görünmez metin" hataları logo dışında 11 farklı yerde daha vardı. Hepsini hallettik. Aynı paste'te kalan amber tinted geriye kalan akıntıları da temizledik. Splash ekranı tamamen yenilendi.

    Düzeltilen kontrast hataları (white-on-white invisible)

    • **HesapGroup avatar inicialleri** — `text-white` on white-gradient circle → `#0a0a0a` koyu charcoal. İlk harf görünür artık.
    • **SidebarAccountChip avatar inicialleri** — aynı bug, aynı fix.
    • **UpdateAvailableModal modal header ikonları** — Sparkles / RefreshCw / Loader2 / AlertTriangle hepsi `text-white` idi, white tile içinde → `#0a0a0a`. Error fazı dahil hepsi tek dilde.
    • **Settings → Pending Update card ikon** — Icon `text-white` → `#0a0a0a` (error fazı kırmızı tile, beyaz kalıyor).
    • **WhatsNew header Sparkles** — text-white → `#0a0a0a`.
    • **LoginFlowModal step icon** — confirming/verifying/default fazlarında ShieldAlert/ShieldCheck/Sparkles white-on-white → `#0a0a0a`. Success (yeşil) ve error (kırmızı) için beyaz korundu.
    • **LoginFlowModal step indicator (active)** — Loader2 white-on-white → `#0a0a0a`.
    • **BulkActionDialog running phase Loader2** — white-on-white → `#0a0a0a`.
    • **Button primary variant** — `.aurora-glow` zaten `color: var(--bg-base)` (koyu) yapıyordu ama `text-white` Tailwind class'ı override ediyordu. Class kaldırıldı — artık primary butonların üstündeki yazı gerçekten okunuyor.

    Amber/Orange residue kaldırıldı

    • **OnboardingScreen "Hesabınla bağlan" CTA box-shadow** — `rgba(245,166,35,0.22)` (amber) → nötr `rgba(0,0,0,0.45)` drop shadow.
    • **OnboardingScreen ambient orbs** — top-left amber drift + bottom-right cyan → ikisi de neutral white wash. Welcome canvas tek bir tonal sistemde konuşuyor artık.
    • **TitleBar VellumMark** — eski chevron path `M2 3l4 6 4-6` + outdated double-tile yapısı → yeni V `M4 5 L10 5 L16 19 L22 5 L28 5 L16 27 Z` matte slab. Sidebar/Onboarding/Splash ile aynı dil.
    • **WhatsNew "Şu Anki" rozeti** — v0.21.3'te zaten düzeltilmişti (kayıt için).
    • **Profiles "HAZIR" rozeti** — amber `#f5a623` border + bg + text → inverted white-gradient pill koyu charcoal text ile. "KAYITLI" rozeti success-green korundu (semantik).
    • **WeightBar (almanac)** — amber bar `#f5a623 → #ffd28a` → nötr `#ffffff → #d4d4d4`. White glow.

    Splash screen redesign

    • **Logo** — eski `M4 6l8 12 8-12` thin chevron + `rgba(245,166,35,*)` amber rings → yeni V solid-fill 32-viewBox path + matte charcoal slab. Onboarding/Sidebar/TitleBar ile bitebit aynı.
    • **Aurora orbs** — amber + cyan → ikisi de neutral white. Tek tonalite.
    • **Progress bar** — amber `#f5a623 → white` → tüm-beyaz `rgba(255,255,255,0.4) → #ffffff` + soft white glow.
    • **`--accent` CSS variable** kaldırıldı (artık hiç kullanılmıyor).
    • **2 yeni tip ekran fact'ı** — "Win11 24H2 timer fix" ve "PCIe ASPM" şu anki çalışma listesinden.

    Etki

    UpdateAvailableModal, WhatsNew, Settings'tek pending update kartı, LoginFlow, BulkActionDialog, AccountChip, HesapGroup ve SplashScreen — uygulamanın user-facing yüzey alanının büyük bir parçası — hepsi tutarlı bir okunabilir "white tile = dark icon" diline geçti. Tek sapma kalan semantic warning (amber `--warning` token, sadece gerçek tehlike sinyalleri için) ve semantic success (green `--success`, "olumlu durum" göstergeleri için).

  6. v0.21.3 — WhatsNew "Şu Anki" badge monokrom'a çekildi

    Küçük tutarlılık düzeltmesi: WhatsNew (sürüm notları) modalındaki "Şu Anki" rozetinde geriye kalan amber tinted kullanım monokrom palete uyarlandı.

    Değişiklik

    • **`Şu Anki` badge** — `color: #ddb87e` (eski amber) → koyu charcoal `#0a0a0a` üzerine white-gradient zemin. v0.21.1'deki version pill'i ve v0.21.2'deki logo ile aynı dilde — tek bir tutarlı "şu anki" sinyal görünümü.
  7. v0.21.2 — Logo redesign

    Marka V'si yenilendi: kenar turuncuları gitti, V daha belirgin oldu, gövde mat.

    Yeni V

    • **Tek path solid fill V** — eski iki-stroke chevron yerine tek bir solid path. İç notch (16, 19) ve dış uç (16, 27) üzerinden çizilen geometrik V; dolgu üst→alt `#ffffff → #c4c4c4` matte gradient.
    • **Charcoal slab** — `#1c1c1c → #0d0d0d` 155° gradient. Üstte 1px iç highlight (yukarıdan tek ışık kaynağı hissi), 1px iç border, soft drop shadow. Hiç kromatik aksan yok.
    • **Halo kaldırıldı** — onboarding ekranındaki amber radial gradient → nötr beyaz ambient (rgba(255,255,255,0.10) → 0). V'yi tek odak noktası yapar.

    Etkilediği yerler

    Aynı path her iki yerde — gerektiğinde başka yerlere de aynı `M4 5 L10 5 L16 19 L22 5 L28 5 L16 27 Z` path'i ile genişletilebilir. Web tarafı da aynı geometriye geçti (vellumtweaks.com).

    • `OnboardingScreen.tsx` — Hoş geldin ekranındaki büyük lockup
    • `Sidebar.tsx` — uygulamanın sol kenar çubuğundaki küçük marka
  8. v0.21.1 — Update modal kontrast düzeltmesi

    Hızlı bir görsel hata düzeltmesi: yeni sürüm güncelleme modalında ve Settings → Pending Update kartında "yeni sürüm" pill'i beyaz arka plan üzerine beyaz yazı çiziyordu — pill görünüyor ama versiyon numarası okunamıyordu.

    Düzeltme

    • **UpdateAvailableModal version pill** — `#0a0a0a` text on white-gradient background. Inverted Vercel-style yüksek kontrast.
    • **Settings → Pending Update card** — aynı düzeltme.

    Görsel iyileştirmeler

    CSS keyframes: `update-version-breath`, `update-arrow-shift` (`globals.css`).

    • **Mevcut → Yeni mini-card** yeniden düzenlendi: tek satır pill çift yerine "Mevcut" / "Yeni" overline label'ları + boyut hiyerarşisi (yeni pill belirgin daha büyük). Hangisinin neye karşılık geldiği bir bakışta okunur.
    • **Yeni sürüm pill** 2.4 saniyelik soft breath animasyonu — outer glow nefes alır, kullanıcının gözünü hedefe çeker. Ok da aynı cadence ile sağa doğru 2px kayar (yön hissi).
    • Card'a üst hairline highlight eklendi — modal'ın kendi üst kenarıyla aynı ışık dilini konuşur.
  9. v0.21.0 — Latency Dashboard, Win11 Timer Fix, 5 Yeni Tweak

    Bu sürüm araştırma odaklı: 2026 başında çıkan Win11 24H2 davranış değişikliklerine ve son dönemde duyrulan VBS/HVCI gaming perf etkisine yanıt veriyor. Plus canlı bir Latency Dashboard.

    Latency Dashboard (yeni sayfa)

    Kenar çubuğunda yeni "Gecikme" sekmesi. 8 hedef sunucuya canlı RTT/jitter/packet-loss probe (her 2 saniyede): Cloudflare DNS, Google DNS, Steam, Riot Games NA, Riot Games EUW, Battle.net, Epic Games, Discord gateway.

    **Probe mekaniği:** TCP-handshake tabanlı (port 443) — ICMP firewall'larına takılmaz. SYN/SYN-ACK round-trip RTT'yi yaklaşık verir, üretim oyun sunucularının çoğunda ICMP'den daha güvenilir.

    **Her hedef kartı:**

    Pause/devam butonu — anlık görüntü incelemek için.

    • Headline RTT (canlı)
    • 30 örnek pencereli ortalama
    • Jitter (standart sapma)
    • Packet loss %
    • 60 saniyelik sparkline (LineChart subtle mod)
    • Sağlık dot'u: yeşil (<40ms), sarı (40-100ms), kırmızı (>100ms veya kayıp >10%)

    5 yeni tweak (araştırma destekli)

    ### Win11 24H2 timer fix (system, safe) `HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\kernel\GlobalTimerResolutionRequests = 1`

    Win10 v2004 ve özellikle Win11 24H2 `timeBeginPeriod()` çağrısını sessizce per-process moduna aldı. Oyunların 0.5-1ms tick beklediği yerde 15.625ms (64Hz) verir → input lag, jitter, choppy frame pacing. Bu değer kernel'a "tüm sürece global uygula" der — ntoskrnl.exe boot'ta okur, restart gerek. Yüksek-impact safe tweak.

    ### Hypervisor launchtype off (system, moderate) `bcdedit /set hypervisorlaunchtype off`

    VBS/HVCI/Memory Integrity/Credential Guard kapanır. Tom's Hardware ve bağımsız benchmark'lar RTX 40 / Ryzen 7000 sınıfı donanımda 5-15% gaming perf iadesi ölçüyor. Microsoft kendi tavsiye ediyor.

    **Açma:** Hyper-V VM, Windows Sandbox, Credential Guard kullanmıyorsan. Enterprise/iş bilgisayarında kapatma.

    ### TCP CTCP congestion provider (network, safe) `netsh int tcp set supplemental Internet congestionprovider=ctcp`

    Win10+ varsayılanı CUBIC — yüksek bandwidth bulk transfer için tunl. CTCP gecikmeye dayalı erken backoff yapar; oyun paket akışında RTT belirgin daha düz. Sadece Internet template'i etkiler, LAN trafiği değişmez.

    ### DNS SMHNR off (network, safe) `HKLM\SOFTWARE\Policies\Microsoft\Windows NT\DNSClient\DisableSmartNameResolution = 1`

    Smart Multi-Homed Name Resolution kapanır. DNS sorguları sadece primary adapter'a gider. Multi-NIC sistemlerde (VPN/WiFi+Ethernet) DNS yanıt süresi belirgin hızlanır, oyun launcher'larının connection setup cycle'ı kısalır.

    ### NIC RX/TX buffers tuning (network, safe) Aktif NIC için `Set-NetAdapterAdvancedProperty -DisplayName 'Receive Buffers' -DisplayValue 2048` (default 256), TX 1024. Burst paket trafiği sırasında ring-buffer dolması azalır → drop azalır → in-game RTT spike ve rubber-banding düşer. Driver "Receive/Transmit Buffers" advanced property'sini açmıyorsa no-op olur (apply başarılıysa ne kadar NIC etkilendiğini söyler).

    Diğer

    • IPC: yeni `IPC.Latency.{ListTargets, ProbeAll}` namespace
    • Yeni main process modülü: `src/main/network/latency.ts` (TCP probe)
    • LineChart komponenti reuse — sparkline için subtle mod
    • Sidebar'da yeni Radar ikonu / "Gecikme" rotası
    • Prior shipping: v0.20.0'da gelen Process Suspender, Audio Latency kategorisi, GPU vendor tweak'leri (TDR / PCIe ASPM), per-game graphics overrides hâlâ aktif
  10. v0.20.0 — Process Suspender, Ses Kategorisi, GPU Override'ları

    Boost & Play artık çok daha derin: arka plan uygulamaları kernel seviyesinde dondurur, oyuna özel grafik politikaları yazar, ve donanım sayfasına yepyeni ses kategorisi gelir.

    Process Suspender — arka planı dondur, RAM iadesi al

    Boost & Play sırasında Discord, Spotify, Chrome, Edge gibi arka plan uygulamalarını NtSuspendProcess ile gerçek anlamda dondurur. Kapatmıyor — donduruyor: süreçler RAM'de duruyor ama 0% CPU tüketiyor, Working Set hızla page out ediliyor, ve oyun çıkınca tek seferde kaldığı yerden devam ediyor (Discord aramayı düşürmez, Chrome sekmelerin "session restore" diyalogu gelmez).

    **Donduralacaklar listesi:** Discord/PTB/Canary, Spotify, Slack, Telegram, Skype, Zoom, WhatsApp, Chrome, Edge, Firefox, Opera, Brave, Vivaldi, Outlook, Word, Excel, PowerPoint, Notion, Obsidian, Dropbox, OneDrive.

    **Donduramayacaklar (özellikle):** Steam, Riot Client, Battle.net, Ubisoft Connect, EA App, Rockstar, Epic, GOG — oyun launcher'ları kritik, asla dondurulmuyor.

    GameDetailModal'da yeni toggle: "Arka planı dondur · Discord · Spotify · tarayıcılar". Tercih per-profile saklanıyor. Crash recovery: Vellum oyun ortasında ölürse bir sonraki açılışta donmuş süreçleri otomatik çözer.

    Ses Latency kategorisi (Donanım → Ses)

    Hardware sayfasına yeni "Ses" alt-tab'ı, 3 tweak:

    • **Çağrı sırasında oyun sesi kısma** (safe) — UserDuckingPreference=3. Discord/Skype/Teams aktifken Windows'un oyun sesini %80 düşürmesini engeller. Pozisyonel ses bütünlüğü korunur.
    • **Tüm enhancement'lar kapalı** (safe) — Bass boost, virtual surround, loudness equalization gibi APO efektleri tüm render endpoint'lerinde kapatılır. AudioSrv restart ediliyor; çıkış kuyruğunda 5-15ms latency iadesi.
    • **DRM korumalı pipeline kapalı** (moderate) — Protected Audio DG yolu kapatılır, render kuyruğunda 1-3ms latency. Netflix HD Audio düşük kalitede çalabilir — sadece rekabetçi oyun için.

    Per-game grafik override'ları

    Boost-time'da oyuna özel `HKCU\SOFTWARE\Microsoft\DirectX\UserGpuPreferences` girişi yazılıyor. 3 yeni toggle GameDetailModal'da:

    Oyun çıkınca eski değer geri yükleniyor (snapshot bazlı). URI-only oyunlar için detection enrichment pass'i eklendi — Steam/Riot URI ile başlayan oyunların exe yolu profile detect rule'larından çözülüyor, böylece override'lar bu oyunlarda da çalışıyor.

    • **Auto-HDR zorla** — `AutoHDREnable=1`. SDR oyunları HDR olarak render eder.
    • **VRR zorla** — `VRROptimizationEnable=1`. G-Sync/FreeSync'i pencere modunda da etkin tutar.
    • **dGPU zorla** — `GpuPreference=2`. Hibrit sistemlerde discrete GPU'ya yönlendirir, iGPU'ya düşmeyi engeller.

    GPU sistem tweak'leri (vendor-aware)

    Hardware → GPU altına 2 yeni:

    Vendor-locked driver setting'lerinin çoğu (NVIDIA Reflex, Low Latency Mode, Threaded Optimization, AMD Anti-Lag) registry değil binary blob'larda — bu turda direct erişilemediği için pas geçildi.

    • **TDR timeout 10s** (moderate) — Windows GPU watchdog süresi 2s'den 10s'ye. Path-tracing / ML compute yüklerinde sahte sürücü resetleri önlenir. NVIDIA + AMD discrete only.
    • **PCIe ASPM kapalı** (safe) — Aktif güç planında PCIe ASPM disable edilir (powercfg üzerinden). dGPU'ya her erişimde 1-50µs uyandırma gecikmesini siler. NVIDIA + AMD discrete only.

    Diğer

    • IPC: `SetGpuOverride` → `SetBoostPref` (genelleştirildi, backgroundSuspend ile aynı kanaldan)
    • detect.ts: URI-source oyunlar için executablePath enrichment (Steam/Riot URI ile başlayan oyunlar artık exe yolunu da getiriyor)
    • prefs.ts: yeni generic `setBooleanPref` helper, `setTrueStretch` da onu kullanıyor
    • v0.19.0'da gelen multi-monitor True Stretch fix + 5 yeni launcher chain (Battle.net/Ubisoft/EA/Rockstar/GOG) + restore point + panic revert UX hâlâ aktif
  11. v0.19.0 — Çoklu Monitör, Yeni Launcher'lar, Otomatik Geri Yükleme Noktası

    Üç ayrı yön: True Stretch artık doğru ekranı hedefliyor, Boost & Play 5 yeni launcher'ı tanıyor, ve riskli tweak'ler kendi kurtarma ağını kuruyor.

    True Stretch — sadece birincil monitöre

    Önceki sürüm SetDisplayConfig çağrısını her aktif ekrana uyguluyordu. Çoklu monitörlü kurulumlarda bu, oyun oynamadığın 16:9 ikinci ekranını da gereksiz yere "stretched" moduna sokuyordu.

    Artık SetDisplayConfig sadece masaüstü konumu (0,0)'da olan kaynağa yazıyor — Windows'un birincil monitör tanımı bu. Snapshot/restore tüm pathler için aynen çalışıyor (savunmaya yönelik, kullanıcı kabloyu çıkarırsa sapma kalmasın diye).

    Boost & Play — beş yeni launcher

    Riot Client + Epic dışında hiçbir launcher chain'i tanımıyorduk. Oyun launcher arkasından açılınca watcher 90s içinde game process göremezse "process gözlemlenemedi" verip tweak'leri geri alıyordu — Battle.net, Ubisoft, EA, Rockstar, GOG akışlarında bu sürekli oluyordu.

    Artık detection sırasında exe yolundan launcher tanınıyor, Boost watcher launcher canlı olduğu sürece deadline'ı her 5 dk öteliyor:

    20 dakikalık tavan korundu — launcher arkaplanda asılırsa tweak'ler süresiz kalmıyor.

    • **Battle.net** — Battle.net.exe, BlizzardError.exe, Agent.exe (Overwatch 2, Warzone, Diablo IV, vb.)
    • **Ubisoft Connect** — UbisoftConnect.exe, upc.exe (Rainbow 6, AC, vb.)
    • **EA App / Origin** — EADesktop.exe, Origin.exe (Apex, Battlefield, vb.)
    • **Rockstar Launcher** — Launcher.exe (GTA V, RDR2)
    • **GOG Galaxy** — GalaxyClient.exe

    Sistem geri yükleme noktası — otomatik + manuel

    İleri risk tweak'lerin (MSI mode, C-states off, mitigations off, vb.) gerçek BSOD potansiyeli var ve şu ana kadar tek geri dönüş yolu Vellum'un kendi yedek dosyalarıydı. Yedekler kayıt değerlerini geri yüklüyor ama Windows boot etmiyorsa onlara erişemezsin.

    Artık ileri risk bir tweak uygulanmadan önce Windows sistem geri yükleme noktası otomatik oluşturuluyor. Saatte bir thrott le — arka arkaya 5 ileri risk tweak uygularsan tek snapshot alınıyor, Windows zaten 24 saatte bir geri yükleme noktasına izin verdiği için bu doğal.

    **Ayarlar → Bakım ve dosyalar → Snapshot al** — manuel, anlık geri yükleme noktası al. Vellum dışında riskli iş yapacaksan kendi sigortanı koyabilirsin.

    **Ayarlar → Tehlikeli bölge → Hepsini geri al** dialogu artık kaç tweak'in geri alınacağını başlığa yazıyor. Hiç uygulanmamışsa buton disabled — yanlışlıkla tıklamayı engeller.

    Diğer

    • Game source labels: GameCard ve GameDetailModal yeni launcher etiketlerini gösteriyor (BATTLE.NET, UBISOFT, EA, ROCKSTAR, GOG)
    • DetectedGame['source'] union'a yeni değerler eklendi (TypeScript paylaşılan tip)
  12. Boost watcher artık launcher chain'leri tanıyor

    Riot Client → Valorant gibi iki kademeli launch akışlarında "Oyun process gözlemlenemedi" hatası tarihe karıştı. Boost watcher artık state machine olarak çalışıyor: launcher uptime'ı takip ediyor, oyun fiilen spawn olana kadar deadline'ı esnek tutuyor.

    Düzeltmeler

    Boost & Play eskiden tek bir exe'yi (örn. `VALORANT-Win64-Shipping.exe`) izliyordu, 60 saniye içinde görünmezse tweak'leri geri alıyordu. Riot Client'tan oyun spawn olması için kullanıcının login + queue + agent select süresince beklemesi gerektiğinden bu deadline neredeyse her zaman dolmadan oyun başlamıyordu.

    Yeni watcher per-source launcher exe listesi tanıyor:

    Her poll iterasyonunda hem oyun hem launcher exe'leri tek bir `tasklist` çağrısıyla kontrol ediliyor. Launcher canlıysa appear deadline 5 dakika ileri itiliyor — kullanıcının queue + agent select süreci asla timeout'a düşmüyor. Oyun bir kez spawn olunca watcher "exit'i bekle" moduna geçiyor; launcher kapansa bile devam ediyor.

    • **Riot**: `RiotClientServices.exe`, `RiotClient.exe`, `RiotClientUx.exe`
    • **Epic**: `EpicGamesLauncher.exe`, `EpicWebHelper.exe`
    • **Steam/Manuel**: launcher takibi yok (Steam zaten bağımsız çalışır)

    Güvenlik kapağı

    Riot Client tipik olarak background daemon olarak hayatta kalır — bu da launcher up sayıldığı için deadline'ın sonsuza kadar uzaması anlamına gelirdi. 20 dakikalık hard ceiling eklendi: oyun bu süre içinde hiç spawn olmazsa tweak'ler net biçimde geri alınıyor ("Oyun 20 dk içinde açılmadı" mesajıyla).

    Küçük düzeltmeler

    • İlk appearDeadline 60s'den 90s'ye çıkarıldı (yavaş soğuk launcher start'ları için pay)
    • Polling cadence 6s'den 4s'ye düşürüldü, "oyun yeni kapandı" daha hızlı algılanıyor
    • Polling artık her exe için ayrı PowerShell process'i değil, tek tasklist çağrısıyla N exe kontrol ediyor
    • Hata mesajları artık gerçek başarısızlık nedenini söylüyor: "launcher kapandı ama oyun açılmadı" vs "process hiç görülmedi"
  13. True Stretch artık Windows API üzerinden — NVCP gerekmiyor

    NVIDIA Control Panel'i açıp 4 click yapma zorunluluğu tamamen kalktı. Vellum artık Windows'un kanonik `SetDisplayConfig` Win32 API'sini doğrudan çağırıyor; NVIDIA/AMD/Intel — hangi GPU vendor'da olursan ol, True Stretch tek bir toggle ile çalışır.

    Yeni yöntem: SetDisplayConfig

    Daha önce True Stretch için NVIDIA'nın `nvlddmkm\State\DisplaySettings\<EDID-hash>` registry kayıtlarını override ediyorduk. Sorun: NVIDIA bu subkey'leri ancak NVCP'de scaling ayarı yapıldıktan sonra üretiyor ve EDID-türevli hash undocumented — bizim sentezleyemediğimiz tek nokta.

    Yeni yol Windows'un display stack'ine doğrudan yazıyor: `QueryDisplayConfig` ile aktif tüm display path'lerin scaling değerlerini okuyor, hepsinde `DISPLAYCONFIG_SCALING_STRETCHED` (=3) flag'ini set edip `SetDisplayConfig` ile uyguluyor. Driver bunu kendi native scaling moduna çeviriyor — NVIDIA'da full-screen GPU scaling, AMD/Intel'de eşdeğer mod. Snapshot/restore otomatik: oyun çıkışında her path'in orijinal scaling değeri geri yazılıyor.

    NVCP açma sihirbazı artık tetiklenmiyor — toggle'a tıklarsın, kaydolur, Boost &amp; Play'e basarsın, çalışır.

    Migration notu

    True Stretch artık tüm GPU vendor'larında görünür (NVIDIA-only kısıtlaması kalktı). Eski NVIDIA registry yolu kod-bazında fallback olarak duruyor — SetDisplayConfig 0 active path raporlarsa (rare edge case) ve kullanıcı NVIDIA'daysa devreye giriyor.

    Snapshot dosyaları artık iki format destekliyor: `dispconfig-pending.json` (yeni) ve `nvidia-scaling-pending.json` (eski). App boot'ta her ikisi de kontrol edilir, hangi format varsa restore edilir, dosya temizlenir.

    Küçük düzeltmeler

    • True Stretch toggle'ında probe/setup-gate kaldırıldı; doğrudan kaydediliyor
    • Modal tooltip "NVIDIA scaling" yerine artık "SetDisplayConfig API üzerinden Boost & Play sırasında devreye sokar" yazıyor
    • Fail durumunda kullanıcıya net mesaj: "Ekran sürücüsü stretched scaling'i reddetti — sürücüleri güncellemeyi dene"
  14. True Stretch için tek tıkla otomatik kurulum

    NVIDIA Control Panel'de manuel adımları okumak ve tıklamak yerine artık tek tıkla başlatılabilir bir kurulum sihirbazı var. Vellum NVCP'yi sana açar, registry'i poll eder, sen Apply'a bastığın an otomatik fark eder ve True Stretch'i devreye sokar.

    Akıllı kurulum

    True Stretch toggle'ını ilk açtığında Vellum önce NVIDIA registry probe'unu çekiyor. Eğer per-monitor scaling subkey'ler hazırsa toggle direkt kaydediliyor. Eğer driver henüz config oluşturmadıysa (en yaygın senaryo) tek seferlik kurulum dialog'u açılıyor.

    Dialog'da **NVCP'yi Aç** butonuna basıyorsun:

    NVCP'nin nereye kurulduğunu Vellum kendi buluyor (Program Files veya Program Files (x86) altındaki standart nvcplui.exe path'i).

    • Vellum `nvcplui.exe`'yi senin için başlatıyor
    • Registry'i 2 saniye aralıklarla, 90 saniyeye kadar dinliyor
    • Sen NVCP'de "Adjust desktop size and position → Scaling → Full-screen + Override → Apply" yapıyorsun
    • Apply'a basar basmaz Vellum subkey'lerin oluştuğunu fark ediyor, dialog otomatik "Hazır" durumuna geçiyor ve True Stretch kaydediliyor

    Küçük düzeltmeler

    • True Stretch toggle'ı kapatma (OFF) artık probe çekmiyor — sadece açma akışında kurulum kontrolü yapılıyor
    • Setup dialog 90 saniyede subkey üretimi göremezse net bir timeout mesajı veriyor ("NVCP'de Apply'a bastığından emin ol")
    • Setup esnasında dialog'u kapatırsan poll loop'u temiz biçimde iptal ediliyor
  15. True Stretch artık reg.exe ile çalışıyor

    PowerShell'in `HKLM:\` registry provider'ı NVIDIA driver state path'ini "yok" gibi gösterip yanlış hata mesajına neden oluyordu. NVIDIA scaling modülü artık `reg.exe` ile çalışıyor — Windows'un kanonik registry CLI'ı, version-agnostic, PS provider tuhaflıklarından muaf.

    Düzeltmeler

    True Stretch akışı artık `Test-Path` yerine `reg.exe query` ile path varlığını doğruluyor. Probe path tree'sini kademe kademe iniyor: `nvlddmkm` servisi → `\State` subkey'i → `\DisplaySettings` → per-monitor subkey'ler. Hangi seviyede koptuğu net biçimde raporlanır, kullanıcıya o seviyeye özel bir çözüm yolu gösterilir.

    Apply ve restore yolları da `reg.exe add` ve `reg.exe delete` üzerinden çalışıyor. Eskiden DWORD okumalarında PowerShell `Set-ItemProperty` kuralları sıkılaştırılmış sürümlerde sessiz hata veriyordu — artık değer.

    Küçük düzeltmeler

    • DWORD parse bug'ı: `parseInt('0x2', 16)` yanlışlıkla 0 dönüyordu (radix 16 explicit verildiğinde `0x` prefix yutulmuyor); artık `Number()` ile doğru parse ediliyor
    • Probe artık her seviyenin durumunu electron-log'a yazıyor — gelecekte uzaktan teşhis için breadcrumb trail'i hazır
    • Tüm reg.exe çağrıları `/reg:64` parametresiyle 64-bit registry view'ını zorluyor, WoW64 redirection edge case'lerini atlatıyor
  16. True Stretch sorununa net bir çözüm yolu

    NVIDIA driver güncel olmasına rağmen "kayıt anahtarı bulunamadı" hatası alanlar için: aslında sorun driver değil, NVIDIA'nın per-monitor scaling subkey'lerini Control Panel'de scaling ayarı bir kez yapılana kadar oluşturmaması. Vellum artık bu üç durumu ayırıp her birine somut bir çözüm yolu gösteriyor.

    Düzeltmeler

    True Stretch probe'u artık üç farklı "neden çalışmadı" durumunu birbirinden ayırıyor: driver state path yok, registry erişimi reddedildi, ya da en yaygın olan — path var ama henüz hiç scaling konfigürasyonu yok. Hepsinin remedy mesajı farklı.

    En sık karşılaşılan "boş subkey" durumu için tek seferlik çözüm açık biçimde belirtiliyor: NVIDIA Control Panel'i aç, "Adjust desktop size and position" → Scaling sekmesi → "Full-screen" seç → Apply. Bu NVIDIA driver'ı per-monitor subkey'leri üretmeye zorlar; sonra Vellum True Stretch çalışır.

    Küçük düzeltmeler

    • Yönetici yetkisi olmadan registry yazımı reddedilirse mesaj artık net olarak "Vellum'u yönetici olarak yeniden başlat" diyor
    • Probe sonucu artık scaling.ts içinde tipli bir union (`'no-driver-key' | 'empty' | 'forbidden' | 'ok'`) — gelecekte modal'da pre-flight hint olarak da gösterilecek
  17. True Stretch sessizce hata vermiyor artık

    True Stretch tercihi açıkken Boost &amp; Play çalıştırınca özelliğin gerçekten uygulanıp uygulanmadığı belirsizdi. Artık her başarısızlık nedeni ekrana gelir, kullanıcı neyin neden olduğunu anında görür.

    Düzeltmeler

    True Stretch'in atlama nedenleri artık net bir uyarı toast'ı olarak yüzeye çıkıyor: NVIDIA GPU yoksa, sürücü kayıt anahtarı bulunamazsa, yönetici yetkisi olmadan HKLM yazımı reddedilirse veya seans-sonu geri alma kapalıysa, uygulama sessizce atlamak yerine sebebini bildirir.

    Tasarım

    • True Stretch artık modal'ın ortasında kapı gibi duran bir karta değil, alt aksiyon barında "Sadece bu seansta" toggle'ının hemen altına konumlanmış minimal bir satır
    • Modal dikey olarak daha kısa, akış daha sade

    Küçük düzeltmeler

    • AMD/Intel kullanıcıları için "yakında" disclaimer'ı kaldırıldı; True Stretch zaten yalnızca NVIDIA'da görünüyor
    • Footer artık dar pencerelerde dikey, geniş pencerelerde yatay düzene geçiyor
  18. Oyun kartı tıklamasında boş ekran düzeltildi

    Tek satır neden: `GameDetailModal` içindeki bir Zustand selector her render'da yeni bir `{}` literal'i döndürüyordu — React 18 bunu unstable snapshot olarak algılayıp infinite render loop'a girmesine sebep oluyordu (React minified error #185).

    Kritik düzeltme

    Oyun kartına tıklayınca arayüz tamamen kaybolup boş bir ekran kalıyordu. Nedeni, oyun detayı modal'ı her render'da Zustand store'dan yeni bir referans alıyor, bu da React'in render limit guard'ını tetikliyordu. Selector primitive boolean'a indirildi — modal artık tek tıkta sorunsuz açılıyor.

    Küçük düzeltmeler

    • `prefsByProfile` boş olduğunda True Stretch toggle'ı stabil değer kullanıyor
    • Gerekli olduğu durumlarda ErrorBoundary toast'ları daha okunaklı hale getirildi
  19. Oyun kartı boş ekran sorununa kalıcı çözüm

    Önceki iki teşhis (conditional unmount, animation fill-mode) yanlıştı. Asıl sorun: GameDetailModal render sırasında bir hata fırlatınca, `<App>` ağacında ErrorBoundary olmadığı için Suspense alt-ağacının komple çöküp kullanıcının charcoal grid'den başka bir şey görmemesiydi. Tüm bu sınıf hatalara karşı kalıcı olarak korunduk.

    Düzeltmeler

    • **Render-phase hata yakalama**: Yeni `ErrorBoundary` componenti eklendi. App.tsx'teki tüm route'lar bunun içine alındı; Gaming.tsx'teki GameDetailModal kendi local boundary'sine sarıldı. Modal patlasa bile sayfa kalır, kullanıcıya toast ile gerçek hata mesajı görünür, modal data temizlenir.
    • **GameDetailModal defensive paths**: `profile.tweakIds` undefined gelirse `??[]` ile, `profile.genre` boşsa fallback ile, `SOURCE_LABEL[game.source]` eşleşmezse raw source ile çalışır artık. Üç ayrı potansiyel throw site optional chaining ile güvenliğe alındı.

    Neden boş ekran oluyordu

    React 18, render fonksiyonu içinde uncaught exception fırlarsa en yakın ErrorBoundary'ye kadar tüm ağacı unmount eder. Boundary yoksa root unmount edilir. App.tsx'teki Suspense fallback bile çalışmaz çünkü hata Suspense'ten sonra fırlar. Ağacın altında mount eden her şey siliniyor → kullanıcı sadece body'nin charcoal grid'ini görüyor. Modal'ın kendisinin görünmemesi de aynı nedenle, çünkü modal render edilmeden hata atılıp tüm tree unmount olunca portal da mount olmuyor.

  20. Tüm purple kalıntıları + amber/cyan accent + modal animasyon kilidi

    Tema baştan aşağı çalışsın, hiç purple/gold kalmasın diye 268 inline gradient ve bg değeri taranıp neutralize edildi. Yerine amber ve cyan ile spesifik vurgu noktaları eklendi.

    Düzeltmeler

    • **Oyun kartına basınca ekranın gitmesi**: Dialog keyframe'lerinde `animation-fill-mode` yoktu. Açılış animasyonu kesilirse modal opacity 0'da kilitleniyordu — Tailwind transform ile keyframe transform'u arasındaki yarış da sahnenin tamamen görünmez kalmasına yol açıyordu. Modal ve overlay keyframe'lerine `both` fill-mode eklendi, GameDetailModal'a daha kontrastlı charcoal gradient surface verildi.
    • **Onboarding'de kalmış purple drift**: Welcome ekranındaki iki büyük orbital glow ve brand mark'taki mauve→bronze gradient temizlendi. Yerine subtle amber + cyan halo geldi, brand mark charcoal yüzeye amber inner ring ile çiziliyor.

    Tasarım

    - **Amber `#f5a623`**: Onboarding halo, splash atmosphere, brand mark inner ring, `HAZIR` profil badge, Cleanup `WeightBar`, splash progress bar. - **Cyan `#50e3c2`**: Dashboard `LineChart` (CPU/RAM grafiği), `KAYITLI` profil badge, splash counterpoint orb. - Geri kalan her şey beyaz/charcoal/border-default ölçeğinde.

    • **218 inline replacement + 50 background tint**: 31 component dosyasında purple `#b47ad9`, gold `#c9a063`, gold-text `#d6b27a`, ve eski Velvet Plum bg tint'leri (`rgba(31,21,38)`, `rgba(20,14,26)`, `rgba(37,26,45)` vb.) charcoal-uyumlu equivalents'e taşındı.
    • **TweakCard ikon container'ı silindi**: Ağ/Oyun/Sistem tweak kartlarındaki kutulu ikonlar gitti. İkon artık sadece beyaz dış-çizgili (1.6 stroke, plain `text-text-primary`).
    • **Spesifik accent renkleri**:
    • **Splash screen**: Eski purple→gold orb'lar amber+cyan'a çevrildi, brand mark charcoal+amber ring'e döndü.
  21. Charcoal palette · login persistence · oyun kartı bug

    Tema baştan aşağı vellumtweaks.com ile aynı charcoal monokrom paletine geçti. Login sürekli atma ve oyun kartına basınca ekranın gitmesi sorunları kapatıldı.

    Düzeltmeler

    • **Login sürekli atma**: Vellum hem admin hem normal kullanıcı modunda çalıştığı için Windows DPAPI kasası sürekli context değiştiriyor, eski kod token dosyasını silip kullanıcıyı atıyordu. Artık admin ve user için ayrı şifrelenmiş kasa, decrypt fail dosyayı silmiyor, primer fail edince diğer kasa fallback olarak deneniyor.
    • **Oyun kartına basınca ekran gitme**: GameDetailModal'ın conditional mount'u ile Radix Dialog'un open prop'u tight-coupled idi; kapanma animasyonu başlayınca state hemen `null` oluyor, modal unmount, ekran flash. Detail data ve open-flag ayrıldı, 280 ms timer ile veri drop ertelendi.

    Tasarım

    • **Charcoal monokrom palette**: Önceki Velvet Plum (mauve+gold) yerine Vercel-tarz charcoal #141414 base, surface stack #1a/#1f/#26, borders #1f/#2c/#404040, pure-white text. Tüm `aurora-*` ve `vlm-*` utility'leri içerideki gradient referansları nötralize edildi — hiçbir component dosyasına dokunmaya gerek kalmadı.
    • **Geist + Geist Mono**: Sora/Manrope/JetBrains font ailesi siteyle senkron Geist + Geist Mono'ya değiştirildi.
    • **Status renkleri**: success #50e3c2, warning #f5a623, danger #ee0000 — websiteyle aynı ton.
  22. True Stretch — NVIDIA scaling override Boost & Play akışında

    Per-game True Stretch toggle artık `GameDetailModal`'da. NVIDIA sistemde `Boost & Play` başlarken mevcut scaling registry snapshot'lanır, `Scaling=2` (Full-Screen) + `ScalingMode=1` (GPU) yazılır, oyundan çıkınca eski haline döner. AMD/Intel kullanıcısı şimdilik "yakında" notu görüyor. Crash recovery: app kapatılır halde oyun çalışmaya devam ederse, bir sonraki Vellum açılışında orphan snapshot algılanıp restore edilir. CS / Valorant / 4:3 oynayanlar için manuel NVIDIA Control Panel yolculuğu kalkıyor.

    Yeni özellik

    • **GameDetailModal'da True Stretch satırı** — sadece `gpuVendor === 'nvidia'` ise gözüküyor. Per-game toggle, `userData/game-prefs.json`'da persist ediliyor.
    • **Boost & Play akışı** — `sessionOnly && nvidia && wantsStretch && monitors.length > 0` dört kapısını geçince `Scaling=2 + ScalingMode=1` her NVIDIA-bağlı monitör subkey'ine yazılır.
    • **Auto-revert on game exit** — mevcut exit-watcher (process polling) bittiğinde scaling snapshot disk'ten okunup restore edilir.
    • **Orphan recovery** — `recoverPendingScalingSnapshot()` app boot'ta `nvidia-scaling-pending.json` varsa restore eder. Crash veya kill-9 senaryosunda kullanıcı stretched halde mahsur kalmıyor.

    Mimari

    • `src/main/system/gpu-vendor.ts` — `Get-CimInstance Win32_VideoController` ile vendor detect, NVIDIA precedence, sonuç process lifetime cache'li.
    • `src/main/nvidia/scaling.ts` — `readScalingSnapshot/applyFullScreenScaling/restoreScaling` PowerShell helpers. Tampered snapshot key injection guard (`/^[A-Za-z0-9_\-{}]+$/`). Per-op success/fail counter `RESULT $ok $fail` sentinel ile partial-revert observability.
    • `src/main/games/prefs.ts` — `game-prefs.json` mem-cached read + write-chain serialized writes. Disk write success'inden sonra cache update (atomicity).
    • `src/main/games/boost.ts` — boost-start'ta apply, üç cleanup path'inde (watcher, launch-fail, cancelBoost) revert. cancelBoost guard'lı (broadcastExit revert throw'a karşı korunur).
    • `IPC.Games.{ListPrefs, SetTrueStretch}` + preload bridge.
    • `SystemInfo.gpuVendor: 'nvidia'|'amd'|'intel'|'other'` shared type.

    12 commit özet

    1. `feat(system)`: GPU vendor detect + getInfo 2. `feat(games)`: prefs.ts disk persistence 3. `fix(games)`: prefs writes serialized + cache after disk success 4. `feat(nvidia)`: scaling snapshot/apply/restore 5. `fix(nvidia)`: snapshot key injection guard + partial-revert tracking 6. `fix(nvidia)`: ops.length on PS spawn failure 7. `feat(ipc)`: games.listPrefs + games.setTrueStretch 8. `feat(games)`: prefsByProfile store + setTrueStretch action 9. `feat(games)`: True Stretch toggle row in GameDetailModal 10. `feat(boost)`: apply at boost-start, revert on exit 11. `fix(boost)`: cancelBoost broadcastExit guard 12. `feat(boost)`: orphan recovery on app boot

    Bilinen sınırlar

    • AMD ve Intel scaling override'ı sonraki cycle'larda. AMD ADL SDK / registry yolu farklı, Intel daha az dokümante.
    • Game native res'te çalışırken stretch tetiklenmez — driver scaling kullanmıyor (kullanıcı kendi config'inde 1024×768 gibi sub-native bir res seçmiş olmalı).
    • Per-game custom resolution forcing kapsam dışı — oyunun kendi config'iyle ayarlanır.
    • NVIDIA driver registry path'i (`HKLM\SYSTEM\CurrentControlSet\Services\nvlddmkm\State\DisplaySettings`) R5xx-R6xx driver'larda stable; major driver overhaul'de fallback path eklenebilir.
    • UAC denied yazımda apply sessizce skip edilir, oyun normal akışla launch eder (game tweak'leri uygulanmaya devam eder).
  23. Update modal akışı sağlamlaştı, BulkActionDialog progress + 5 yeni tweak

    Üç koordineli iş: (1) Update modal'ın "İndir → Yeniden başlat" akışındaki bug düzeldi — autoUpdater polling 'available'ı tekrar fire ettiğinde modal artık prompt'a düşmüyor. (2) "Önerilenleri uygula" gibi tüm bulk işlemler için yeni `BulkActionDialog` — progress bar, mevcut tweak adı, başarılı/hata sayaçları, iptal, sonunda hatalı kayıtları yeniden deneme. (3) 5 yeni tweak: Game DVR comprehensive off, GPU pref high, Snap Assist off, scheduled tasks cleanup, Reserved Storage off (DISM).

    Update modal — 'available' re-emit bug fix + install transition

    Bug: kullanıcı "İndir" → indirme bitiyor → "Yeniden başlat" gözüküyor → tıklanınca modal tekrar "İndir"e dönüyor → 2. tıklamada işliyor.

    Sebep: electron-updater her 10 saniyede bir `update-available` event'ini re-emit ediyor (download bitse bile, install pending olduğu için "available" sayıyor). Eski handler her event için `setAvailable` çağırıp phase'i geriye sarıyordu.

    Fix:

    Net etki: download sonrası tek tıkla restart işliyor; "ikinci kez tıklamak" diye bir adım kalmadı.

    • Modal handler'ı artık `phase === 'downloading' | 'downloaded' | 'installing'` ve aynı versiyon ise duplicate `available` event'lerini ignore ediyor.
    • Yeni `'installing'` phase'i — kullanıcı "Yeniden başlat"a basınca anında set edilir, button "Yeniden başlatılıyor…" spinner'a dönüşür, modal Esc/click-outside ile kapanmıyor.
    • UpdateListener (toast) de aynı korumayı uyguluyor — modal'la çakışan toast bildirimi atılmaz.
    • Settings sayfasındaki PendingUpdateCard 'installing' phase'i için disabled spinner gösteriyor.

    BulkActionDialog — progress + live status + cancel + retry

    Yeni component `BulkActionDialog` — eski `ConfirmDialog`-için-bulk akışını üç-fazlı bir state machine ile değiştiriyor:

    | Faz | Görüntü | |---|---| | **Confirm** | Title · Description · Risk distribution grid · Restore-point checkbox (advanced > 0 ise default ON) · Vazgeç / Onayla | | **Running** | Spinner · Mevcut tweak adı · `i / N · %P` progress bar · "✓ X başarılı · ✗ Y hata" sayaçları · İptal et | | **Done** | "✓ X başarılı · ✗ Y hata" özet · Hatalı kayıtların listesi (her biri kendi hata mesajıyla) · Kapat / **Hatalıları yeniden dene** |

    İptal cooperative — loop her item arasında `cancelRef.current`'i kontrol eder. Mid-flight item bitirilir, kalanlar "İptal edildi" olarak işaretlenir.

    **Wired into:**

    Tek-tek toggle akışı (kart üzerindeki Switch) eskisi gibi anlık kalıyor — sadece bulk akışı yeni dialog kullanıyor.

    • `CategoryPage` (Network · System · Privacy · Hardware) → "Önerilenleri uygula" + "Hepsini geri al"
    • `Gaming` page → aynı iki bulk action
    • `Dashboard` → "Hızlı optimize" CTA

    5 yeni tweak

    ### Oyun

    ### Sistem

    Hepsi `recommended: true`, çoğu safe risk. Game DVR comprehensive ve GPU preference high'da Win+G ve hybrid GPU pil ömrü için warning chip'leri var.

    • **`gaming.game-dvr-comprehensive-off`** — `GameDVR_Enabled`, `GameDVR_FSEBehaviorMode`, `AppCaptureEnabled`, `AudioCaptureEnabled`, `HistoricalCaptureEnabled` (HKCU) + `AllowGameDVR` group policy (HKLM) + `AutoGameModeEnabled` + `ShowStartupPanel` (GameBar HKCU). Mevcut `gaming.disable-gamebar`'dan çok daha kapsamlı; Win+G hotkey'ini ve Xbox capture broker'ını tamamen susturuyor.
    • **`gaming.gpu-perf-preference-high`** — `HKCU\Software\Microsoft\DirectX\UserGpuPreferences\DirectXUserGlobalSettings = "GpuPreference=2;"`. Hybrid laptop'larda oyunlar varsayılan olarak dGPU'da açılır. Per-app override hâlâ kazanır.
    • **`gaming.disable-snap-assist`** — `SnapAssist=0`, `EnableSnapBar=0`, `EnableSnapAssistFlyout=0`, `JointResize=0`. Win11 maximize-button hover popup'ı + snap suggestion overlay'leri kapanır. DWM yükü düşer.
    • **`gaming.scheduled-tasks-cleanup`** — 12 telemetry/CEIP scheduled task `schtasks /Change /Disable` ile kapatılır (Compatibility Appraiser, ProgramDataUpdater, KernelCeipTask, UsbCeip, WinSAT, DiskDiagnostic, Feedback DmClient, vs.). Idle DPC dalgaları görünür şekilde azalır. Var olmayan görevler sessizce skip edilir.
    • **`system.disable-reserved-storage`** — `DISM /Online /Set-ReservedStorageState /State:Disabled`. Win11'in ~7-10 GB Reserved Storage rezervasyonu kalkar; idle compact-and-stage maintenance durur. Bir feature update staged ise DISM reddeder, hata mesajı kullanıcıya geçirilir.

    Bilinen sınırlar

    ---

    • Update modal "Yeniden başlat" sonrası `quitAndInstall(false, true)` çağrılır. Eğer user UAC'yi reddederse veya antivirus installer'ı bloklarsa, app kapanmaz ve modal "Yeniden başlatılıyor…" durumunda kilitlenir. İlerideki bir turda 5 saniyelik timeout + "Yeniden dene" fallback eklenecek.
    • BulkActionDialog her tweak'i sequential işliyor. Çoklu paralel olarak çalıştırmak teorik olarak hızlandırırdı ama tweak'ler genellikle tek disk yazımına bağlı; sequential daha güvenli.
    • `gaming.scheduled-tasks-cleanup` tweak'i 12 görev için tek bir on/off durumunda — birini açık tutmak isteyen kullanıcı için granular toggle yok. V.B'de per-task toggle eklenebilir.

    Sırada (sonraki tur)

    • True stretch / non-aspect-preserving fullscreen feature — Boost & Play akışına entegre, NVIDIA Display Mode override (NvAPI veya nvidia-smi -aspectFastTrack/scaling).
    • Website redesign — vellumtweaks.com için interaktif 3D preview, dark purple tema, eşsiz tipografi/grid sistemi, footer/navbar overhaul. `frontend-design` skill'i ile.
  24. Önerilenleri uygula filter, kart detay modal, kart üstü yıldız + auth persistence fix

    Dört iş tek bir release'te: "Hepsini uygula" artık sadece analyzer'ın önerdiklerini uyguluyor (advanced/uyarılı kayıtlar tek tek onay bekliyor); her tweak kartına tıklanınca ne yaptığını ve neyi amaçladığını anlatan açıklama modal'ı açılıyor; "Önerilir" yazısı dar viewport'larda Switch'i sıkıştırıyordu — artık sağ üst köşede küçük bir yıldız ikonu olarak gözüküyor; ve en önemlisi — programı kapatıp açtığında bazen sayfa değişince kullanıcıyı oturum dışına atan auth bug'ı düzeldi.

    "Önerilenleri uygula" — sadece recommended

    Hepsini uygula → "Önerilenleri uygula". Buton artık sadece şu kriterleri sağlayan tweak'leri sıraya sokuyor:

    Sayı buton üzerinde rozet olarak gözüküyor — "Önerilenleri uygula 7" gibi. Confirm dialog risk dağılımı da bu filtrelenmiş set üzerinden hesaplanıyor.

    "Hepsini geri al" da paralel davranıyor: artık sadece şu anda **applied** olanları geri alıyor; zaten kapalı tweak'leri yeniden no-op ile dolaşmıyor. Buton üzerinde aktif tweak sayısı rozeti.

    Advanced + warning chip taşıyan kayıtlar (`hardware.cpu-mitigations-off` gibi) artık topluca dokunulmuyor — kullanıcı tek tek kart üstünden onay verip uygulamak zorunda. Güvenlik açısından önemli.

    • `verdict === 'recommended'` (analyzer onay verdi)
    • `available === true` (sürücü/donanım uygun)
    • `applied === false` (henüz aktif değil)

    TweakDetailModal — kart tıklandığında detay açılıyor

    Her tweak kartı artık tıklanabilir. Klikleyince yeni `TweakDetailModal` açılıyor:

    Switch'e tıklamak modal'ı açmıyor — tweak'i toggle ediyor. Premium badge'a tıklamak tooltip'i gösteriyor, modal'a değil. Lock butonuna tıklamak Premium toast'unu açıyor. Hepsi `stopPropagation` ile kart tıklamasından bağımsız.

    Klavye erişilebilirliği: kart `role="button"` + `tabIndex=0` + Enter/Space modal'ı açıyor.

    • **Risk pill** + uygulanmış mı + önerilir mi rozetleri
    • **Tam açıklama** — kart üzerindeki 3-satır clamp yok, full description
    • **Risk açıklayıcı kutusu** — GÜVENLİ/ORTA/İLERİ ne demek, plain Türkçe
    • **Uyarı callout** — `state.warning` varsa kırmızı kutu içinde AlertTriangle ile
    • **Hızlı facts grid** — Kategori · Restart gerekli mi · Geri alınabilir · Subkategori
    • **Referans linki** — Microsoft Learn / vendor KB external linki
    • **Aksiyon butonu** — Apply / Geri al / Premium kilitli (badge'a göre uygun olan)

    Sağ üst köşede yıldız — "Önerilir" pill'i kaldırıldı

    Kart footer'ında risk dot + warning chip + switch düzeni dar viewport'ta sıkıştığı için "Önerilir" yazısı switch'i ekranın sağına itip kaybolmasına yol açıyordu.

    Yeni düzen: `verdict === 'recommended' && !applied` durumda kartın sağ üst köşesine küçük yuvarlak yıldız (lucide `Star`) eklendi. Mauve/gold gradient çerçeve, dolgulu yıldız. Tooltip "Vellum bunu öneriyor" (veya analyzer'ın döndürdüğü reason).

    Footer artık temiz: sadece risk dot + warning/güvenli chip + switch. Hangi viewport'ta olursa olsun switch hep görünür.

    Auth persistence fix — network hatasında oturum atılmıyor

    Bug: kullanıcı uygulamayı kapatıp açtığında bazen sayfa değiştirir değişmez "giriş yap" ekranına atılıyordu. Sebep: `bootstrapAccount` boot anında `/api/license/refresh` çağrısı yapıyor, network erken hazır olmadığında çağrı throw ediyor, eski kod **her hata için** `clearSession()` ile dosyayı siliyordu.

    Düzeltme — `tryRefreshSession`:

    | Senaryo | Davranış | |---|---| | Server `200 OK` ile yeni token döner | Yeni token disk'e yazılır, broadcast | | Server `401/403/invalid_grant/revoked` döner | Session silinir, broadcast `null` (gerçek logout) | | Network/DNS/TLS/5xx hatası | **Cached session korunur**, retry zamanlanır | | Disk'te session yok | `null` döner, no-op |

    Bootstrap iki faza bölündü:

    1. **Phase 1** — disk'teki cached account'u anında broadcast et. Renderer AuthGate'i gecikme yaşamadan geçiyor. 2. **Phase 2** — background `refreshLoop` exponential backoff ile yeniden dener (5s, 15s, 45s, 2min, 5min). Sadece auth-rejection oturumu siliyor; transient hata cached'ı koruyor.

    Ek tetikleyici: **window focus** olayında `retryAccountRefreshOnFocus` çağrılıyor. Kullanıcı alt-tab'dan döndüğünde (genelde network ayağa kalkmış oluyor) refresh tekrar denenir. 1 dakikalık throttle var — başarılı bir refresh'ten sonra bir dakika boyunca tekrar tetiklenmiyor.

    Net etki: cold boot'ta network gecikse bile artık logged-out durumuna düşmüyorsun. Token gerçekten geçersiz olduğunda (sunucu 401/403 döndüğünde) düzgün şekilde kullanıcıyı OnboardingScreen'e yönlendiriyor.

    Bilinen sınırlar

    • Detail modal'da "Ne yapar / Ne için" diye iki ayrı bölüm yok — mevcut `description` + risk explainer + warning + reference yeterince kapsayıcı. İhtiyaç olursa V.B'de `purpose?: string` + `mechanism?: string` opsiyonel alanları açılabilir.
    • Auth retry exponential backoff toplam ~10 dakika dener; sonra durur. Kullanıcı window'a tekrar focus verdiğinde sıfırlanır ve yeniden başlar (focus throttle 1 min).
    • Transient hata sırasında refresh token rotation kaçırılır — yeni token gelmezse eski token sonraki refresh'te kullanılır. Sunucu single-use token kullanıyorsa bu sorun olabilir; mevcut implementation single-use değil (refresh token validity > 30 gün), o yüzden güvenli.
  25. Smart Analyzer foundation — Dashboard'da İyileştirme önerileri, her sayfada skor

    Vellum artık 60+ tweak'ini analiz ediyor. Her tweak'e bir verdict atanıyor — `recommended` (uygula), `optimal` (yapacak bir şey yok), `skip` (sistemine uygun değil). Dashboard'da yeni "İyileştirme önerileri" panel top-5 öneriyi tek tıkla aksiyon alarak gösteriyor; her tweak sayfasının üst köşesinde A+/A/B/C/D/F harf-skoru chip'i; her kartta "Önerilir" verdict rozeti. Bu V.A foundation; V.B'de gerçek per-tweak smart analyzer'lar geliyor.

    Yeni: İyileştirme önerileri panel (Dashboard)

    Dashboard'a yeni bir bölüm geldi — `№ 3 İyileştirme önerileri`. Stat row'un hemen altında, Bugün/Canlı kullanım spread'inin üzerinde. İçinde:

    • **Genel skor chip'i** — bütün makinen için A+/A/B/C/D/F harf-skoru. Hover'da `aktif / toplam · bekleyen öneri`.
    • **Top 5 önerilen tweak** — index numerali + tweak adı + risk dot + warning chip + tek-tıkla apply switch. Her satırda kategori breadcrumb (örn. "network") deep-link.
    • **Yükleme durumu** — analyzer hesaplıyorken muted "İyileştirmeler hesaplanıyor…", boş durumda "sistem optimal görünüyor" marginalia.

    Letter-grade chip — her tweak sayfasında

    Network · Gaming · System · Privacy · Hardware sayfalarının üst sağına TweakGradeChip eklendi. PageHeader'ın bulk butonlarının solunda gözüküyor.

    Hesaplama: `optimal verdict / available tweak`. Eşikler: ≥0.95 A+ · ≥0.85 A · ≥0.75 B · ≥0.60 C · ≥0.40 D · altı F. Renk: A/A+ mauve gradient, B/C gold, D/F nötr.

    Hover'da `aktif / toplam · bekleyen öneri`. Yanına `+N` rozeti gelir bekleyen öneri varsa (mauve).

    TweakCard verdict chip'i

    Her kartın footer'ında risk dot'unun yanına yeni bir chip eklendi. Sadece `verdict === 'recommended'` ve tweak henüz uygulanmamışsa gözüküyor:

    > ⚡ Önerilir

    Mauve gradient · sparkle ikon · hover tooltip "Vellum bu sistem için bunu öneriyor" (veya analyzer'ın döndürdüğü reason metni).

    Mimari

    • **`AnalyzerVerdict`** type — `'recommended' | 'optimal' | 'skip'`. `TweakRuntimeStatus`'a bağlı, IPC `Tweaks.List` payload'ı her kayıt için `verdict` + opsiyonel `verdictReason` taşıyor.
    • **Default heuristic** (main/analyzer/index.ts) — `not available → skip`, `applied → optimal`, `recommended === true → recommended`, else `optimal`.
    • **`TweakImplementation.analyze?(ctx)`** — opsiyonel hook. V.A'da boş bırakıldı; V.B'de per-tweak custom analyzer'lar (DNS ping, NIC sürücü inspection, GPU vendor detect, vs.) bu hook'a takılacak.
    • **Renderer optimistic update** — `useTweaks.setApplied(id, applied)` artık verdict'i de yeniden hesaplıyor. UI hemen tepki veriyor; arka plan yeniden-load gerekmiyor.

    Sıradaki tur (V.B)

    Per-tweak smart analyzer'lar:

    15-20 tane high-value tweak için custom analyzer; default heuristic kalan tüm tweak'ler için.

    • `network.dns-cloudflare`: mevcut DNS'e ping et, >50ms ise recommend.
    • `network.nic-interrupt-moderation`: `Get-NetAdapter` → adaptör sürücü adına göre IM özelliğini destekleyen kontrol; destekliyor + IM açıksa recommend.
    • `gaming.timer-resolution`: registry mevcut değer, default ise recommend.
    • `hardware.gpu-prefer-max-perf`: `Get-CimInstance Win32_VideoController` → NVIDIA değilse skip; NVIDIA + uygulanmamışsa recommend.
    • `hardware.cpu-min-state-100`: `powercfg /q SCHEME_CURRENT` mevcut min ≠ 100 ise recommend.

    Bilinen sınırlar

    • **Privacy sayfası** hâlâ kendi custom layout'unda (BloatChecklist tab + risk-grouped). Grade chip görünmüyor; Privacy migration sonraki turda.
    • **Live refresh** yok — analyzer sadece app açılışında ve her toggle'dan sonra (lokal heuristic) çalışıyor. Manuel yeniden hesaplama için Dashboard'a refresh butonu V.B'de.
    • **Skip durumu Dashboard'da gizleniyor** — improvements panel sadece `recommended`'ları gösteriyor. Skip'ler hep gizli, bu by design.
  26. Oyun sayfası grid'e taşındı, 6 yeni stratejik tweak

    Oyun sayfasının "Önerilen tweak'ler" bölümü tek bir grid'e oturdu — yeni alt-tab şeridiyle (Tepki / Çekirdek / Performans / Mouse / Güç) v0.10.0'da gelen 5 input-lag tweak'i artık doğru sekmesinde gözüküyor. 4 yeni gaming + 1 hardware + 1 network tweak eklendi: MPO disable, Fast Startup off, Transparency off, Animations off, CPU mitigations off, NetBIOS off.

    Oyun sayfası — yeni layout

    Eski "GÜVENLİ / ORTA / İLERİ" risk-grouped liste yerine artık aynı kart-grid sistemine oturuyor:

    OYUN KÜTÜPHANESİ bölümü ve Boost & Play akışı dokunulmadı — game library tamamen aynı kalıyor.

    • **TweakSubtabs** — Tümü · Tepki · Çekirdek · Performans · Mouse · Güç. Her sekme aktif olduğunda gradient underline çizilir.
    • **TweakToolbar** — search input, risk filter pill, sort pill (mevcut Network/Hardware sayfalarındaki ile aynı).
    • **TweakCard grid** — 1/2/3 kolon responsive. Her kart içinde kategori-scoped lucide ikon, Sora başlık, 3-satır description clamp, risk dot + Warning chip + Switch.
    • "Hepsini uygula" / "Hepsini geri al" butonları bölüm başlığında kalmaya devam ediyor.

    Yeni gaming tweak'leri (4)

    Hepsi safe risk · geri alınabilir · per-tweak warning text'i var.

    • **MPO (Multi-Plane Overlay) kapat** — `OverlayTestMode = 5`. MPO bug'ları ile gelen flicker / crash / frame drops kapanır; DWM klasik kompozisyona düşer. (AMD'nin yıllardır önerdiği fix.)
    • **Fast Startup kapat** — `HiberbootEnabled = 0`. Her boot temiz başlar, driver state boot'lar arası birikmez. Karşılığında shutdown→boot ~5s uzar.
    • **Transparency efektleri kapat** — `EnableTransparency = 0`. Start menu / taskbar / Settings'in canlı blur'u kapanır, DWM kompozisyon yükü düşer.
    • **Pencere animasyonları kapat** — MinAnimate=0 + TaskbarAnimations=0. Minimize/maximize zoom + taskbar fade kapatılır; pencere etkileşimleri 250-350ms gecikmeden kurtulur.

    Yeni advanced tweak'leri (2)

    • **CPU mitigations kapat (Spectre/Meltdown)** — *Donanım › CPU.* `FeatureSettingsOverride = 3` + Mask 3. Spectre v2 + Meltdown + MDS yan-kanal koruması kapanır. Eski Intel CPU'larda %15-20'ye kadar CPU geri kazanılabilir. Risk: ileri. **GÜVENLİK uyarısı:** kötü amaçlı JS / sürücü / USB belleği okuyabilir hale gelir; sadece tek-kullanıcılı, güvenli ortamlarda kullan.
    • **NetBIOS over TCP kapat** — *Ağ › Adaptör.* Tüm aktif NIC arayüzlerinde `NetbiosOptions = 2`. Legacy isim çözümleme broadcast loop'u susar; modern DNS / SMB akışı sorunsuz devam eder.

    Bilinen sınırlar

    • MPO disable HDR oyunlarda HDR yolu MPO'ya bağımlıysa HDR'ı kırabilir — sorun yaşarsan revert et.
    • Animations / transparency kapatınca Win11 görsel olarak "düz" hisseder; bilinçli bir trade-off.
    • CPU mitigations kapatma seçeneği `recommended: false` ile geliyor — UI'da default açık değil, kullanıcı bilinçli olarak switch'lemeli.
    • NetBIOS kapatma sadece NetBT arayüz key'leri olan NIC'lerde çalışır (Wi-Fi'da olur, USB tethering'de olmayabilir).
  27. Input lag, ping ve latency için 18 yeni tweak

    Bu sürüm tek bir hedefe odaklı: oyuncular mermilerin gittiğini hissetsin. 5 input-lag tweak, 8 network latency tweak, 5 boot-level + USB tweak — toplam 18 yeni özellik. Hepsi geri alınabilir, hepsinde uyarı metni var, hepsi kart-grid'e oturur.

    Input lag fix — Oyun sayfası (5)

    Pencere odak değişikliği, menü açılması, hung-app kill timeout'u ve DWM kompozitör önceliği — masaüstündeki "yavaş hissetme"yi besleyen klasik kayıtlar.

    • **Foreground lock = 0** — `ForegroundLockTimeout=0`. Alt-tab + yeni süreç odakları anında olur, 200 saniyelik default lock penceresi kalkar.
    • **Menü gecikmesi = 0** — `MenuShowDelay=0`. Sağ tık / start menü flyout'ları artık 400ms beklemiyor.
    • **Kill timeout'ları kısalt** — WaitToKillAppTimeout 1000, HungAppTimeout 1000, AutoEndTasks 1, WaitToKillServiceTimeout 2000. Hung app + service kill akışı eski 5 saniyeden 1-2 saniyeye iner.
    • **Background apps kapat** — UWP arka plan broker'ı + Search background toggle kapanır. DPC dalgaları azalır, idle güç düşer.
    • **DWM kompozitör önceliği** — MMCSS DWM task profili Priority 6 + High scheduling + High SFIO + GPU Priority 8. Borderless / windowed oyunlarda mouse-to-photon gecikmesi düşer.

    Ping fix — Ağ sayfası (8)

    NIC sürücü tarafına 5, TCP yığınına 3 dokunuş. NIC'ler için yeni "Adaptör" alt-tab'ı.

    • **Interrupt Moderation kapat (NIC)** — Aktif tüm fiziksel adaptörlerde IM kapatılır. Gelen paket başına anında ISR — ~1-2ms input jitter düşer.
    • **Flow Control kapat (NIC)** — 802.3x PAUSE frame'leri kapatılır. Yoğun trafikte downstream stall riski biter.
    • **Large Send Offload kapat** — LSOv2 IPv4 + IPv6 NIC seviyesinde kapanır. Oyun paketleri kuyrukta beklemeden anında wire'a gider.
    • **RSC (Receive Coalescing) kapat** — IPv4 + IPv6 RSC kapanır. Gelen oyun paketleri batch yerine teker teker işlenir.
    • **Energy Efficient Ethernet kapat** — PHY'nin idle anında Low Power moduna geçişi durur. Inter-packet jitter ~16μs azalır.
    • **TCP Auto-Tuning kapat** — Internet profilinde Auto-Tuning Disabled. Pencere boyutu sabit kalır, jitter'da TCP-kaynaklı dalgalanma azalır.
    • **TCP ECN kapat** — ECN Internet profilinde Disabled'a sabitlenir. Yanlış davranan ev router'larından kaynaklı handshake hatalarının önüne geçer.
    • **QoS rezerve = %0** — `NonBestEffortLimit=0`. QoS Packet Scheduler için varsayılan %20 rezervasyon kalkar; tüm bant genişliği best-effort'a açılır.

    Boot-level + USB — Donanım sayfası (5)

    Kernel timer kaynaklı DPC latency için bcdedit, USB cihazlarda phantom wake için kernel power flag. Yeni "Önyükleme" alt-tab'ı.

    • **Dynamic tick kapat (boot)** — `bcdedit /set disabledynamictick yes`. Kernel timer cadence sabitlenir; frame pacing düzelir, idle güç biraz yükselir.
    • **TSC sync = Enhanced** — `bcdedit /set tscsyncpolicy Enhanced`. TSC sayaçları arası drift kernel agresif resync eder, QueryPerformanceCounter hassasiyeti artar.
    • **x2APIC etkinleştir** — `bcdedit /set x2apicpolicy Enable`. Modern interrupt controller modu zorlanır; DPC delivery cost düşer.
    • **Platform clock kapat** — `bcdedit /set useplatformclock false`. HPET yerine invariant TSC kullanılır; QPC çağrı maliyeti ~100x düşer.
    • **USB power saving kapat** — `DisableSelectiveSuspend=1` USB service key'inde. Mouse / klavye wake gecikmesi sıfırlanır, phantom input lag biter.

    Yeni alt-kategori sekmeleri

    | Sayfa | Yeni sekme | İçerik | |---|---|---| | Ağ | **Adaptör** | NIC sürücü seviyesi (IM, Flow Control, LSO, EEE, RSC) | | Donanım | **Önyükleme** | bcdedit boot-level (dynamic tick, TSC sync, x2APIC, platform clock) |

    Mevcut TCP / DNS / IPv6 / GPU / CPU / RAM / Çevre / Depolama sekmeleri olduğu gibi.

    Bilinen sınırlar

    • Boot-level (bcdedit) tweak'leri yeniden başlatma gerektirir. Toggle'ı kapatmak `bcdedit /deletevalue` çağırır — bir sonraki boot'tan itibaren default davranışa döner.
    • Bazı NIC tweak'leri Wi-Fi adaptöründe görünmez (driver advanced property listesinde yer almaz). Apply işlemi sessizce skip eder; Get-NetAdapterAdvancedProperty çıktısı boşsa o adaptör desteklemiyor demektir.
    • `gaming.disable-bg-apps` UWP Mail / Calendar / Slack gibi arka plan bildirimlerini durdurur — bildirim ihtiyacı varsa açma.
    • TCP Auto-Tuning kapatmak yüksek-RTT bağlantılarda (uzak sunucu, VPN) throughput'u düşürür. LAN'a yakın oyun için ideal, dosya transferi senaryosunda revert et.
  28. Tweak Hub Reform — kart-grid layout, alt-tab navigasyon, yeni Donanım sayfası

    Tweak sayfaları temelden yeniden çizildi. Risk-grouped ListingRow yerine grid card layout, üstte alt-kategori sekmeleri, sayfa başında universal search/filter/sort. Yeni Donanım sayfası GPU/CPU/RAM/Çevre/Depolama alt-tab'larıyla geliyor — 12 yeni hardware tweak ile.

    Yeni kart sistemi

    Her tweak artık bir grid card:

    3 sütunlu responsive grid (1280px üstü 3-col, dar pencerede 2 ya da 1-col).

    • Sol üst: kategori-scoped lucide ikon (mauve tile içinde)
    • Title: Sora display 14px font-semibold
    • Description: Manrope 12px, 3 satıra clamp
    • Bottom: risk dot + mono caps risk label · Warning chip · Switch
    • Hover: hairline accent + lift, applied'ta shadow-glow

    Alt-kategori sekmeleri (TweakSubtabs)

    Her sayfanın üstünde kendi alt-kategorileri:

    | Sayfa | Sekmeler | |---|---| | Ağ | Tümü · TCP · DNS · IPv6 | | Sistem | Tümü · Görsel · Bellek · Depolama · İndeksleme · Performans | | Donanım (yeni) | Tümü · GPU · CPU · RAM · Çevre · Depolama |

    Aktif sekme: gradient underline (vlm-rule-grow). Sekme başına kayıt sayısı sağda muted gözükür.

    Yeni Donanım sayfası

    Optimizasyon grubunda yeni "Donanım" sidebar item. 12 yeni tweak:

    **GPU** (4): max-perf state, MSI interrupt mode (advanced), TDR timeout extend, DirectX pre-render queue **CPU** (3): min state %100 (AC), C-state idle off, paging executive disable **RAM** (2): standby clear (one-shot), page combining off **Çevre** (2): mouse HID queue, klavye repeat fast **Depolama** (1): scheduled defrag off

    Her birinde hand-authored warning text, gerçek registry/powercfg/schtasks implementasyonu.

    Schema

    `TweakDescriptor`'a 3 yeni opsiyonel alan:

    `TweakCategory`'ye `'hardware'` eklendi.

    `registryToggle` helper'ı bu yeni alanları geçirecek şekilde güncellendi; mevcut tweak'lere subcategory + warning'ler tek bir merkezi META map'i üzerinden eklendi (registry.ts).

    • `subcategory?: string` — alt-tab id'si
    • `warning?: string` — kart üzerindeki uyarı tooltip'i
    • `recommended?: boolean` — ileride gelecek analyzer için flag

    Universal search/filter/sort

    Mevcut TweakToolbar primitives'i her sayfada görev yapıyor — search input, risk filter pill, sort pill, sonuç sayacı. Hepsi alt-tab + arama + filter + sort kombinasyonuyla çalışır.

    IPC

    `Tweaks.List` payload'ı genişledi: artık `tier`, `subcategory`, `warning`, `recommended` alanları da gönderiliyor.

    Sıradaki turlar

    • **S.2 (içerik)**: 30-40 yeni tweak (Privacy debloat genişletme, Servisler için "Önerilen kapatmalar" tab'ı, Apps debloat). Privacy ve Gaming-recommended-section'ı aynı kart sistemine geçer.
    • **S.3 (analyzer)**: Per-tweak `analyze()` → RECOMMENDED / OPTIMAL / SKIP. Dashboard'da "İyileştirme önerileri" panel + per-section A/B/C grading.
    • **S.4 (detector / trigger / alerter)**: Sistem olay watcher'ları + kural motoru + in-app notification stack.

    Bilinen sınırlar

    • Privacy ve Gaming sayfalarının kendi custom yapıları var; bu turda CategoryPage refactor onlara dokunmadı (S.2'de geçecekler).
    • Cleanup, Services, Startup ve Profiles farklı veri şekilleri olduğu için (segmented control, weight bar, scope grupları) kart-grid'e dönüştürülmedi — kendi yapılarında kalıyor.
  29. Custom kapak görseli — kendi görselini ekle

    Steam'de olmayan oyunlar için (Valorant, Fortnite, Warzone, Overwatch 2, LoL, Roblox) kart kapağına kendi görselini ekleyebilirsin artık. Hatta Steam'de olan oyunlar için de Steam header'ını override edip istediğin görsele geçebilirsin. Görsel bilgisayarında kalır — Vellum sadece lokal olarak `userData/covers/` klasörüne kopyalar, başka yere göndermez.

    Akış

    1. Bir oyun kartına tıkla → detay modal'ı aç 2. "Kart kapağı" bölümünde **Ekle** butonuna bas 3. PNG / JPG / JPEG / WEBP / GIF dosyası seç 4. Kart anında yeni görselle render olur — uygulamayı kapatıp açtığında da kalır

    İstediğin zaman **Değiştir** veya çöp ikonuyla kaldırabilirsin.

    Render önceliği

    Aynı kart için birden fazla görsel kaynak varsa öncelik sırası:

    1. **Custom cover** (sen eklediysen) — full bleed, tam kart ölçüsü 2. **Steam CDN header** — Steam-detected oyunlar için Steam'in resmi banner'ı 3. **Typographic lettermark** — fallback (Valorant scan-line, LoL altın filigran, vs.)

    Teknik

    Yeni IPC: `Games.OpenImageDialog`, `Games.SetCover`, `Games.RemoveCover`, `Games.ListCovers`.

    CSP `img-src` direktifine `file:` eklendi — sadece kullanıcı tarafından açıkça seçilmiş yollar render ediliyor; ana process kopyalama esnasında uzantı whitelist + dosya varlığı doğrulaması yapıyor.

    Görsel kopyaları `%APPDATA%/vellum-tweaks/covers/{profileId}.{ext}` altında durur. App'i kaldırdığında bu klasör de silinir.

  30. Per-game lettermark — Steam dışı 6 oyun için karakteristik tipografi

    Steam dışı oyunlar için kart görseli tipografi-odaklı bir kimlikle yenilendi. Her oyun kendi karakterine göre özgün bir gradient + ornament setiyle render ediliyor. Wikipedia URL hotlinkinden vazgeçildi (üçüncü-parti CDN'den hotlinking ticari ürün için sağlam değil).

    Per-game lettermark designs

    | Oyun | Treatment | |---|---| | **Valorant** | Diagonal scan-line + reticle ring corner ornament, kırmızı atmosferik gradient, "VALORANT" 40px display extrabold | | **League of Legends** | Altın filigran köşe ornamenleri, koyu lacivert + altın radial gradient, "LEAGUE OF" eyebrow + büyük "Legends" | | **Fortnite** | Storm spiral SVG köşe ornamenti, mor + sarı vibrant gradient, "FORTNITE" 42px | | **Warzone** | Stencil-style diagonal stripe pattern, askeri turuncu + koyu, "Call of Duty" eyebrow + büyük "WARZONE" | | **Overwatch 2** | Hex dot pattern bg, "OVERWATCH" 34px + dev altın gradient "2" yanında | | **Roblox** | Mini-grid blok pattern bg, kırmızı atmosferik gradient, "ROBLOX" 44px |

    Hepsi:

    • Sora display extrabold typography
    • Per-game accent rengi gradient'lerde aktif
    • Original SVG ornaments (reticle, filigree, storm spiral, dot grids)
    • Game name = nominative fair use label (kim için tweak profili olduğunu gösterir)

    Steam-detected 6 oyun

    Counter-Strike 2, Apex Legends, PUBG, Rainbow Six Siege, GTA V, Rocket League değişmedi — Steam'in public CDN'inden direkt header görseli (third-party launcher standardı).

    Kaldırılanlar

    • `headerStyle: 'logo'` Wikipedia URL referansları (Valorant + LoL)
    • LogoOnGradient component dead code olarak kalıyor (typecheck temiz, ileride başka kaynak için kullanılabilir)
  31. Valorant + LoL kartları için gerçek wordmark

    Steam'de olmayan iki büyük rekabetçi oyun — Valorant ve League of Legends — artık tipografik lettermark yerine Wikimedia Commons üzerinden servis edilen resmi wordmark görseliyle render ediliyor. Diğer Steam-dışı oyunlar (Fortnite, Warzone, Overwatch 2, Roblox) typografik lettermark'ta kalmaya devam ediyor — onlar da güzel duruyor.

    Yeni `headerStyle` varyantı

    `GameProfile.headerStyle: 'cover' | 'logo'` alanı eklendi:

    Yeni `LogoOnGradient` component lettermark ile aynı zemini paylaşıyor — kart visual rhythm tutarlı kalıyor.

    • `'cover'` — Steam header.jpg gibi tam-bleed banner görseli (default)
    • `'logo'` — transparent wordmark image, gradient bed üzerinde ortalanmış, GameIcon glyph low-opacity watermark olarak

    CSP

    `img-src` direktifine `upload.wikimedia.org` eklendi.

    Hover

    Logo görseli hover'da hafif `scale-[1.04]` ile büyüyor — Steam cover'larıyla aynı micro-interaction.

  32. Game cards yeniden — gerçek görseller + tipografik lettermark fallback

    Oyun kartları artık abstract glyph yerine 16:9 başlık görseli kullanıyor: Steam-detected oyunlar Steam'in public CDN'inden header görseliyle, diğerleri tipografik lettermark (oyun adı + glyph watermark) ile. Standart third-party launcher davranışı (GOG Galaxy, Heroic vb. ile aynı).

    Yeni card layout

    ``` ┌──────────────────────────────┐ │ [16:9 cover] │ │ STEAM │ ├──────────────────────────────┤ │ Counter-Strike 2 │ │ FPS · 11 TWEAK │ ├──────────────────────────────┤ │ ▷ BOOST & PLAY → │ └──────────────────────────────┘ ```

    3 ayrı bölge: cover header, body (başlık + meta), footer (outline buton). Hairline'lar ile bölünmüş.

    Görsel kaynağı

    Steam'de bulunan 6 oyun için runtime'da Steam'in public CDN'inden header çekiliyor (`cdn.cloudflare.steamstatic.com/steam/apps/{appid}/header.jpg`):

    Steam'de olmayan 6 oyun (Valorant, Fortnite, Warzone, Overwatch 2, League of Legends, Roblox) için tipografik lettermark: oyun adı Sora display font ile, accent renkli gradient zemin üzerinde, GameIcon glyph low-opacity watermark olarak arkaya yerleştirilmiş.

    • Counter-Strike 2 · Apex Legends · PUBG: BATTLEGROUNDS · Rainbow Six Siege · GTA V · Rocket League

    Image fallback

    `<img onError>` handler — header URL fail ederse otomatik lettermark'a düşer. Offline veya CDN sorununda da görsel görünür kalır.

    CSP genişletme

    `img-src` direktifine `cdn.cloudflare.steamstatic.com` ve `shared.akamai.steamstatic.com` eklendi.

    Hover detayları

    • Cover image hover'da `scale-[1.04]` ile yumuşak yakınlaşma (700ms)
    • Source chip'i (STEAM/EPIC/RIOT/MANUEL) cover üstünde glass blur'lu pill olarak duruyor
    • Cover alt yarısında transparent → bg-base gradient veil okunabilirlik için
  33. Gaming Hub polish — özel SVG ikon seti, ghost butonlar

    Oyun kartları ve butonları rafine edildi. Emoji ikonlar yerine her oyun için özel çizilmiş SVG glyph'ler, dolu gradient buton dolguları yerine outline-stroke ghost butonlar.

    12 parçalık özel SVG ikon seti

    Her oyun için tek bir tasarım dilinde çizilmiş benzersiz SVG glyph'i:

    Hepsi 24×24 viewBox, 1.7px stroke, rounded caps, currentColor — oyun başına accent rengi alıyor. Logo klonlamaca değil; trademark güvenli, Velvet sistemiyle uyumlu.

    • **Valorant** — eş merkezli reticle + V notch
    • **Counter-Strike 2** — 4 uçlu pusula yıldızı
    • **Apex Legends** — üçgen apex + iç zirve
    • **Fortnite** — fırtına spirali (göz + sarmal kol)
    • **Warzone** — paraşüt kanopi + asker silüeti
    • **PUBG** — tava (tabela loot)
    • **Overwatch 2** — altıgen + diyagonal visor
    • **Rainbow Six Siege** — gökkuşağı yayı + 6 rakamı
    • **League of Legends** — çapraz kılıçlar
    • **Rocket League** — futbol topu + hareket izi
    • **GTA V** — kalın V + yıldız
    • **Roblox** — eğik küp blok

    Ghost outline butonlar

    Yeni `.vlm-outline-pill` utility class:

    Uygulandığı yerler: GameCard footer "BOOST & PLAY", GameDetailModal CTA, GamingPage "Manuel ekle", AddGameDialog "Ekle" + "Gözat".

    • 1px gradient ring (mauve → bronze)
    • transparent iç (önceki dolu gradient yerine)
    • `aurora-text` ile gradient renk yazı
    • `:hover` parlatma + soft glow

    Card layout fix

    GameCard yeniden bölündü:

    ``` ┌─────────────────────────────────┐ │ [SVG icon] STEAM │ │ │ │ Counter-Strike 2 │ │ FPS · 11 TWEAK │ │ ─────────────────────────────── │ │ ▷ BOOST & PLAY → │ └─────────────────────────────────┘ ```

    Hairline ile body ve footer ayrı bölgelerde — buton tam genişlik, artık 2 satıra kayboluyor değil. Apex/PUBG/Valorant gibi dar kartlarda da sorunsuz.

    Detay modal'ı

    • Üstteki büyük emoji yerine 32px SVG icon — accent rengiyle
    • Footer butonlar tutarlı outline-pill stiline geçti
    • "Listeden kaldır" yumuşak outline (border only) butonu
  34. FPS Gaming Hub — oyun kütüphanesi, Boost & Play, 4 yeni tweak

    LagoFast'ın lokal optimizasyon felsefesini Vellum'a taşıyoruz. Yeni Oyun sayfası bir hub'a dönüştü: yüklü oyunlarını otomatik algılıyor, her biri için hazır tweak profili tutuyor, tek tıkla "Boost & Play" pipeline'ı çalıştırıyor. VPN/proxy ağı yok — yerelde yapabileceğimiz her şey.

    Oyun kütüphanesi

    - Valorant, CS2, Apex Legends, Fortnite, Warzone, PUBG, Overwatch 2, Rainbow Six Siege, League of Legends, Rocket League, GTA V, Roblox

    • Steam, Epic Games ve Riot Client kurulumlarını otomatik tarar
    • Manuel ekleme: kendi .exe'ni seç, profile bağla
    • 12 popüler FPS/competitive oyun için curated profil:
    • Her oyun için "ideal in-game settings" notu (sadece bilgi — uygulamak sana kalmış)

    Boost & Play

    Her oyun kartında "Boost & Play" butonu. Tıkladığında: 1. Profile özel tweak'ler sırayla uygulanır (toast ile canlı progress) 2. Oyun launcher URI'si veya .exe ile başlatılır (Steam URI tercih edilir) 3. **Sadece bu seansta** modu: oyun çıkışında uygulanan tweak'ler otomatik geri alınır 4. Crash veya görünmeme durumunda bile fallback revert

    4 yeni FPS-odaklı tweak

    | Tweak | Ne yapar | |---|---| | `gaming.cpu-priority-separation` | Foreground app boost (Win32PrioritySeparation = 26) — scheduler oyun penceresine daha agresif zaman dilimi verir | | `gaming.timer-resolution` | GlobalTimerResolutionRequests = 1 — Windows 11'in oyunların yüksek çözünürlüklü timer taleplerini onurlandırması | | `gaming.disable-power-throttling` | PowerThrottlingOff = 1 — Hybrid CPU'larda thread'lerin verimlilik çekirdeğine sıkıştırılmasını engeller | | `gaming.tcp-ack-frequency` | Tüm aktif NIC'lerde TcpAckFrequency=1 + TCPNoDelay=1 — twitch paketlerinden ~40ms latency düşürür |

    Her tweak geri alınabilir, registry yedeklemesi otomatik.

    Detay paneli

    Bir game card'a tıkla → modal açılır:

    • Sol kolon: bu profile'ın uygulayacağı tweak listesi
    • Sağ kolon: "İdeal oyun-içi ayarlar" (Grafikler, Performans, Mouse, Launch options)
    • Alt: "Sadece bu seansta" toggle + "Boost & Play" CTA + (manual eklenmişse) "Listeden kaldır"

    Teknik notlar

    Yeni IPC: `Games.ListProfiles`, `Games.Detect`, `Games.AddManual`, `Games.RemoveManual`, `Games.BoostAndPlay`, `Games.CancelBoost`, `Games.OpenExeDialog`, `Games.OnBoostProgress`, `Games.OnGameExit`.

    Yeni dosyalar:

    • `src/main/tweaks/gaming/{cpu-priority,timer-resolution,power-throttling,tcp-ack}.ts`
    • `src/main/games/{profiles,detect,boost}.ts`
    • `src/main/ipc/games.ts`
    • `src/renderer/src/stores/games.ts`
    • `src/renderer/src/components/games/{GameCard,GameDetailModal,AddGameDialog,BoostListener}.tsx`

    Sonraki tur (M.2 — sketch)

    • In-game FPS overlay (transparent + always-on-top BrowserWindow)
    • Background app suspension (Discord/Spotify/browser)
    • Process priority on game.exe (Realtime/High)
  35. Profil kartlarından dev numerali kaldırıldı

    Profile kartlarındaki dekoratif `№ 0X` watermark'ı tamamen kaldırıldı. Kartlar artık doğrudan başlık + içerik — sade, dümdüz, dikkat dağıtmıyor.

    Değişen

    Şimdi kart içeriği:

    ``` [ Profil adı HAZIR ] [ ▷ Uygula ] Açıklama metni satırları 9 TWEAK ── RİSK YOK ```

    Daha az dekorasyon, daha çok bilgi.

    • ProfileEntry'den `index` prop'u tamamen çıkarıldı
    • Absolute positioned büyük numeral (88px italic gradient watermark) silindi
    • Sol padding `pl-32 sm:pl-40` → `px-6` — kartlar normal genişlikte
    • Padding hafifletildi: `py-6` → `py-5`
  36. Dashboard rafine — daha sade, daha sessiz

    Panel bağıran bir kapak yerine sakin bir günlük açılış sayfasına dönüştü. Drop-cap ısrarı geri çekildi, CPU kartı yeniden çizildi, "Hızlı optimize" butonu doğru yerine yerleşti.

    Hero soft

    • Drop-cap "B" 1.45em → 1.12em — okunaklı kalıyor ama artık billboard değil
    • Hero başlığı 52px → 42px sm
    • "Hızlı optimize" butonu artık alt yazının hemen altında, sistem bilgisi satırıyla aynı hizada — sayfanın bir köşesinde sallanmıyor
    • Sistem bilgisi (CPU + Windows) inline mono caps olarak action satırında

    Canlı kullanım kartı yeniden

    • Tab'lar (CPU/RAM) artık kartın **içinde**, header satırında — kartla bağlantılı
    • Büyük "%48" rakamı 32px → 22px, label inline yanına
    • Yeni `subtle` mod LineChart: stroke 2 → 1.5, drop-shadow yok, gradient fill yarısına indirildi
    • Chart yüksekliği 200 → 120
    • GPU/WIN/VER footer satırı kaldırıldı (zaten hero'da var)

    Soft card stili

    Yeni `.vlm-soft-card` utility class'ı: border weight'i azaltılmış, gradient daha hafif, hafif inset highlight. Brief column, chart card, quickstart slabs ve recent log hep aynı yumuşak yüzeyi paylaşıyor.

    Brief column

    • Daha sıkı padding (5px → 3px row padding)
    • Status dot + mono caps label + value sağda — daha az visual ağırlık
    • Açılış satırına purple "idle" tone (önceden farklı tone idi)

    Küçük detaylar

    • Section eyebrow font-size 10px → 9.5px (chart label'larıyla tutarlı)
    • LineChart `subtle` mod: gradient fill alpha 0.5/0.2 → 0.22/0.08
    • Recent log soft card stiline geçti
  37. İtalic accent'i kaldırdık + Profile numeral düzeltildi

    Almanac geçişinde başlıklarda kullandığımız italic gradient accent'i kaldırdık — artık tüm büyük display başlıklar dik duruyor. Profil kartlarındaki dev `№ 01` numeralinin başlık üstüne taşması da giderildi: numeral artık dekoratif bir arka plan katmanı.

    Düzeltmeler

    • Tüm büyük display başlıklarda italic accent kaldırıldı: "Geri kazanılan alan." artık dik. Hero/Onboarding, Web Hero/FeatureGrid/DownloadSection, tüm desktop PageHeader'ları kapsıyor.
    • Dashboard hero drop-cap'i italic yerine upright (font sistemiyle tutarlı).
    • Profil kartlarında dev numeral artık absolute decorative katman (opacity 0.18) — body içeriğine bindirmiyor, kart içinde estetik bir watermark gibi duruyor.
    • Drop-cap span'inden `aria-hidden` kaldırıldı — screen reader artık başlığı doğru okuyor (önceden ilk harf gizleniyordu).

    Korunan italic kullanımları

    Marginalia, devre dışı kayıt notları ve servis açıklamaları gibi küçük editorial side-note'lar italic kalmaya devam ediyor — bunlar büyük başlık akışını bozmuyor, kasıtlı baskı dilinin parçası.

  38. Almanac — sayfa içerikleri baştan aşağı yeniden çizildi

    Vellum'un içine **Almanac** denilen yeni bir editorial sistem oturdu. Her sayfa artık bir ciltli kitabın bölümü gibi açılıyor: numaralı kayıtlar (`№ 04`), sol kenarda sticky margin column'u, hairline ayraçlar, drop-cap detayları, ve sayfa başına özgün bir ritim. Sol sidebar ve titlebar dokunulmadı; içerik tarafının her bir santim'i yeniden düşünüldü.

    Margin column — her sayfanın sol kenarında

    Yeni bir 88px sticky kolon: üstte chapter numarası ve label (`№ 03 · AĞ`), altında scroll ilerlemesini gösteren dikey hairline, en altta sayfa-spesifik marginalia (`12 ENTRY · 3 ACTIVE` gibi). Sayfayı bir kitap sayfası gibi konumlandırıyor.

    Yeni paylaşılan parçalar

    • **IndexNumeral** — `№ 04` kalıbı, tabular figures ile pixel-perfect hizalı
    • **ListingRow** — TweakCard grid'inin yerini alan editorial liste satırı
    • **WeightBar** — Cleanup'ta tahmini kazanılacak alanın gradient bar'ı
    • **FootnoteRail** — çoklu seçim aktifken aşağıdan slide-up gelen sticky context bar
    • **NumberedStat** — Dashboard'un numaralı stat tile'ları
    • **MarginRail** — yukarıda anlatılan sol kolon

    Sayfa-sayfa

    ### Dashboard — kapak spread'i

    ### Network / Gaming / System — index entries

    ### Privacy — index entries + bloat checklist

    ### Cleanup — inventory ledger

    ### Services — cast list

    ### Startup — boarding manifest

    ### Profiles — reading list

    ### Settings — margin rail entegrasyonu

    • 7/12 + 5/12 asimetrik hero satırı; başlığın ilk harfinde italic gradient drop-cap
    • 4 numaralı stat tile (`№ 01 AKTİF TWEAK`, `№ 02 BELLEK`, `№ 03 SÜRE`, `№ 04 YETKİ`)
    • 5/12 + 7/12 spread: solda "Bugün" özeti (durum dot'larıyla), sağda canlı CPU/RAM grafiği
    • Quickstart slabları artık numaralı, hover'da indeks +%6 scale
    • Recent log → mono caps timestamp + kayıt + glow status dot
    • TweakCard grid → ListingRow listesi
    • Risk seviyelerine göre 3 ayrı bölüm: `№ I · GÜVENLİ`, `№ II · ORTA`, `№ III · İLERİ`. Her bölüm renkli hairline ile başlıyor
    • Kayıtlar continuous numbering: `№ 01..XX` baştan sona
    • Telemetri & öneriler tab'ı yeni ListingRow formatına geçti
    • Önyüklü uygulamalar tab'ı (BloatChecklist) korunmuş
    • Her satır: `№ 01` | checkbox | name + path | WeightBar (~ 1.2 GB) | "ÇALIŞTIR" mono pill
    • Çoklu seçim → aşağıdan FootnoteRail slide-up: "3 kalem seçildi · ~3.4 GB tahmini" + "Seçilenleri çalıştır" CTA
    • Display name + glow status dot + RUNNING/STOPPED mono caps
    • Mode değiştirme: 3-button "piano-key" segmented control. Aktif tuş gradient fill + inner highlight + dış glow
    • Üstte search input + match count
    • Scope'a göre 4 bölüm: `№ I · TASKSCHEDULER`, `№ II · HKCU · RUN`, `№ III · HKLM · RUN`, `№ IV · STARTUP FOLDER`
    • Her satır: `№ 01` | switch | name + publisher | komut path
    • Toolbar'da search ve match counter
    • Yatay büyük kartlar: sol baş köşede dev `№ 01` (display 64px, italic gradient)
    • Risk constellation: GÜVENLİ / ORTA / İLERİ için count'a göre boyutu büyüyen glowing dot'lar
    • Sağda dikey action stack: "Uygula" gradient pill + "Sil" mono pill
    • Built-in vs senin profilleriniz iki ayrı bölüm
    • Sol kenar marginalia ile geri kalanına bağlandı
    • Üst yapı (HesapGroup + SettingsGroup'lar) korundu

    Yeni motion sistemi

    • `vlm-spread-in` — sayfa içeriği soldan kayarak gelir (520ms, soft ease)
    • `vlm-rule-grow` — hairline ayraçlar merkezden büyür
    • `vlm-numeral-fade` — büyük rakamlar opacity + scale-pop ile girer
    • `vlm-footnote-in` — sticky footnote rail aşağıdan slide-up
    • `prefers-reduced-motion` saygılı: tüm entrance animasyonları kapatılır

    Tipografi yenilikleri

    • `.vlm-numeral` — tabular figures ile mono caps numerali
    • `.vlm-marginalia` — italic kenar notları
    • `.vlm-dropcap` — hero başlıkların ilk harfine drop-cap (italic gradient)

    Küçük detaylar

    • ListingRow hover'ında alt çizgi merkezden büyür, indeks numerali +%6 scale, gold glow yumuşar
    • Aktif tweak'lerde sol kenarda 2px tall gradient indikator strip
    • Status badge'leri tüm sayfalarda artık `● RUNNING` gibi glowing dot + mono caps
  39. Editorial polish — bir baskı kalitesi geçişi

    Vellum'un içine bir cilt eklendi: her sayfa artık bir bölüm gibi açılıyor, kenarlarda ince çizgiler var, alttaki içerik karanlığa erir gibi yumuşuyor. Hesabın sol panelin altında her zaman elinin altında. Aynı tema, daha sıkı detay.

    Alt çizgide eriyen içerik

    Ana scroll alanı artık aşağı doğru transparan bir maskeyle bitiyor. İçerik aniden kesilmek yerine alt 88 piksel boyunca yumuşakça karanlığa karışıyor — daha fazlası olduğunu hissettiren, ama göz yormayan bir alt sınır.

    Editorial sayfa başlıkları

    Her kategoride yeni bir başlık dili:

    Aynı ritim Network, Gaming, System, Privacy, Cleanup, Services, Startup, Profiles ve Settings sayfalarına uygulandı.

    • Sol tarafta tek hairline ile dengelenmiş mono caps eyebrow ("AĞ", "OYUN", "GİZLİLİK", "TEMİZLİK", "AYARLAR")
    • Sora display başlık — sürpriz bir kısımda italic gradient accent ("Daha *duyarlı bir* bağlantı", "Daha *az* iz", "Daha *sade bir* çekirdek")
    • Daha geniş, soluk değil ama koyu olmayan, satır uzunluğu kontrol altında alt yazı

    Sidebar = Vellum kimliği

    Sol panelin altındaki widget artık işletim sistemi kullanıcını değil **Vellum hesabını** gösteriyor:

    • OAuth avatarın (Google/Discord) ya da fallback gradient initials
    • Hesap adın + Free/Premium rozeti + cihaz sayısı
    • Yukarı doğru açılan dropdown menü: Hesap & Ayarlar, Site dashboard'u, Çıkış yap
    • Her sayfada elinin altında — kimliğin daima görünür durumda

    Tweak kartı detay turu

    • Tüm kartlara `vlm-bevel` ile baskı seviyesinde iç kenar ışıması
    • Risk rozeti yeniden çizildi: ikon + label yerine glowing tinted dot + mono caps tipografi (GÜVENLİ / ORTA / İLERİ)
    • Aktif kart hâlâ üst hairline + corner glow ile öne çıkıyor

    Küçük detaylar

    • `.vlm-rule` ve `.vlm-rule-mauve` — sayfa içine inline hairline eklemek için CSS utility
    • `.vlm-bevel` — herhangi bir kartın üst iç kenarına glassy ışıma ekleyen mask trick
    • `.vlm-scroll-mask` — alt kenardaki yumuşak kaybolma maskesi
  40. Sıkı oturum onayı ve Changelog sayfası

    Tarayıcı izinlerinin atlandığı durumlarda bile masaüstüne kullanıcı izni olmadan oturum bağlanamasın diye bir doğrulama adımı ekledik. Site tarafında ise sürüm geçmişine ayrılmış kendi sayfası geldi.

    Onaylı bağlantı (desktop)

    Chrome bir kez "Bu siteye her zaman izin ver" işaretlendiğinde sonraki giriş denemelerinde özel protokol diyalogu görünmeden uygulamayı açabiliyordu. Bunu sezgisel bulmadık.

    Yeni akışta tarayıcıdan gelen oturum bilgisi (deviceToken) doğrudan tüketilmiyor — masaüstünde "Bu cihazı bağla" / "Reddet" sorulu net bir onay paneli açılıyor. Lisans aktivasyonu yalnızca açık iznin sonrasında oluşturuluyor.

    • Aktif login akışı yoksa gelen vellum:// URL'leri artık tamamen düşürülüyor.
    • state eşleşmiyorsa URL düşürülüyor.
    • Pending bir onay varsa polling timer ikinci bir handoff almıyor.

    Site /changelog sayfası

    Cursor changelog tarzında editorial bir akış: sol tarafta versiyon ve tarih sticky duruyor, sağda her sürüme dair açıklamalar genişliyor.

    Üst navbara da link eklendi.

  41. Marka ikonu, doğrulama ekranı ve avatar düzeltmeleri

    NSIS installer ve görev çubuğu artık Vellum "V" markasını taşıyor. Giriş akışında ne olduğu artık net görülüyor; site tarafı da kendi sürümüne geçiyor.

    Marka ikonu her yerde

    Multi-resolution .ico (16/24/32/48/64/128/256) ile kurulum ve görev çubuğunda mauve→bronz gradyanlı V markası. Pencere ikonu da bu setten besleniyor.

    Lisans doğrulanıyor ekranı

    Tarayıcıdan onay alındıktan sonra masaüstü uygulamasında üç adımlı bir progress paneli açılıyor (lisans aranıyor → cihaz bağlanıyor → profil senkron) ve ardından "Hoş geldin" karşılaması geliyor. Bu sırada başarı animasyonu modali kapatıp doğrudan panele atıyor.

    Site tarafı senkron

    /auth/desktop sayfası artık masaüstü cihazına bağlanma anını yakalayıp "✓ Bağlandı" yeşil kartına geçiyor. Süre dolmuşsa nazik bir hata kartı gösteriliyor.

    Küçük düzeltmeler

    • Tarayıcıdaki özel protokol diyalogu artık "Vellum Tweaks açılsın mı?" yazıyor (önceden uzun açıklamayı gösteriyordu).
    • Google ve Discord avatarları için CSP genişletildi — Hesap kartında profil resmi düzgün yükleniyor.
    • Login sonrası kullanıcı hangi sayfada olursa olsun otomatik olarak ana panele yönleniyor.
  42. Onboarding ve hesap kapısı

    İlk açılışta hesap zorunlu hale geldi. Hesap olmadan tweak'lere erişim yok — bu sayede lisans, cihaz ve premium katmanları tutarlı çalışıyor.

    Sinematik karşılama

    Marka mark + halo, "Hoş geldin" mono eyebrow, Sora display başlık, üç adımlı yolculuk önizlemesi ve gradyanlı CTA. Arka planda yavaşça sürüklenen mauve + bronz orblar.

    AuthGate, Sidebar ve içerik alanını sarıyor — TitleBar (pencere kontrolleri) ve giriş modali her zaman erişilebilir.

  43. Hesap sistemi ve site entegrasyonu

    Vellum artık siteyle konuşuyor. Site üzerinden masaüstüne giriş, lisans yönetimi, cihaz yönetimi ve premium tier altyapısı bu sürümle geldi.

    Custom protocol

    NSIS installer artık vellum:// özel protokolünü kayıt ediyor. "Site üzerinden giriş yap" butonu tarayıcıyı açıyor; site izninle oturum bilgisini protokol üzerinden masaüstüne geri gönderiyor.

    Manuel kod fallback'i (tarayıcı protokolü engellerse): site sayfada 6 haneli kodu gösteriyor, masaüstü polling ile yakalıyor.

    Hesap kartı (Ayarlar)

    Avatar, isim, e-posta, tier rozeti, lisans anahtarı (kopyalanabilir), aktif cihaz sayısı, çıkış. Site Cihazlar sayfasına derin bağlantı.

    Premium tier altyapısı

    TweakDescriptor.tier alanı eklendi. Premium işaretli tweak'ler ücretsiz kullanıcılarda kilitli (lock ikonu + gradient rozet). Tıklamada "Yükselt" toast.

    Şu an hiçbir tweak premium işaretli değil; altyapı hazır, içerik haritalaması ileride.

    Site dashboard

    • /dashboard/license — kopyalanabilir lisans kartı, tier, slot.
    • /dashboard/devices — aktif cihazlar, son görülme, IP prefix'i, "Çıkar" onaylı revoke.
  44. Velvet tema, dynamic island ve canlı yayın

    vellumtweaks.com canlıya alındı; Velvet teması (dusky mauve + antique bronze) hem masaüstü hem siteye yerleşti.

    Tema

    Linear/Vercel benzeri jenerik dark'tan vazgeçtik. Yerine Sora display + Manrope body + JetBrains Mono ve mauve→bronze gradyanları üzerine kuruldu.

    Profil sistemi + benchmark

    Gaming / Verim / Gizlilik / Safe önayarları. Canlı CPU/RAM grafiği. Tweak öncesi-sonrası ölçüm.

    Otomatik güncelleme

    updates.vellumtweaks.com endpoint'i. 10 saniye polling + pencere odaklandığında anında kontrol. Soğuk-başlangıç modali ilk algılamada, çalışan oturumda hafif toast.