ADR-001: Müşteri Landing Frontend Stack
DerinVersiyon: 1.0.0
Durum: Onaylandı (2026-06-16, operatör Seçenek A)
Karar tarihi: 2026-06-16
Stack: Astro 5 + React islands + Hub Content API
Not: ADR tam kilidi BL-001 benchmark pass sonrası (§12.4). Next trimmed yalnızca BL-001 fail → Client Pro fallback.
İlgili: 02-client-landings.md, 04-site-hub-cms.md, ADR-001-RESEARCH.md v1.4.0 §13, governance/BACKLOG.md BL-001
Bağlam
Bölüm başlığı “Bağlam”Müşteri tuning web siteleri (reprocarspain, kfzservice24, tuningwebsite dağıtımı) için landing UI stack’i seçilecek.
Bu katman:
- Filament Site Hub (
admin.{musteri}.com) ile ayrı repo - Hub Content API’den içerik alır
- Müşteriye teslim edilebilir (landing repo + DB dump)
- Portal (
portal.*) ile karıştırılmaz
Kendi markalar (tuningwebsite, ygtlabs, ETP) bu ADR kapsamı dışındadır; onlar Next.js tam klon kullanır.
Neden Inertia elendi
Bölüm başlığı “Neden Inertia elendi”- Laravel coupling; React özgürlüğü kısıtlı hissi
laravel-react-i18nyetersiz (reprocarspain mevcut acı noktası)- SPA hissi SEO ve hız beklentisiyle çelişiyor
- Müşteriye landing verirken Laravel de gider
reprocarspain bugün: Laravel 12 + Inertia 3 + React 19 + Filament admin + SSR (PM2 reprocar-ssr). Migrate hedefi: landing’i ayır, admin Filament Hub’ta kalır.
Gereksinimler (onaylanmış)
Bölüm başlığı “Gereksinimler (onaylanmış)”| # | Gereksinim | Öncelik |
|---|---|---|
| R1 | Gelişmiş SEO (meta, schema, sitemap, CWV) | Zorunlu |
| R2 | Çok dil (1-3 locale per site) | Zorunlu |
| R3 | Hub API’den içerik fetch, sadece UI render | Zorunlu |
| R4 | Admin değişikliği ~5 sn içinde görünür (kayıt + refresh) | Zorunlu |
| R5 | Statik ağırlıklı, hızlı sayfa hissi | Zorunlu |
| R6 | Müşteriye teslim edilebilir ince repo | Zorunlu |
| R7 | Stajyer öğrenilebilir | Yüksek |
| R8 | ETP ekosistemi pattern uyumu | Orta |
| R9 | İnteraktif sayfalar (simulator, funnel) desteklenmeli | Yüksek (reprocar) |
Müşteri site tipleri (iki şablon ihtiyacı)
Bölüm başlığı “Müşteri site tipleri (iki şablon ihtiyacı)”| Tip | Örnek | Özellik |
|---|---|---|
| Basit | kfzservice24 | Slider, services, blog, FAQ, contact |
| Zengin | reprocarspain | Basit + tuning simulator (Vehicle API, cascade UI, grafik) |
Tek stack her iki tipi de karşılamalı veya dual-template (ADR aday D) kabul edilmeli.
Adaylar
Bölüm başlığı “Adaylar”A: Astro 5 + React islands
Bölüm başlığı “A: Astro 5 + React islands”Sunucuda kanıt: tunerstack.io/httpdocs (Astro 5.17, @astrojs/node, React 18 islands, PM2 :4321)
| Artı | Eksi |
|---|---|
| SEO-first, HTML ağırlıklı çıktı | ETP ekosisteminden farklı stack (öğrenme) |
| Müşteriye çok temiz repo (Node + Astro) | Hub webhook revalidation yazılmalı |
| Statik blog/landing ideal | Simulator = React island port gerekir |
| Düşük JS bundle | Prisma/admin prototipi tunerstack’te var; müşteri landing’de olmamalı |
Simulator uyumu: SimulatorWidget React bileşeni Astro island olarak port edilebilir; Vehicle API client-side veya Astro server endpoint proxy.
i18n: astro-i18n veya route-per-locale (/es/, /de/); 1-3 dil için yeterli.
Revalidation: Astro 5 on-demand server islands veya build webhook; ADR-002 için custom Hub webhook gerekir (BL-007).
B: Next.js 16 trimmed (ETP landing-only fork)
Bölüm başlığı “B: Next.js 16 trimmed (ETP landing-only fork)”Sunucuda kanıt: ecutuningportal.com/httpdocs (landing) katmanı
| Artı | Eksi |
|---|---|
| ETP SEO guard’ları, next-intl, ISR taşınır | Müşteri için ağır (Node, .next, Prisma kalıntısı temizlenmeli) |
revalidateTag ADR-002’ye doğrudan uyum | Her müşteri PM2 + daha fazla RAM |
| Simulator ETP vehicle section pattern’i yakın | Müşteriye “framework” olarak Next vermek daha karmaşık |
| Stajyer ETP öğrendikten sonra aynı dil | Bundle ve build süresi Astro’dan yüksek |
Trimmed clone içeriği: (landing)/*, components/landing/*, Hub API client, messages/ veya API-only i18n. Çıkar: admin, customer, Prisma (içerik Hub’dan).
C: Laravel Inertia + React
Bölüm başlığı “C: Laravel Inertia + React”Durum: Elendi (migrate kaynağı, hedef değil)
D: Dual-template (önerilen tartışma yönü)
Bölüm başlığı “D: Dual-template (önerilen tartışma yönü)”| Şablon | Stack | Kullanım |
|---|---|---|
| Client Lite | Astro 5 + Hub API | kfzservice24, basit müşteriler |
| Client Pro | Next 16 trimmed VEYA Astro + simulator island paketi | reprocarspain, simulator/funnel |
Artı: Doğru araç doğru iş; basit siteler hafif kalır.
Eksi: İki starter bakımı; stajyer iki pattern öğrenir.
Operatör sorusu: Tek stack mi zorunlu, dual-template kabul edilebilir mi?
E: React Router 7 Framework Mode (Remix birleşmesi)
Bölüm başlığı “E: React Router 7 Framework Mode (Remix birleşmesi)”Durum: Reject (fabrika varsayılanı) — skor 77/100 (RESEARCH)
Aralık 2024’ten itibaren Remix v2 → RR7 Framework Mode. Route loader ile Hub API fetch doğal; tam React hydrate.
| Artı | Eksi |
|---|---|
| Loader pattern headless CMS ile uyumlu | revalidateTag yok; ADR-002 custom cache (56/100) |
| Vite tabanlı; Next’ten ince repo | ETP ekibi RR7 deneyimi sıfır |
| Shopify Hydrogen backing | Full hydrate; CWV Astro altında |
| reprocar SSR mental modeli yakın | Üçüncü meta-framework; Astro+Next yeterli |
İstisna: reprocar migrate (D-023 freeze) kalkarsa secondary değerlendirme.
i18n: prefix(":locale?", routes) + Paraglide/Intlayer; next-intl/astro kadar olgun değil.
F: TanStack Start
Bölüm başlığı “F: TanStack Start”Durum: İzleme listesi — skor 76/100; üretim şablonu değil
| Artı | Eksi |
|---|---|
| Full-stack React; loader benzeri | RC/erken 1.x; supply-chain riski |
| Simulator tam React | ISR/tag revalidation yok |
| Router hızlı büyüyor | i18n birinci sınıf değil |
Rol: BL-001 benchmark’ta Astro fail → Next yerine opsiyonel üçüncü satır (BL-015).
G: Reddedilen ek adaylar
Bölüm başlığı “G: Reddedilen ek adaylar”| Aday | Skor | Neden |
|---|---|---|
| RR7 Library + Vite SSR | 61 | Standart fabrika yok |
| Nuxt 4 | 83* | Vue; React zorunlu |
| SvelteKit | 81* | Svelte; React zorunlu |
| Gatsby | ~25 | Ölü trend |
*React şartı olmasaydı güçlü; ADR kapsamı dışı.
Karşılaştırma özeti (ARGE v1.1 — 100 skor)
Bölüm başlığı “Karşılaştırma özeti (ARGE v1.1 — 100 skor)”| Kriter | Astro | Next | Dual | RR7 FW | TanStack |
|---|---|---|---|---|---|
| Toplam (100) | 86.0 | 80.4 | 82.1 | 77.0 | 76.0 |
| SEO / CWV | 92/94 | 90/82 | 91/88 | 85/79 | 84/86 |
| Revalidation (ADR-002) | 68 | 92 | 80 | 56 | 70 |
| Müşteri teslim | 88 | 62 | 75 | 69 | 70 |
| Ekip öğrenme | 72 | 92 | 78 | 54 | 78 |
| Fabrika rolü | Primary | Secondary | Opsiyonel | Reject | İzleme |
Detay: ADR-001-RESEARCH.md. Benchmark (BL-001) ile revalidation/simulator doğrulanacak.
Jüri kararı (2026-06-16, izole ajanlar)
Bölüm başlığı “Jüri kararı (2026-06-16, izole ajanlar)”8 savunucu + 3 jüri (Composer 2.5, izole). Oybirliği: Astro 5 + React islands birincil.
| Rol | Karar |
|---|---|
| Birincil | Astro 5 + React islands + Hub API |
| Client Standard | Astro (kfzservice24 tipi) |
| Client Pro | Aynı Astro repo + @ygt/client-widgets |
| Fallback | Yok (D-028): Astro-only; benchmark tekrar |
| Red | Inertia, Vite SPA, RR7, TanStack üretim, Next tek stack, Dual varsayılan |
Tam metin: ADR-001-RESEARCH.md §13. BL-001 kanıt: customremap.com (ilk müşteri).
Hub API tüketici sözleşmesi (stack bağımsız)
Bölüm başlığı “Hub API tüketici sözleşmesi (stack bağımsız)”Landing hangi framework olursa olsun:
// lib/hub-client.ts (her starter'da aynı mantık)const content = await hub.getHomepage({ site: SITE_SLUG, locale });- Build time: SSG için fetch at build
- Runtime: ISR veya Astro SSR ile revalidate
- Secret:
HUB_API_URL,HUB_SITE_TOKEN(ENV only)
Benchmark planı (BL-001)
Bölüm başlığı “Benchmark planı (BL-001)”Ortam: Sentetik demo + Hub mock API.
Senaryolar:
- Homepage (slider + services + FAQ)
- Blog list + blog detail
- Locale switch (ES / EN)
- Admin webhook → sayfa güncelleme süresi
- Simulator mini (reprocar cascade mock)
Ölçümler: LCP, JS bundle KB, build süresi, revalidation p50/p95, stajyer 4h “yeni section” testi.
Geçici kurallar
Bölüm başlığı “Geçici kurallar”- reprocarspain canlı sistem: Acil migrate yok (D-022). Müşteri Inertia landing’i kullanmaya devam eder.
- Yeni müşteri siteleri: ADR-001 kilitlenince şablon fork (BL-001).
- Site Hub Filament, frontend’den bağımsız geliştirilebilir.
- reprocar kodu referans şablon olarak kalır (Filament CMS Resource’ları Hub için).
Revizyon
Bölüm başlığı “Revizyon”| Versiyon | Tarih | Değişiklik |
|---|---|---|
| 0.1.0 | 2026-06-16 | İlk ADR |
| 0.2.0 | 2026-06-16 | Oturum 8: site tipleri, aday D, reprocar canlı/freeze |
| 0.3.0 | 2026-06-16 | Oturum 10: RR7, TanStack Start, reddedilen adaylar; RESEARCH v1.1 |
| 0.4.0 | 2026-06-16 | Jüri oybirliği Astro; RESEARCH v1.4 §13 |
| 1.0.0 | 2026-06-16 | Onaylandı: Astro 5 + React islands (operatör A); BL-001 bekliyor |