feat: mobil uyumlu PWA — manifest, service worker, gercek kurulum, filtre cekmecesi

- public/manifest.webmanifest (standalone, tr, kisayollar) + 192/512 ve
  maskable ikonlar + apple-touch-icon; index.html PWA meta etiketleri
- public/sw.js: /assets cache-first (hash'li adlar), kabuk network-first,
  /api ASLA onbellekten (eski ihale gosterilmesin); surum degisince temizlik
- main.jsx: SW yalniz uretimde kaydedilir (dev'de HMR ile cakismasin)
- Mobil PWA sayfasindaki "Cihaza Yukle" dugmesi sahteydi (setInstalled(true));
  artik beforeinstallprompt ile gercek kurulum, standalone algilama, iOS/
  Android/masaustu yol tarifi
- Kucuk ekranda sol filtre paneli listeyi 72 satir asagi itiyordu: lg altinda
  "Filtreler" dugmesiyle acilan cekmece; sag panel xl altinda gizli

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
2026-09-04 00:39:40 +03:00
co-authored by Claude Fable 5.1
parent acec88a4c4
commit fabff18fe9
12 changed files with 136 additions and 7 deletions
+6 -2
View File
@@ -23,6 +23,7 @@ import { ContractSearch } from './components/tools/ContractSearch';
import { VatCalculator } from './components/tools/VatCalculator';
import { SinirDeger } from './components/tools/SinirDeger';
import { KullanimKilavuzu } from './components/KullanimKilavuzu';
import { MobilFiltreCekmecesi } from './components/MobilFiltreCekmecesi';
import { PriceAnalysis } from './components/tools/PriceAnalysis';
import { CompetitorRadar } from './components/tools/CompetitorRadar';
import { DocumentVault } from './components/tools/DocumentVault';
@@ -48,10 +49,13 @@ const MainContent = () => {
{activeTab === 'list' && (
<>
<SummaryCards />
<MobilFiltreCekmecesi />
<div className="flex flex-col lg:flex-row gap-5 items-start">
<LeftSidebar />
{/* Masaüstünde sabit panel; mobilde çekmece (yukarıda) */}
<div className="hidden lg:block shrink-0"><LeftSidebar /></div>
<TenderList />
<RightSidebar />
{/* Sağ panel küçük ekranda listeyi uzatıyordu */}
<div className="hidden xl:block shrink-0"><RightSidebar /></div>
</div>
</>
)}