Dövmeyi bir hizmet değil, bir sanat eseri olarak sunan; randevu sürecini Instagram DM karmaşasından kurtarıp editoryal ve premium bir dijital deneyime taşıyan Next.js tabanlı stüdyo platformu.
Canlı Demo: https://blendz-ink.vercel.app (deploy sonrası güncelleyin) · Plan Dokümanı: plan.md
- 11 Adımlı Wizard Randevu Akışı — Hizmet → Sanatçı → Boyut → Bölge → Referans Görsel → Açıklama → Tarih → Saat → Kişisel Bilgiler → Özet → Başarı
- Randevu Durum Takibi —
BLZ-XXXXXXkodlu takip sayfası (/randevu/onay/[kod]) + timeline (Talep Alındı → İnceleniyor → Onaylandı/Reddedildi → Hatırlatma → Tamamlandı) - Sanatçı Portfolyo Sistemi — Masonry galeri, stil bazlı filtreleme, sanatçı detay sayfaları
- Admin Paneli — Randevu triyajı, takvim (çakışma kontrolü), sanatçı/portfolyo/blog/mesaj/yorum yönetimi, site ayarları, audit log
- Hafif CRM — Müşteri etiketleri (VIP, tekrar gelen, no-show riskli), randevu geçmişi, favori sanatçı
- Blog & SEO — Stil rehberleri, bakım rehberi, SSS,
sitemap.ts+robots.ts+JsonLd+ dinamik meta - Premium Tasarım Dili — Mürekkep Siyahı
#0A0A0A+ Bakır#C77B3E, Fraunces + Inter, editoryal/asimetrik mizanpaj, SaaS şablonlarından bilinçli uzak duruş - Ödeme Yok — Tüm ödemeler stüdyoda yüz yüze (nakit/kart). Online ödeme entegrasyonu bulunmaz.
| Katman | Teknoloji |
|---|---|
| Framework | Next.js 16 (App Router), React 19 |
| Dil | TypeScript 5.9 |
| Stil | Tailwind CSS 4.1, PostCSS |
| Veritabanı | PostgreSQL 16 + Drizzle ORM 0.45 + Drizzle Kit |
| Validasyon | Zod 4 |
| Auth | bcryptjs + httpOnly cookie session (auth_sessions tablosu) |
| Deploy | Vercel |
src/
├── app/
│ ├── (site)/ # Public site (koyu tema, editoryal layout)
│ │ ├── page.tsx # Ana sayfa (hero, öne çıkan işler, sanatçılar, yorumlar)
│ │ ├── hakkimizda/ # Hakkımızda
│ │ ├── sanatcilar/ # Sanatçı listesi + [slug] detay (masonry portfolyo)
│ │ ├── portfolyo/ # Genel galeri (filtrelenebilir masonry)
│ │ ├── dovme-stilleri/ # Stil listesi + [stil] detay
│ │ ├── blog/ # Blog listesi + [slug] detay
│ │ ├── sss/ bakim-rehberi/ iletisim/ # Destek sayfaları
│ │ ├── randevu/ # Wizard + onay/[kod] takip sayfası
│ │ ├── giris/ kayit/ hesabim/ # Auth + müşteri paneli
│ │ └── kvkk/ gizlilik-politikasi/ cerez-politikasi/
│ ├── admin/ # Admin paneli (ayrı layout, korumalı)
│ │ ├── randevular/ takvim/ sanatcilar/ portfolyo/
│ │ ├── blog/ mesajlar/ yorumlar/ musteriler/ ayarlar/
│ │ └── layout.tsx
│ ├── api/
│ │ ├── auth/ (login, register, logout, me)
│ │ ├── appointments/ (create, cancel)
│ │ ├── admin/ (appointments, artists, portfolio, blog, messages, reviews, settings)
│ │ ├── contact/ # İletişim formu
│ │ └── health/ # Health check
│ ├── layout.tsx # Root layout (font, cookie consent)
│ ├── globals.css # Design tokens + Tailwind theme
│ ├── sitemap.ts / robots.ts / not-found.tsx
│ └── ...
├── components/
│ ├── Header.tsx / Footer.tsx / BookingWizard.tsx
│ ├── LoginForm.tsx / RegisterForm.tsx / ContactForm.tsx
│ ├── PortfolioGrid.tsx / ArtImage.tsx / Reveal.tsx / SectionHeading.tsx
│ ├── admin/ (AppointmentStatusManager, BlogPostForm, SettingsForm, ...)
│ └── ...
├── db/
│ ├── schema.ts # 25+ tablo, 12 enum (Drizzle)
│ ├── index.ts # pg Pool + drizzle instance
│ └── seed.ts # Demo veriler
└── lib/
├── auth.ts / password.ts / booking.ts
├── validation.ts / notifications.ts / settings.ts / art.ts / data.ts
- Node.js 20+ · PostgreSQL 16+ · npm / pnpm
git clone https://github.com/<kullanici>/premium-tattoo-studio-plan.git
cd premium-tattoo-studio-plan
npm install.env.local dosyası oluşturun:
DATABASE_URL=postgresql://user:password@localhost:5432/blendz_ink
# Opsiyonel (admin seed / auth için)
ADMIN_EMAIL=admin@blendz.ink
ADMIN_PASSWORD=degistir-bunu
.env.localgit'e commit edilmez (.gitignoreiçinde).
# Migration oluştur ve uygula
npx drizzle-kit generate
npx drizzle-kit migrate
# veya doğrudan push (dev)
npx drizzle-kit push
# Demo verileri yükle (sanatçılar, stiller, hizmetler, portfolyo, blog)
npx tsx src/db/seed.tsnpm run dev # http://localhost:3000
npm run build # production build
npm start # production server
npm run lint # eslint
npm run typecheck # tsc --noEmitEnum'lar: user_role (super_admin, staff, artist, customer), appointment_status (YENI_TALEP → GELMEDI, 8 durum), size_category, artist_status, portfolio_status, review_status, blog_status, contact_status, notification_type ve daha fazlası.
Ana Tablolar:
| Tablo | Açıklama |
|---|---|
users |
Tüm kullanıcılar (rol bazlı) |
artist_profiles |
Sanatçı detayları + specialties (jsonb) |
artist_working_hours / artist_time_off |
Çalışma saatleri ve izinler |
services / tattoo_styles |
Hizmetler ve dövme stilleri |
appointments |
Randevu talepleri (booking_code unique, çakışma kontrolü) |
appointment_status_history / appointment_internal_notes / appointment_reference_images |
Randevu alt kayıtları |
portfolio_items + portfolio_item_styles |
Portfolyo (M:N stil ilişkisi) |
reviews / blog_posts / faq_items / contact_messages |
İçerik ve geri bildirim |
notification_logs / notification_templates |
Bildirim sistemi (email/sms) |
auth_sessions / password_reset_tokens / audit_logs / role_permissions |
Auth ve denetim |
Detaylı şema için: src/db/schema.ts
| Rol | Erişim |
|---|---|
super_admin |
Tüm admin modülleri + ayarlar + roller |
staff |
Randevu triyajı, müşteri/mesaj/yorum yönetimi |
artist |
Kendi portfolyosu, kendi takvimi, kendisine atanan randevular |
customer |
Randevu oluşturma, geçmiş randevular, favoriler, profil |
guest (girişsiz) |
İçerik tüketimi + misafir olarak randevu talebi |
| Method | Endpoint | Açıklama |
|---|---|---|
POST |
/api/auth/register |
Kayıt |
POST |
/api/auth/login |
Giriş (cookie set) |
POST |
/api/auth/logout |
Çıkış |
GET |
/api/auth/me |
Mevcut kullanıcı |
POST |
/api/appointments |
Randevu oluştur (wizard) |
POST |
/api/appointments/cancel |
Randevu iptal (müşteri) |
POST |
/api/contact |
İletişim formu |
GET |
/api/health |
Health check |
PATCH |
/api/admin/appointments/[id] |
Durum güncelle (onayla/reddet/tamamla) |
CRUD |
/api/admin/artists/[id] |
Sanatçı yönetimi |
CRUD |
/api/admin/portfolio/[id] |
Portfolyo yönetimi |
CRUD |
/api/admin/blog |
Blog yönetimi |
PATCH |
/api/admin/messages/[id] |
Mesaj durumu |
PATCH |
/api/admin/reviews/[id] |
Yorum onayı |
GET/PUT |
/api/admin/settings |
Site ayarları |
src/app/globals.css içinde tanımlı token'lar:
- Renkler:
--color-bg: #0A0A0A,--color-accent: #C77B3E,--color-text: #F5F1EA,--color-success: #5B6B4E,--color-critical: #9C3D3D - Tipografi: Fraunces (display/serif) + Inter (sans),
clamp()ile fluid ölçek - Bileşenler:
.btn-primary,.btn-secondary,.btn-text,.input-line(underline),.input-admin,.kicker,.card-surface,.hairline - Kurallar: Keskin/hafif yuvarlatılmış köşeler (0-8px), cömert negatif alan, asimetrik grid, glassmorphism sadece header'da
Bkz. plan.md §4 Marka Analizi ve §7-8 UI/Design System.
- Projeyi Vercel'e import edin.
- Environment Variables'a
DATABASE_URLekleyin (Neon / Supabase / Vercel Postgres). - Build Command:
next build· Output:.next - Deploy sonrası
npx drizzle-kit migrateile production DB'yi migrate edin.
- Kapsamlı Ürün & Mühendislik Planı:
plan.md(21 bölüm: vizyon, iş analizi, marka, IA, UX, UI, booking, admin, CRM, SEO, blog, DB, API, güvenlik, performans, analitik, yol haritası)
- Fork'layın → feature branch oluşturun (
feat/randevu-hatirlatma) - Commit'leyin (
git commit -m "feat: hatırlatma e-postası eklendi") - Push'layın ve Pull Request açın
Issue ve öneriler için Issues sekmesini kullanın.
Bu proje özel bir stüdyo projesi olarak geliştirilmiştir. Lisans belirtilene kadar tüm hakları saklıdır.
Built with ♥ for Blendz Ink — Ten senin. Hikaye bizim ustalığımız.