# PRD — imajViewer

> Product Requirements Document
> Versiyon: 1.0
> Tarih: 2026-07-22

---

## 1. Ürün Özeti

**imajViewer**, Flutter ile geliştirilmiş, Linux masaüstünde çalışan ultra hafif bir görüntü izleyici uygulamasıdır.
12'den fazla yüksek çözünürlüklü resmi aynı anda açabilir, fare tekerleği ile anlık zoom yapabilir ve
tüm pencere alanını resim göstermek için kullanır.

## 2. Hedef Kitle

- Linux kullanıcıları
- Fotoğrafçılar, tasarımcılar (hızlı önizleme ihtiyacı)
- Yüksek sayıda resim arasında hızlıca gezinmek isteyen kullanıcılar

## 3. Fonksiyonel Gereksinimler

### F-01: Resim Açma
- Kullanıcı dosya yöneticisinden sürükle-bırak ile resim ekleyebilir
- Aynı anda 12+ resim açılabilir
- Desteklenen formatlar: PNG, JPEG, WebP, BMP, GIF (statik)

### F-02: Zoom
- Fare tekerleği (mouse scroll) ile kademesiz zoom
- Zoom odağı fare imlecinin bulunduğu nokta olmalı
- Zoom oranı: %10 - %1000 arası

### F-03: Frameless Pencere
- Native title bar yok, sadece sağ üstte küçült (minimize) ve kapat (close) butonları
- Pencere sürüklenebilir (üst kısımdan)
- Pencere boyutlandırılabilir (kenarlardan/köşelerden)

### F-04: Görüntüleme
- Scroll bar yok
- Resim pencereye sığacak şekilde başlangıçta yerleşir (fit)
- Siyah/zemin renkli arka plan
- Pencere yeniden boyutlandırılınca resim yeniden ortalanır

### F-05: Navigasyon (ileri versiyon)
- Klavye kısayolları (← → ile resim değiştirme)
- Alt kısımda thumbnail strip

## 4. Fonksiyonel Olmayan Gereksinimler

### NF-01: Performans
- 12 adet 4K (3840x2160) resim aynı anda açıkken akıcı zoom (en az 60 FPS)
- Bellek kullanımı 2 GB'ı geçmemeli
- Resimler GPU'da işlenmeli, CPU yeniden ölçekleme yapılmamalı

### NF-02: Başlangıç Süresi
- Uygulama 2 saniyeden kısa sürede açılmalı

### NF-03: Binary Boyutu
- Derlenmiş uygulama 50 MB'ı geçmemeli

### NF-04: Güvenilirlik
- Büyük resimler (10000x10000 pixel) uygulamayı çökertmemeli
- Bellek sınırı aşılınca en eski resim otomatik boşaltılmalı

## 5. UI Tasarım İlkeleri

- **Minimalist:** Sadece resim var, gereksiz hiçbir UI öğesi yok
- **Karanlık tema:** Siyah (#1a1a1a) zemin
- **Frameless:** Hiçbir pencere çerçevesi görünmez
- **Duyarlı:** Pencere boyutu değişince resim otomatik yeniden boyutlanır

## 6. Teknik Yığın

| Bileşen | Teknoloji |
|---|---|
| UI Framework | Flutter 3.44+ |
| Platform | Linux Desktop (GTK arkaplan) |
| Dil | Dart 3.12+ |
| Window Yönetimi | window_manager |
| State Yönetimi | ValueNotifier / ChangeNotifier |
| Resim İşleme | dart:ui Image + ImageCache |
| Render | Skia / Impeller (GPU) |

## 7. Kullanıcı Akışı

1. Uygulama açılır → boş siyah ekran
2. Kullanıcı dosyaları sürükler veya `Ctrl+O` ile açar
3. Resim(ler) pencereye sığacak şekilde görüntülenir
4. Fare tekerleği → zoom in/out (imleç odağında)
5. Fare sürükleme → resmi kaydırma (pan)
6. Pencere yeniden boyutlandırma → resim yeniden ortalanır
7. Sağ üst X → uygulama kapanır

## 8. Başarı Kriterleri

- [ ] 12 adet 4K resim açıkken zoom akıcı (60 FPS)
- [ ] Frameless pencere sorunsuz çalışıyor
- [ ] Scroll zoom imleç odağında çalışıyor
- [ ] Bellek kullanımı 2 GB altında
- [ ] Binary boyutu 50 MB altında
