Proje: Okul Platform · Hub: Okul Platform — Conventions

Responsive layout refactor sırasında uygulanan karar. Blade’lerdeki inline <script> / <style> blokları hangi durumda bırakılır, hangi durumda webpack.mix.js pipeline’ına taşınır.

Inline KALIR (zorunlu)

TipÖrnekGerekçe
PHP → JS data bridgewindow.profilingMasterData = @json($master_data)Server-rendered data, external dosya alamaz
Pre-paint IIFEViewport override (responsive/layouts/master.blade.php)defer ile yüklenen dosya paint sonrası çalışır, zoom’u undo etmek geç kalır
Critical initvar dataLayer = [] (GTM prerequisite)GTM loader’dan önce global tanımlı olmalı
JSON-LD<script type="application/ld+json"> (seo-head)Google structured data, HTML içinde olması gerekiyor
Global vars_csrfToken, _userId, _gaEventCat (global-js-vars)Request-scoped PHP değerleri

Inline ÇIKARILIR (mix.scripts)

Kırmızı bayrakÖrnek (bu refactor’dan)
>20 satır JSform-helpers.blade.php (IIFE inside <script> tag)
Reusable business logicPhone mask, email validator, footer accordion toggle
Duplicate fonksiyonfinder/result.blade.php’deki finderBuildListingUrl (aynısı finder-builder.js’te vardı)
UI event handler’larAccordion click/matchMedia listener’ları

Uygulanan yapı

resources/assets/scripts/profiling/
├── alpine-app.js          (Alpine init + component register + window alias)
├── form-helpers.js        (phone + email validator, mix.scripts)
├── footer-accordion.js    (lg+ open-always, mix.scripts)
├── ga-events.js           (gaSendEventXxx helper'ları)
└── components/            (Alpine component factory'leri)

resources/assets/css/
└── cookie-consent.css     (mix.styles — responsive layout kullanabilsin)

resources/assets/styles/
└── responsive.css         (Tailwind v4 entry + inline-overrides merged)

Fayda

  • Minify + gzip (HTML payload küçülür, her sayfada tekrarlanmaz)
  • Browser cache (hash’li URL, immutable)
  • ESLint/Prettier/unit test kapsamı
  • CSP uyumlu (script-src 'self' için 'unsafe-inline' gereksinimi azalır)
  • Single source of truth (duplicate risk yok)