v17 - PWA + instant.page + Service Worker

t-{id} Tema Yapisi

Multi-Tenant Tema Sistemi - Kapsamli Referans Dokumani

v17 Degisiklikler

Onceki Versiyon Degisiklikleri (v16)

1. Felsefe

t-{id} = Tenant temasi. Sadece ozel dosyalar burada.

simple = Fallback (mevcut, zaten var). t-{id}'de yoksa buradan alir.

Ornek: t-3/homepage.blade.php var -> onu kullan, t-3/blog/show.blade.php yok -> simple'dan al

2. View Path Oncelik Sirasi

KRITIK!

DOGRU Oncelik Sirasi (ThemeService.php)

1
resources/views/themes/{tema}/{view}

Ana tema klasoru - TEK DOSYA PRENSIBI - ONCELIKLI!

2
Modules/{Modul}/views/themes/{tema}/{view}

Modul ici tema - Fallback (resources'da yoksa)

3
Modules/{Modul}/views/themes/simple/{view}

Simple tema fallback - MODUL ICINDE

4
{modul}::front.{view}

Son care - Modul front klasoru

3. Container Pattern (ixtif Standardi)

Basit Anlatim

Tum sayfalarda ayni container genisligi kullanilmali. ixtif.com header genisligi referans alinmistir.

DOGRU: ixtif Standardi

{{-- TUM sayfalar bu container'i kullanmali --}}
<div class="container mx-auto px-4 sm:px-4 md:px-2">
    ...
</div>

// Mobil (0-767px): px-4 (16px)
// Tablet (768px+): px-4 (16px)
// Desktop (md/768px+): px-2 (8px) - daha dar padding

YANLIS: Eski Genis Padding

{{-- YANLIS! Fazla padding, tutarsiz --}}
<div class="container mx-auto px-3 sm:px-6 md:px-8 lg:px-12 xl:px-16 2xl:px-20">
<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">

{{-- DOGRU! --}}
<div class="container mx-auto px-4 sm:px-4 md:px-2">

4. Minimal Subheader Pattern

Basit Anlatim

Gradient header KALDIRILDI! Yerine minimal subheader: Breadcrumb + H1 baslik, gri arkaplan.

DOGRU: Minimal Subheader

{{-- MINIMAL SUBHEADER --}}
<section class="bg-gray-50 dark:bg-gray-800 border-b border-gray-200 dark:border-gray-700">
    <div class="container mx-auto px-4 sm:px-4 md:px-2 py-4">
        {{-- Breadcrumb --}}
        <nav class="text-sm text-gray-500 dark:text-gray-400 mb-2">
            @foreach($breadcrumbsArray as $index => $crumb)
                ...
            @endforeach
        </nav>
        {{-- H1 Baslik --}}
        <h1 class="text-2xl md:text-3xl font-bold font-heading text-gray-900 dark:text-white">
            {{ $title }}
        </h1>
    </div>
</section>

5. Breakpoint Sistemi

Basit Anlatim

Header ve navigasyon icin xl (1280px) breakpoint kullaniyoruz. lg (1024px) kullanmak tablet boyutlarinda sorunlara yol acar!

Tailwind Breakpoint'leri

ClassPikselKullanim
sm:640pxBuyuk telefonlar
md:768pxTablet dikey
lg:1024pxTablet yatay / Kucuk laptop
xl:1280pxHEADER BREAKPOINT!
2xl:1536pxBuyuk ekranlar

6. Grid Sistemi (Modul Tipine Gore)

Basit Anlatim

Grid yapisi modul tipine gore degisir. Gorsel agirlikli modullerde 2 kolon, text agirlikli modullerde 1 kolon mobilde daha okunabilir.

Gorsel Agirlikli Moduller

Sadece gorsel + baslik, az text

Servicegrid-cols-2 md:grid-cols-3
Portfoliogrid-cols-2 md:grid-cols-3
Galerigrid-cols-2 md:grid-cols-3 lg:grid-cols-4

Text Agirlikli Moduller

Baslik + aciklama + tarih + okuma suresi

Bloggrid-cols-1 md:grid-cols-2 lg:grid-cols-3
Pagegrid-cols-1 md:grid-cols-2 lg:grid-cols-3
Announcementgrid-cols-1 md:grid-cols-2 lg:grid-cols-3

7. Typography (Prose Styling)

DOGRU: Prose Styling

{{-- Icerik alanlari icin --}}
<div class="prose prose-base max-w-none font-body dark:prose-invert
          prose-headings:font-heading prose-headings:text-gray-900
          prose-p:text-gray-600 dark:prose-p:text-gray-300
          prose-a:text-primary-600 hover:prose-a:underline">
    @parsewidgets($body ?? '')
</div>

8. PWA + instant.page + Service Worker

YENI v17

Basit Anlatim

Sayfalar daha hizli acilir, site uygulama olarak yuklenebilir ve offline calisabilir. Tum bunlar otomatik olarak hem t-3 hem simple temalarda aktif.

instant.page

Link'lere mouse ile geldiginde sayfa arka planda onceden yuklenir.

65ms onceden preload

1KB boyutu

Sayfa gecisleri %50 hizli

PWA Manifest

Tarayicida "Uygulamayi Yukle" butonu gosterir.

Ana ekrana eklenebilir

Fullscreen modda acilir

Tema rengi ile splash screen

Service Worker

Sayfalari onbellege alir, offline destek saglar.

Offline calismak

Cache stratejisi

Background sync

Dosya Yapisi

Public Dosyalar:

public/
├── js/instantpage.js    // Preload scripti
├── sw.js                 // Service Worker
└── manifest.json         // Dinamik (route)

Tema Entegrasyonu:

t-3/layouts/app.blade.php
├── <head> → manifest link
└── </body> → instant.page + pwa-registration

simple/layouts/
├── header.blade.php → manifest link
└── footer.blade.php → instant.page + pwa-registration

Layout Entegrasyonu

{{-- HEAD icinde (PWA Manifest + Apple Touch Icon) --}}
<link rel="manifest" href="{{ route('manifest') }}">

{{-- Apple Touch Icon (iOS Safari icin - ZORUNLU!) --}}
@php
    $logoService = app(\App\Services\LogoService::class);
    $appleTouchIcon = $logoService->getSchemaLogoUrl();
@endphp
@if($appleTouchIcon)
    <link rel="apple-touch-icon" href="{{ $appleTouchIcon }}">
@endif

{{-- BODY sonunda (instant.page + SW) --}}
<script src="{{ asset('js/instantpage.js') }}" type="module"></script>
<x-pwa-registration />

Apple Touch Icon (iOS Zorunlu!)

iOS Safari manifest.json'daki icon'lari kullanmaz!

iPhone/iPad ana ekrana ekleme icin apple-touch-icon sart

Ideal boyut: 180x180px (iOS otomatik olcekler)

LogoService ile dinamik olarak site logosu kullanilir

Dinamik Manifest (routes/web.php)

// PWA Manifest - Tenant'a gore dinamik
Route::get('/manifest.json', function () {
    $siteName = setting('site_name') ?: config('app.name');
    $themeColor = setting('site_theme_color') ?: '#000000';

    return response()->json([
        'name' => $siteName,
        'short_name' => $siteName,
        'start_url' => url('/'),
        'display' => 'standalone',
        'theme_color' => $themeColor,
        'icons' => [...] // LogoService'den
    ]);
})->name('manifest');

Service Worker Cache Stratejisi

Network First: Once network'ten al, basarisizsa cache'den

Bypass: HLS streaming, API, AJAX, pagination istekleri cache'lenmez

Auto Update: Yeni versiyon geldiginde eski cache temizlenir

10. Settings Pattern

Iletisim Ayarlari

KeyAciklama
contact_phone_1Ana telefon (sabit)
contact_phone_2Mobil telefon
contact_whatsapp_1WhatsApp numarasi
contact_email_1E-posta

Yeni Tema Dosyasi Checklist