7.5 KiB
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:
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:
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 42numarası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
pricealanı nullable - Tek işletme, çoklu şube yok —
Location/Branchmodeline gerek yok
12. Rebranding / Öncelik Sırası (Todo)
- Ana Sayfa + Daireler listesi + Daire detay (temel akış)
- Rezervasyon talep formu + admin onay ekranı
- Galeri sayfası
- İletişim sayfası + WhatsApp/Harita entegrasyonu
- Admin panel (rooms, reservations, gallery, messages)
- TR/EN/DE içerik doldurma
- Openinary görsel yükleme entegrasyonu
- Coolify deploy (bkz.
/coolify-deployskill)
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