38 puan yazan GN⁺ 2025-12-15 | 3 yorum | WhatsApp'ta paylaş
  • HTML, JavaScript ve CSS’yi tek bir dosyada birleştirip çalıştıran HTML tools üretme deneyimine dayanarak tekrar eden tasarım kalıpları derleniyor
  • 2 yıl içinde 150’den fazla üretilen küçük araçların gerçekte nasıl yapıldığı ve sürdürüldüğü somut örnekler üzerinden anlatılıyor
  • Derleme adımı olmayan yapı ve CDN kullanımı sayesinde kopyala-yapıştır tabanlı geliştirme akışı doğal biçimde oluşuyor
  • URL, localStorage, dosya açma, indirme, Pyodide ve WebAssembly’ye kadar yalnızca tarayıcı özellikleriyle mümkün olan alan genişliyor
  • Promptlar ve sonuç kayıtları ile mevcut araçların yeniden birleştirilmesi sayesinde araç koleksiyonunun bizzat geliştirme temeli haline geldiği akış güçleniyor

HTML tools kavramı ve örnekler

HTML tool’un temel yapısı

  • JavaScript ve CSS’nin inline olarak gömülü olduğu tek bir HTML dosyası yapısı
  • JSX derleme adımı gerektiren React kullanılmadığı için kopyalama ve yeniden dağıtım basitleşiyor
  • Gerekli kütüphaneler CDNjs veya jsDelivr gibi CDN’lerden doğrudan yükleniyor ve bağımlılıklar minimumda tutuluyor
  • Kod boyutu birkaç yüz satır seviyesinde tutularak bakım yükü azaltılıyor; LLM’in hızlıca okuyup düzenleyebileceği bir yapı korunuyor

Canvas ve Artifacts tabanlı prototipleme

Daha karmaşık hale gelince kodlama ajanına geçiş

  • Claude Code veya Codex CLI kullanıldığında Playwright gibi araçlarla tarayıcı testleri içeren tekrar eden işler otomatikleştirilebiliyor
  • Daha karmaşık araçlarda (ör. Bluesky başlık görüntüleyicisi) bu tür ajanlara “yükseltme” yaklaşımı kullanılıyor
  • Aracı eklemek veya güncellemek için doğrudan simonw/tools deposuna PR oluşturuluyor
  • Web tabanlı ajanlarla çalışma süreci Claude Code for web kullanım videosunda görülebilir

CDN tabanlı bağımlılık yönetimi

  • Ek kütüphaneler kullanılacaksa CDN üzerinden yükleniyor
  • LLM’in Artifacts/Canvas ortamlarının izin verdiği bir CDN allow-list bulunduğundan, “PDF.js kullan” gibi bir talimat URL yapılandırmasını oluşturabiliyor
  • Gerekirse cdnjs veya jsDelivr üzerinde URL bulunup sohbete yapıştırılıyor
  • npm kurulumu veya derleme süreci olmadan her şey tek bir HTML dosyasıyla çalışıyor
    • npm + build step yaklaşımı, tek tek araçları hızlıca hack’leme ve self-host etme verimliliğini düşürüyor
  • CDN URL’lerine sürüm bilgisi dahil edildiği için uzun vadeli yeniden üretilebilirlik korunuyor

Harici statik barındırma

  • LLM platformlarının kendi iç barındırması sandbox kısıtları nedeniyle dış URL verilerini/görsellerini yüklemeyi veya dış bağlantı özelliklerini engelleyebiliyor
  • Kullanıcı deneyimi açısından uyarı mesajları, ek yükleme adımları veya platform tanıtımları araya girebiliyor
  • “No React + CDN” birleşimi sayesinde build olmadan neredeyse her yere yüklemek kolaylaşıyor
  • HTML dosyası GitHub Pages’e yüklenirse sabit bir URL üzerinden hemen erişilebiliyor
  • Araçların çoğu simonw/tools deposunda yönetiliyor ve tools.simonwillison.net üzerinden sunuluyor

Kopyala-yapıştır merkezli giriş/çıkış

  • Birçok araçta yapıştırılan girdiyi dönüştürüp sonucu yeniden panoya kopyalama yaklaşımı temel mekanizma olarak kullanılıyor
  • Mobilde kopyala-yapıştır zor olduğu için sık sık “Copy to clipboard” düğmesi ekleniyor
  • İşletim sistemi panosu birden fazla formatı birlikte taşıyabiliyor ve JavaScript paste olayı üzerinden bu tür “zengin” verilere erişmek mümkün
  • Temsilî araçlar

Hata ayıklama araçları

  • Tarayıcıda işlenen gerçek veri yapılarını incelemek için özel araçlar üretiliyor
  • clipboard-viewer: Metin, zengin metin, görsel ve dosya dahil tüm pano verisini gösterir
  • Ek araçlar

Durumu URL’de saklamak

  • Sunucu veritabanı olmadan da URL içinde oldukça fazla durum saklanabiliyor
  • Yer imi ve paylaşım odaklı araçlarda bu kalıp tercih ediliyor
  • icon-editor: 24×24 ikon düzenleme durumunu doğrudan URL içinde korur

localStorage kullanımı

  • localStorage, veriyi kullanıcının cihazında kalıcı olarak saklayan ve sunucuya açığa çıkarmayan bir tarayıcı API’sidir
  • URL’ye sığdırılması zor büyük durumlar veya API anahtarı gibi gizli değerler burada tutulur; amaç statik host sunucu loglarına sızma riskinden kaçınmaktır
  • word-counter: Yazılmakta olan metni otomatik kaydeder
  • render-markdown: Markdown yazarken içeriği korur
  • haiku: API anahtarını localStorage içinde tutup webcam görseline göre haiku üretir

CORS’a açık API’lerden yararlanmak

  • CORS (Cross-origin resource sharing), başka bir alan adındaki API’lerin tarayıcı JavaScript’i tarafından çağrılıp çağrılamayacağını kontrol eden mekanizmadır
  • CORS başlıkları açık API’ler HTML tools için çok elverişli kaynaklardır; zamanla böyle bir listenin biriktirilmesi değerlidir
  • iNaturalist, PyPI, GitHub (açık depo içeriklerine raw.githubusercontent.com üzerinden anonim erişim mümkün), Bluesky ve Mastodon gibi servisler kullanılıyor
  • Araç örnekleri

LLM API’lerini doğrudan çağırmak

  • OpenAI, Anthropic ve Gemini JSON API’leri tarayıcıdan CORS üzerinden doğrudan çağrılabiliyor
  • API anahtarı HTML içine gömülürse ele geçirilme ve ücretlendirme riski doğduğundan, localStorage içinde saklanan bir “secrets kalıbı” kullanılıyor
  • Kullanıcı deneyimi açısından API anahtarı alma ve yapıştırma süreci sürtünmeli olsa da işe yarıyor
  • Örnek araçlar

Dosya açmaktan çekinmemek

  • <input type="file"> ile dosyayı sunucuya yüklemeden de doğrudan tarayıcıda okuyup kullanmak mümkün
  • ocr: PDF.js ve Tesseract.js kullanarak PDF’yi sayfa görsellerine dönüştürür ve tarayıcı içinde OCR çalıştırır
  • social-media-cropper: Görsel açtıktan/yapıştırdıktan sonra sosyal medya oranlarına göre (ör. Twitter/LinkedIn 2:1, Substack 1.4:1 vb.) kırpma sağlar
  • ffmpeg-crop: Video kırpma için ffmpeg komutu üretir

İndirilebilir dosya sunmak

  • Sunucu olmadan da tarayıcı içinde dosya üretip indirilebilir hale getirmek mümkün
  • JavaScript ekosisteminde çok sayıda format üretim kütüphanesi bulunuyor
  • Örnek araçlar
    • svg-render: SVG’yi render edip PNG/JPEG indirilebilir çıktısı sunar
    • social-media-cropper: Kırpılmış görselin indirilmesini sağlar
    • open-sauce-2025: Program oluşturur ve takvime eklenebilecek ICS dosyasını indirilebilir olarak sunar

Pyodide ve WebAssembly

  • Pyodide, Python’u WebAssembly’ye derleyip tarayıcıda çalıştıran bir dağıtımdır
  • CDN üzerinden temiz biçimde yüklenebildiği için HTML tools içinde kullanmamak için neden yok
  • micropip aracılığıyla CORS üzerinden PyPI’daki saf Python paketleri ek olarak yüklenebiliyor
  • Araç örnekleri

WebAssembly ile daha da genişletmek

Önceki araçları yeniden birleştirmek

  • Tek bir açık koleksiyonda 100’den fazla araç bulunmasının başka bir avantajı, LLM’in bu araçları kolayca yeniden birleştirebilmesi
  • Bazen eski araç doğrudan bağlama kopyalanıyor; bazen de kodlama ajanında adıyla referans veriliyor veya örnek aratılıyor
  • Çalışan araçların kaynak kodu, düzenleme kütüphanelerini kullanma kalıplarını da içeren bir belge işlevi görüyor ve LLM’in başarı olasılığını artırıyor
  • pypi-changelog’un üretim sürecinin tam kaydı: prompt transkripti
    • Promptta önce “pypi package explorer” aracına bakması söyleniyor; ardından zip-wheel-explorer kaynağını okuyup PyPI API’sinden wheel alarak sürümler arası diff render eden ve Copy düğmesi sunan yeni bir araç üretmesi isteniyor
  • Tarayıcıda OCR çalıştırma yazısı da ayrıca incelenebilir

Prompt ve transkript kayıtları

  • LLM kullanım kayıtlarını saklama ve yayımlama alışkanlığı, kişinin kendi kullanım becerisini geliştirmesine yardımcı olabilir
  • Sohbet tabanlı LLM platformlarında üretilen araçlarda share özelliği kayıt yöntemi olarak kullanılıyor
  • Claude Code veya Codex CLI gibi ajanlar kullanıldığında, terminalin tamamı kopyalanıp terminal-to-html ile HTML loguna dönüştürülüyor ve Gist olarak paylaşılıyor
  • Tamamlanan araç depoya kaydedilirken commit mesajına transkript bağlantısı ekleniyor - kayıt arşivi: tools.simonwillison.net/colophon

Sonuç

  • Son bir buçuk yılda bu yöntemle LLM’ler ve HTML araçları üzerine yapılan keşif süreci oldukça keyifli olmuş; HTML ile nelerin yapılabildiğini ve LLM yeteneklerini anlamaya ciddi katkı sağlamış
  • Kendi araç koleksiyonunu başlatmak için bir GitHub deposu açıp GitHub Pages’i etkinleştirerek .html dosyalarını kopyalayıp bırakmak yeterli
  • Bonus olarak Claude Code ve shot-scraper kullanılarak bu yazının ekran görüntülerinin eklendiği transkript bağlantısı da paylaşılıyor

3 yorum

 
bobross0 2026-01-07

HTML kalıpları

 
hiyama 2025-12-17

İlginç görünüyor.

 
aer0700 2025-12-17

Harika görünüyor.