Göndermeden önce doldurun
[sunucu adı][uygulama adı][ne yapar, kimin için][iOS ve Android sürümleri][özellik, bir cümle açıklama, ekrandaki öğeler][App Store bağlantısı][Google Play bağlantısı][hesap silme, iptal, veri dışa aktarma gibi gerçek cevaplar][şirket unvanı][adres][destek e-postası][telefon]
Opus Growth hosting sunucumdaki [sunucu adı] sitesine, [uygulama adı] mobil uygulaması için bir tanıtım sitesi kur. Uygulama: [ne yapar, kimin için], platformlar ve en düşük sürümler: [iOS ve Android sürümleri]. Öne çıkan dört özellik ve her birinin ekranında görünenler: [özellik, bir cümle açıklama, ekrandaki öğeler]. Planlar ve fiyatlar: [plan adı, fiyat, dönem, içerdiği özellikler, deneme süresi; KDV dahil mi]. Mağaza bağlantıları: [App Store bağlantısı], [Google Play bağlantısı]. Destek soruları: [hesap silme, iptal, veri dışa aktarma gibi gerçek cevaplar]. Şirket ve iletişim: [şirket unvanı], [adres], [destek e-postası], [telefon]. Alan adı: [alan adı]. Gerçek ekran görüntüleri: [bağlantılar ya da "yok, HTML ile çiz"].
Sayfalar: ana sayfa (/: hero, telefonlu özellik anlatımı #ozellikler, kimler kullanıyor, fiyatlar #fiyatlar, SSS, indirme çağrısı #indir), destek (/destek/: sık sorulan sorular ve destek iletişimi), gizlilik ve KVKK (/gizlilik/: hem uygulamayı hem siteyi kapsasın; mağazalar gizlilik politikası adresi ister) ve 404.html. Fiyat bölümünde plan kartları ve altında gerçek bir `<table>` ile karşılaştırma olsun; tabloya min-width verme, demoda sabit bir en küçük genişlik telefonda sütunları ekranın dışına itti.
Tarz: sıcak ve güven veren bir uygulama tanıtımı. Krem zemin, koyu bir marka rengi ve yalnız zemin olarak kullanılan tek parlak vurgu. Fontshare'den yuvarlak ve samimi bir display (ör. Chillax) ve okunaklı bir gövde fontu (ör. Manrope). Telefon çerçevesi CSS ile çizilsin (aspect-ratio 9/19, yuvarlak köşe, çentik) ve ekranlar görsel dosyası değil HTML ve CSS olsun; ekran kartları aria-hidden süs, altındaki metin özelliği anlatsın. Mağaza düğmelerinde gerçek uygulama için Apple ve Google'ın resmi rozetlerini kendi sunucuna indirip kullan ve kurallarına uy; alt bilgiye ticari marka notunu ekle.
Hareket kuralları (en zor kısım, harfiyen uygula):
1. Kütüphaneler: yalnız GSAP 3.13 çekirdeği ve ScrollTrigger, yalnız ana sayfada. Lenis, SplitText, Swiper, Lottie ve video YÜKLENMEZ; destek ve gizlilik sayfalarında hiç betik olmasın.
2. Her özellik bölümü kendi küçük telefonunu ve ekranını HTML'de taşısın. Telefonda, JS kapalıyken ve hareket azaltıldığında her özellik kendi ekranıyla alt alta (geniş ekranda yan yana) görünür; bu hal kendi başına eksiksiz olmalı.
3. En az 1024 piksel genişlikte ve hareket istenirken JS, bölümlerdeki ekranları kopyalayıp sağ sütundaki tek telefona taşısın, bölüme `has-phone` sınıfı eklesin ve küçük telefonları gizlesin. Ekranları HTML'de iki kez yazma. Özellik bölümü ilk ekranın altında olduğu için bu sınıf değişimi kayma puanına yansımaz; demoda CLS 0 ölçüldü.
4. Telefonu ScrollTrigger pin ile değil CSS `position: sticky` ile sabitle (top: calc(50vh - telefon yüksekliğinin yarısı)). Pin-spacer eklenmez, JS'siz de çalışır ve sayfa zıplamaz.
5. Ekran değişimi: her özellik bölümü için ScrollTrigger.create ile start "top 55%", end "bottom 55%" ve onToggle; etkin olan ekranı gsap autoAlpha ile göster, öncekini autoAlpha 0 ile gizle. Yalnız opacity kullanma; görünmeyen ekranlar visibility:hidden olsun ki erişilebilirlik denetimi onları okumasın. Etkin bölümün başlığı renk değiştirsin (opacity ile soluklaştırma yok), telefonun yanında kaçıncı özellikte olunduğunu gösteren noktalar olsun.
6. Kartlar ve fiyat kutuları kaydırınca data-reveal ile 20 piksel yukarı kayarak belirsin; matchMedia geri dönüş fonksiyonunda kopyalanan ekranları temizle ki pencere daraltılınca düzen bozulmasın.
Kurulum ve bilinen tuzaklar (demo ölçümünde her biri puanı düşürdü ya da bir şeyi bozdu, atlama):
1. Sunucuda yayında bir site varsa önce bana söyle, çünkü kurulum index.html ve assets klasörünü ezer. scaffold_site'ı önce confirm=false ile önizle, onayımla confirm=true çağır. Sonra site_design_guide ve site_seo_guide'ı oku. Koda başlamadan tasarım yönünü (tipografi, renk, ızgara, imza öğesi, hareket dili ve YÜKLENMEYECEK kütüphaneler) assets dışında kısa bir ART.md dosyasına yaz ve bana göster.
2. Tailwind'i derle, CDN'den yükleme. site_run_command ile background=true vererek `npm i -D tailwindcss@3` kur ve sonucu site_command_status ile izle. `tailwind.config.js` içindeki content yolları bütün HTML dosyalarını, şablonları ve sınıf yazan JS dosyalarını kapsasın. `_src/tw.css` dosyası `@import "../assets/app.css";` satırı ve üç `@tailwind` satırından oluşsun; `npx tailwindcss -c tailwind.config.js -i _src/tw.css -o assets/site.css --minify` ile tek dosyaya derle. Sayfalardan cdn.tailwindcss.com betiğini ve satır içi tailwind.config'i kaldır, yalnız `/assets/site.css` bağla. Her HTML değişikliğinden sonra yeniden derle.
3. Fontları kendi sunucunda barındır. Seçtiğin Fontshare ailesinin Türkçe harfleri (ş, ğ, ı, İ, ç, ö, ü) içerdiğini önce kontrol et: demoda Tanker ailesinde noktasız ı, Outfit ailesinde ş, ğ ve İ yoktu, bu harfler başlıkta yedek fonta düşerdi. Her ağırlığın woff2 dosyasını site_fetch ile `assets/fonts/` altına ayrı ayrı indir, @font-face kurallarını `font-display: swap` ile `assets/app.css` içine yaz (design-check özgün fontu orada arar) ve indirdiğin CSS'teki font-family adını kontrol et. İlk ekrandaki başlığın ve gövdenin fontunu her sayfada `<link rel="preload" as="font" type="font/woff2" crossorigin>` ile stil dosyasından önce yükle; ikiden fazla dosyayı preload etme, demoda üçüncü ağırlığı da preload etmek mobil LCP'yi 0,2 saniye uzattı. Fontshare fontlarının çoğunda ₺ işareti yok, fiyat yazacaksan "TL" kullan.
4. Menüyü ve alt bilgiyi statik HTML yap. chrome.js ve site.config.js'i sayfalara yükleme. site.config.js'teki nav listesini okuyup `_src/header.tpl` ve `_src/footer.tpl` şablonlarını her sayfadaki `<!-- nav:start --><!-- nav:end -->` ve `<!-- footer:start --><!-- footer:end -->` işaretlerinin arasına basan küçük bir `chrome-stamp.mjs` yaz; etkin sayfanın bağlantısına aria-current="page" eklesin. Şablonların uzantısı .html olmasın ve içlerinde `{{...}}` yerine `[[NAV]]` gibi yer tutucu kullan. Mobil menüyü JS'siz `<details>` ile kur. Alt bilgide kurum adı, adres ve telefon düz metin olsun; alt bilgi ve kırıntı bağlantıları dahil her dokunma hedefi en az 44x44 piksel olsun.
5. Görselleri site_fetch ile indirirken dönüştür: aynı fotoğrafı resize="480x", "800x" ve "1200x", image_format="webp", quality=65 ile ayrı dosyalara yaz. site_fetch kırpmaz; Unsplash fotoğrafında farklı oran gerekiyorsa adresin sonuna `?w=1600&h=1200&fit=crop` gibi parametre ekleyerek kırpılmış hali indir. Her `<img>` için srcset, sizes ve gerçek orana uyan width ve height ver. İlk ekrandaki ana görsel fetchpriority="high" olsun ve lazy olmasın; diğerleri loading="lazy" decoding="async" olsun. Mobilde ana görsel ekranı dolduruyorsa `<picture>` ile mobile daha küçük bir kırpım ver.
6. Logonun SVG halini site_write_file ile favicon.svg olarak yaz ve her sayfaya `<link rel="icon" href="/favicon.svg" type="image/svg+xml">` ekle. Favicon yoksa tarayıcı konsola 404 yazar ve En İyi Uygulamalar puanı 96'ya düşer.
7. HTML doğrulayıcısının kuralları: belge büyük harfli `<!DOCTYPE html>` ile başlasın, tel: bağlantılarının görünen metnindeki boşluklar ` ` olsun, style="" niteliği kullanma, her düğmeye type="button" yaz, `<details>` bir `<figure>` içinde figcaption'dan sonra gelmesin.
8. Hareket kütüphanelerini (GSAP, ScrollTrigger) jsdelivr'den site_fetch ile `assets/vendor/` altına indir, sürümü sabitle ve yalnız ana sayfada yükle. `<script defer>` kullanma; sayfanın sonuna küçük bir yükleyici koy: load olayından sonra iki requestAnimationFrame ve ardından requestIdleCallback beklesin, betikleri sırayla async=false ile eklesin. `<head>` içindeki tek satırlık bir betik `<html>`'e `js` sınıfını, prefers-reduced-motion "reduce" değilse `anim` sınıfını eklesin; yükleyici `anim` yoksa hiçbir şey indirmesin. Gizli başlangıç durumlarını yalnız `.anim` altında tanımla ve kütüphane gelmezse diye gizlenen her öğeyi 2,5 saniye sonra görünür yapan bir CSS animasyonu güvenlik ağı olarak ekle. Önceki demolarda defer ile yüklenen kütüphaneler mobil LCP'yi 3,2 saniyeye itti; bu yükleyiciyle 99 ile 100 arası ölçüldü. Kaydırınca beliren öğelerin niteliği data-reveal olsun; design-check hareketi bu adla tanır.
SEO, AEO ve GEO:
1. Adresleri dizin biçiminde ve sonu eğik çizgili kur (/destek/, /gizlilik/). site.config.js'in seo bloğunu doldur ve `node seo-stamp.mjs` çalıştır. Sayfaya özel şemayı (ana sayfa WebPage, MobileApplication (operatingSystem, applicationCategory, downloadUrl olarak iki mağaza adresi, offers olarak verdiğim planlar ve TRY fiyatları; aggregateRating KOYMA, mağaza puanı senin sitende toplanmış bir değerlendirme değildir) ve FAQPage; destek WebPage ve FAQPage; gizlilik WebPage; iç sayfalarda BreadcrumbList. Fiziksel mağazası olmayan bir yazılım şirketi için site.config.js'te localBusiness:false) ayrı `<script type="application/ld+json">` bloklarına yaz ve @id ile temel grafiğe bağla. BreadcrumbList'i @graph içine gömme, kendi bloğunda dursun; seo-check onu yalnız böyle görür.
2. Title en fazla 60 karakter olsun (seo-check 65'i aşanı hata sayar), description 120 ile 158 karakter, her sayfada tek h1 ve başlık sırası atlamasın (h1'den sonra h3 gelince erişilebilirlik 98'e düştü). Her sayfanın ana içeriği en az 150 kelime olsun; iletişim ve gizlilik sayfaları bu sınırın altında kalmaya yatkın.
3. Her sayfanın ilk paragrafı sayfanın sorusuna doğrudan cevap versin. Sayfaya özgü SSS'yi `<details>` ile yaz ve FAQPage olarak işaretle. Yayımlayan kurumu ve "Son güncelleme" tarihini `<time>` ile göster.
4. robots.txt'te GPTBot, OAI-SearchBot, ChatGPT-User, ClaudeBot, Claude-User, Claude-SearchBot, PerplexityBot, Perplexity-User, Google-Extended, Applebot-Extended, Bingbot ve CCBot için kararını gerekçesiyle yaz ve sitemap'i göster. sitemap.xml'de gerçek lastmod olsun. llms.txt'te sitenin iki cümlelik doğru özeti, önemli bilgiler ve önemli sayfaların listesi bulunsun.
5. Uydurma yok: bana sormadan yorum, puan, ödül, müşteri sayısı, sertifika, çalışma saati, koordinat ya da fiyat yazma. Bilmediğin alanı şemaya hiç koyma.
Kapılar (sırayla; hepsi geçmeden "bitti" deme):
1. site_run_command ile `node chrome-stamp.mjs`, Tailwind derlemesi, `node seo-stamp.mjs`, `node seo-check.mjs` (0 hata, 0 uyarı), `node design-check.mjs` (0 hata; kalan uyarıyı gerekçesiyle yaz) ve `npx html-validate "**/*.html"` (0 hata).
2. Her sayfayı site_preview ile view="mobile" ve view="desktop" olarak gör. site_preview sayfayı hareket kapalıyken (reduced-motion) çeker; bu görüntüde içerik eksiksiz görünmüyorsa hareketsiz hal bozuk demektir. Tam sayfa görüntüsünde aşağıdaki lazy görseller boş çıkabilir; bunu hata sayma ama yolunu kontrol et.
3. Her sayfa için core_web_vitals'ı strategy="mobile" ve strategy="desktop" ile çalıştır. Kabul: mobilde Performance en az 95, Accessibility, Best Practices ve SEO 100; masaüstünde dördü de en az 95. Tutmayan sayfada resources=true ile hangi dosyanın geciktirdiğini bul, düzelt ve yeniden ölç. Ardından ana sayfada seo_audit'i strategy="mobile" ve runs=2 ile çalıştır. Ağ istekleri listesinde kendi alan adın dışında bir adres kalmamalı.
4. 360, 390, 768 ve 1440 piksel genişlikte yatay kaydırma olmasın, dokunma hedefleri en az 44 piksel olsun, konsolda hata olmasın. Site, prompt sayfalarındaki gibi 390x790 ve 1440x898 boyutlu bir çerçevede de kusursuz görünmeli.
Hareket kontrolü: site_preview hareketi gösteremediği için bana kendi tarayıcımda neye bakacağımı tarif et. Masaüstünde Özellikler bölümüne gelince telefon sağ tarafta ekranın ortasında sabit kalmalı, her özellik başlığı ortaya geldiğinde telefonun ekranı o özelliğe geçmeli, başlık renk almalı ve yandaki nokta ilerlemeli. Telefonda ve hareketi azalt açıkken her özelliğin altında kendi küçük ekranı görünmeli, hiçbir şey sabitlenmemeli. Mağaza düğmeleri doğru mağazaya gitmeli.
Yayından sonra: site_headers ile `/assets/* Cache-Control: public, max-age=31536000, immutable` kuralını önizle ve onayımla uygula; bundan sonra CSS ya da JS değiştiğinde dosya adını sürümle (site-v2.css gibi). gsc_submit_sitemap ile sitemap.xml'i gönder ve gsc_url_inspect ile ana sayfanın durumuna bak. En sonda bana şunları ver: sayfa sayfa puan tablosu (sayfa, mobil dört puan, masaüstü dört puan, LCP, CLS), kapıların sonucu, tarayıcıda denediğin etkileşimlerin sonucu ve uyguladığın düzeltmelerin listesi.