# PRD — Sitar Apart & Otel Web Sitesi

## 1. Proje Özeti

**İşletme:** Sitar Apart & Otel
**Konum:** Akyaka, İnişdibi Cd. No:46, Ula/Muğla
**Telefon:** 0 530 510 98 42
**Mevcut domain:** www.akyakastarapart.com
**Slogan:** "Akyaka'nın Huzuru Sizinle!"

Akyaka'da, denize 10 dakika yürüme mesafesinde, merkezi konumda (market, pazaryeri, kafelere yakın) faaliyet gösteren self-catering apart otel. Kaynak içerik: işletmenin mevcut tanıtım broşüründen (sitar apart.pdf) çıkarıldı.

**Site tipi:** Otel / Apart Otel (self-catering)

## 2. Marka Bilgileri

- **Logo:** Ev/dalga siluetli çizgi logo, turkuaz (#2FB6C4 civarı) renkte, "SİTAR APART & OTEL" yazısı
- **Ana renk:** Turkuaz / camgöbeği (broşürde üst-alt bantlarda kullanılan turkuaz)
- **Yardımcı renkler:** Kirli beyaz / krem arka plan, koyu kahve (ahşap balkon detayları)
- **Ton:** Sıcak, sade, huzurlu — butik apart otel havası (5 yıldızlı lüks otel değil)

## 3. Site Haritası (Sayfa Envanteri)

| Route | Açıklama |
|---|---|
| `/` | Ana Sayfa — hero, kısa tanıtım, olanaklar özeti, öne çıkan daireler, CTA (rezervasyon/iletişim) |
| `/dairelerimiz` | Tüm daire tiplerinin listesi (1+0, 1+1 x2 varyant) |
| `/dairelerimiz/[slug]` | Daire detay sayfası — galeri, açıklama, olanaklar, kapasite, rezervasyon formu |
| `/galeri` | Fotoğraf galerisi (kategorili: daireler, dış cephe, manzara, balkon) |
| `/konum` | Akyaka & ulaşım bilgisi, harita gömme, çevredeki market/pazaryeri/kafeler |
| `/iletisim` | İletişim formu, adres, telefon, WhatsApp linki, harita |
| `/admin/*` | Yönetim paneli (bkz. Bölüm 8) |

Not: Bu işletme restoran/spa gibi ek hizmetler sunmuyor (self-catering apart), bu yüzden "Hizmetlerimiz" sayfası yerine olanaklar (amenities) ana sayfada ve daire detayında gösterilir.

## 4. Dil Seçenekleri

`tr`, `en`, `de` (Akyaka bölgesi yoğun Alman turist trafiği alıyor, DE desteği önemli)

→ next-intl locales: `['tr', 'en', 'de']`
→ `messages/tr.json`, `en.json`, `de.json`

## 5. Servisler / Olanaklar (Amenity)

Broşürden çıkarılan olanaklar:

- Yüzme Havuzu (Pool)
- Wifi
- Özel Mutfak Alanı (Private Kitchen Area)
- Balkon (fotoğraflarda görünüyor, tüm dairelerde var)
- Klima (Akyaka yaz sıcaklarında standart, eklenmesi önerilir — teyit gerekir)

→ Prisma: `model Amenity { slug, labelTr, labelEn, labelDe, icon }`
→ Room modeli üzerinde `amenities String[]` veya `RoomAmenity` join tablosu

## 6. Daire Tipleri (Room)

Broşürden 3 daire konfigürasyonu çıkarıldı:

| Slug | Ad (TR) | Açıklama | Kapasite (tahmini) |
|---|---|---|---|
| `1-0-daire` | 1+0 Dairemiz | Stüdyo tip, tek yatak, mini mutfak, banyo | 1-2 kişi |
| `1-1-daire-a` | 1+1 Dairemiz | Yatak odası + ayrı mutfak köşesi, balkon | 2 kişi |
| `1-1-daire-b` | 1+1 Dairemiz (2 Oda) | 2 kişilik ve 1 kişilik olmak üzere 2 oda, balkon | 3-4 kişi |

Ortak özellikler (broşürden): Denize 10 dk yürüme mesafesi, merkezi konum, market/pazaryeri/kafelere yakınlık.

→ Prisma:
```prisma
enum RoomType {
  STUDIO_1_0
  SUITE_1_1
}

model Room {
  id            String    @id @default(cuid())
  slug          String    @unique
  type          RoomType
  nameTr        String
  nameEn        String
  nameDe        String
  descriptionTr String
  descriptionEn String
  descriptionDe String
  capacity      Int
  price         Int?      // gecelik fiyat (varsa; broşürde fiyat yok, admin'den girilecek)
  imageUrl      String?
  images        String[]
  amenities     String[]
  available     Boolean   @default(true)
  featured      Boolean   @default(false)
  createdAt     DateTime  @default(now())
  updatedAt     DateTime  @updatedAt
  deletedAt     DateTime?
}
```

**Not:** Broşürde gecelik fiyat bilgisi yok. İşletme sahibinden fiyat teyidi alınmalı; alınana kadar mock data'da placeholder fiyat kullanılacak ve "Fiyat için iletişime geçin" ibaresi eklenmesi önerilir.

## 7. Rezervasyon Formu Alanları

Bu bir self-catering apart, online ödeme/anlık onay yok — **rezervasyon talebi** (inquiry) formu olarak kurgulanmalı, otomatik onay değil.

Alanlar: `checkIn`, `checkOut`, `adults`, `children`, `roomId` (daire tipi seçimi), `fullName`, `email`, `phone`, `message`

→ Prisma:
```prisma
enum ReservationStatus {
  PENDING
  CONFIRMED
  CANCELLED
}

model Reservation {
  id          String            @id @default(cuid())
  roomId      String
  room        Room              @relation(fields: [roomId], references: [id])
  checkIn     DateTime
  checkOut    DateTime
  adults      Int
  children    Int               @default(0)
  fullName    String
  email       String
  phone       String
  message     String?
  status      ReservationStatus @default(PENDING)
  createdAt   DateTime          @default(now())
  updatedAt   DateTime          @updatedAt
  deletedAt   DateTime?
}
```
→ API: `POST /api/reservations` (public), `GET /api/admin/reservations` (liste)
→ Zod: `ReservationSchema`

## 8. İletişim Formu Alanları

`fullName`, `email`, `phone`, `message`

→ Prisma: `model ContactMessage { fullName, email, phone, message, read Boolean @default(false), ... }`
→ API: `POST /api/contact` (public), `GET /api/admin/messages`

## 9. Admin / Yönetim İhtiyaçları

Standart admin paneli (her projede sabit) + bu proje için:

- `/admin/rooms` — daire tipleri CRUD (ad, açıklama TR/EN/DE, kapasite, fiyat, olanaklar, görseller)
- `/admin/reservations` — rezervasyon talepleri listesi, durum güncelleme (PENDING/CONFIRMED/CANCELLED)
- `/admin/gallery` — galeri görselleri CRUD, kategori bazlı
- `/admin/messages` — iletişim mesajları listesi, okundu işaretleme
- `/admin/amenities` — olanaklar listesi (opsiyonel, sabit liste de olabilir)
- Dashboard: toplam daire sayısı, bekleyen rezervasyon sayısı, okunmamış mesaj sayısı

## 10. Sosyal Medya / 3. Parti Entegrasyonlar

- **WhatsApp click-to-chat:** `0 530 510 98 42` numarasına yönlenen buton (header + iletişim sayfası)
- **Google Maps embed:** Akyaka, İnişdibi Cd. No:46, Ula/Muğla konumu
- Instagram/Facebook hesabı broşürde belirtilmemiş — işletme sahibinden teyit alınmalı, varsa footer'a eklenir

→ Env: `NEXT_PUBLIC_WHATSAPP_NUMBER`, `NEXT_PUBLIC_MAPS_EMBED_URL`

## 11. Teknik Notlar

- Mevcut domain `www.akyakastarapart.com` — yeni site bu domain üzerine yayınlanacak (Coolify deploy sürecinde teyit edilmeli)
- Broşürdeki fotoğraflar (3 sayfa, düşük-orta çözünürlük) başlangıç mock görseli olarak kullanılabilir; ancak production için işletmeden yüksek çözünürlüklü orijinal fotoğraf talep edilmesi önerilir
- Fiyat bilgisi eksik — admin panelinden sonradan girilecek şekilde `price` alanı nullable
- Tek işletme, çoklu şube yok — `Location`/`Branch` modeline gerek yok

## 12. Rebranding / Öncelik Sırası (Todo)

1. Ana Sayfa + Daireler listesi + Daire detay (temel akış)
2. Rezervasyon talep formu + admin onay ekranı
3. Galeri sayfası
4. İletişim sayfası + WhatsApp/Harita entegrasyonu
5. Admin panel (rooms, reservations, gallery, messages)
6. TR/EN/DE içerik doldurma
7. Openinary görsel yükleme entegrasyonu
8. Coolify deploy (bkz. `/coolify-deploy` skill)

---

## PRD'den Çıkarılanlar (Özet)

- **Modeller:** Room, Reservation, Amenity, Gallery, ContactMessage
- **Lokaller:** tr, en, de
- **Admin sayfaları:** rooms, reservations, gallery, messages, amenities
- **Özel route'lar:** `/api/reservations` (public POST), `/api/contact` (public POST)
- **Eksik / teyit gereken bilgiler:** gecelik fiyatlar, sosyal medya hesapları, klima olup olmadığı, yüksek çözünürlüklü görseller