Skip to content

Repository files navigation

BLENDZ INK — Premium Tattoo Studio Platformu

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.

Next.js PostgreSQL Drizzle ORM TypeScript Tailwind CSS

Canlı Demo: https://blendz-ink.vercel.app (deploy sonrası güncelleyin) · Plan Dokümanı: plan.md


✨ Öne Çıkanlar

  • 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 TakibiBLZ-XXXXXX kodlu 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.

🛠 Teknoloji Stack

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

📁 Proje Yapısı

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

🚀 Hızlı Başlangıç

1. Gereksinimler

  • Node.js 20+ · PostgreSQL 16+ · npm / pnpm

2. Kurulum

git clone https://github.com/<kullanici>/premium-tattoo-studio-plan.git
cd premium-tattoo-studio-plan
npm install

3. Ortam Değişkenleri

.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.local git'e commit edilmez (.gitignore içinde).

4. Veritabanı

# 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.ts

5. Geliştirme

npm run dev      # http://localhost:3000
npm run build    # production build
npm start        # production server
npm run lint     # eslint
npm run typecheck # tsc --noEmit

🗄 Veritabanı Modeli (Özet)

Enum'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


🔐 Roller & Yetkiler

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

🔌 API Uç Noktaları

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ı

🎨 Tasarım Sistemi

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.


☁️ Deploy (Vercel)

  1. Projeyi Vercel'e import edin.
  2. Environment Variables'a DATABASE_URL ekleyin (Neon / Supabase / Vercel Postgres).
  3. Build Command: next build · Output: .next
  4. Deploy sonrası npx drizzle-kit migrate ile production DB'yi migrate edin.

📖 Dokümantasyon

  • 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ı)

🤝 Katkı

  1. Fork'layın → feature branch oluşturun (feat/randevu-hatirlatma)
  2. Commit'leyin (git commit -m "feat: hatırlatma e-postası eklendi")
  3. Push'layın ve Pull Request açın

Issue ve öneriler için Issues sekmesini kullanın.


📄 Lisans

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.

Releases

Packages

Contributors

Languages