25 Şubat 2026 · The WP Clan
İsmimizde “WP” var. WordPress ile başladık, WordPress ile büyüdük ve WordPress’i hâlâ seviyoruz. Ama bir ürün inşa etmeye karar verdiğimizde — gerçek bir SaaS, gerçek zamanlı AI konuşmaları, WhatsApp entegrasyonu, takvim senkronizasyonu — WordPress’in sınırlarının nerede bittiğini çok iyi biliyorduk.
Bu yazıda HeyCaly‘nin teknik altyapısını, hangi teknolojileri neden seçtiğimizi ve bir WordPress ajansı olarak bu kararları nasıl aldığımızı anlatıyoruz. Amacımız sadece bir teknoloji listesi sunmak değil; her kararın arkasındaki “neden” sorusuna cevap vermek.
HeyCaly Ne Yapıyor?
HeyCaly, randevuyla çalışan işletmelerin (kuaförler, klinikler, spor salonları, spa merkezleri, veterinerler) geçmiş müşterilerini WhatsApp üzerinden yapay zeka ile geri kazanmasını sağlayan bir SaaS platformu. Boş randevu saatlerini tespit ediyor, doğru müşteriye doğru zamanda kişiselleştirilmiş WhatsApp mesajı gönderiyor ve randevuyu otomatik olarak takvime yazıyor.
Kısacası: yapay zeka destekli bir müşteri geri kazanım asistanı.
“Hizmet sektöründeki işletmeler her hafta randevularının %20-40’ını boş bırakıyor. HeyCaly bu boşlukları akıllıca dolduruyor.”
Neden WordPress Değil?
Önce şunu netleştirelim: WordPress kötü bir teknoloji değil. Projelerimizde hâlâ aktif olarak kullanıyoruz. WooCommerce mağazaları, kurumsal siteler, çok dilli içerik platformları — WordPress bunlar için hâlâ mükemmel.
Ama HeyCaly farklı bir canavar:
- Gerçek zamanlı WhatsApp mesajlaşma — webhook’lar milisaniyeler içinde işlenmeli
- AI konuşma motoru — her mesaj için bağlam yükleme, prompt oluşturma, yanıt üretme
- 27 arka plan görevi — kampanya zamanlamaları, takvim senkronizasyonları, hatırlatmalar
- Çoklu entegrasyon — Google Calendar, Outlook, Stripe, WhatsApp Business API
- Multi-tenant mimari — yüzlerce işletme aynı altyapıda, veri izolasyonu kritik
- Edge middleware — her istek milisaniye seviyesinde kimlik doğrulama
WordPress’in PHP tabanlı, istek-yanıt döngüsüne dayalı mimarisi bu gereksinimlerin çoğunu ya hiç karşılayamaz ya da ciddi “hack”ler gerektirir. Matt Mullenweg’in kendisi bile 2023’te State of the Word konuşmasında WordPress’in her kullanım senaryosu için ideal olmadığını kabul etti.
Guillermo Rauch, Vercel‘in CEO’su, bunu çok güzel özetliyor:
“The best frameworks let you start simple and scale to sophisticated. That’s what the App Router is designed for — from a blog to a billion-dollar SaaS, same mental model.”
— Guillermo Rauch, Vercel Keynote 2024
Biz de tam olarak bunu yaptık.
Tech Stack: Büyük Resim
HeyCaly’nin teknoloji haritası şöyle görünüyor:
| Katman | Teknoloji | Neden? |
|---|---|---|
| Framework | Next.js (App Router) | Server Components, API Routes, Edge Middleware — tek projede |
| Hosting | Vercel (Frankfurt) | GDPR uyumlu, global CDN, sıfır DevOps |
| Veritabanı | Supabase (PostgreSQL) | Açık kaynak Firebase alternatifi, RLS, gerçek zamanlı |
| Kimlik Doğrulama | Clerk | Organizasyon tabanlı multi-tenancy, hazır UI |
| Yapay Zeka | Claude Sonnet (Anthropic) | Doğal Türkçe, güçlü muhakeme, tutarlı çıktı kalitesi |
| 360dialog | Meta onaylı partner, per-business mimari | |
| Arka Plan İşleri | Inngest | Event-driven, sleepUntil(), 27 fonksiyon |
| Ödeme | Stripe | Abonelik yönetimi, webhook’lar |
| Takvim | Google Calendar API + Microsoft Graph | OAuth 2.0, iki yönlü senkronizasyon |
| E-posta | Postmark | Transactional e-posta, yüksek teslimat oranı |
| Hata İzleme | Sentry | Full-stack error tracking, EU bölge |
| Landing Site | Sanity + Next.js | Headless CMS, yapılandırılmış içerik |
| UI | shadcn/ui + Radix + Tailwind | Erişilebilir, özelleştirilebilir bileşenler |
72 bağımlılık, 30+ environment variable, 12 veritabanı tablosu. Ama her birinin bir sebebi var.
Next.js: Neden App Router?
HeyCaly’nin kalbi Next.js‘ün App Router mimarisi. Bu sadece bir React framework’ü değil — aynı projede hem frontend hem backend hem de API endpoint’lerini barındıran bir full-stack çözüm.
Server Components ile Performans
React Server Components sayesinde dashboard sayfaları sunucu tarafında render ediliyor. İstemciye gönderilen JavaScript miktarı minimumda:
Dashboard sayfası yüklendiğinde:
1. Sunucu → Veritabanı sorgusu (Supabase)
2. Sunucu → HTML render
3. İstemci → Minimal JS hydration
Bu, özellikle mobil cihazlarda — HeyCaly kullanıcılarının %70’inden fazlası mobil — dramatik performans farkı yaratıyor.
Route Groups ile Mimari Düzen
app/
├── (auth)/ → Giriş/kayıt sayfaları
├── (dashboard)/ → Korumalı alan (sidebar, ayarlar)
├── (onboarding)/ → 8 adımlı kurulum sihirbazı
└── api/ → ~30 API endpoint + webhook'lar
Next.js’in route group’ları sayesinde her bölüm kendi layout’una sahip. Onboarding akışı dashboard’dan tamamen bağımsız çalışıyor.
Edge Middleware
Her HTTP isteği Frankfurt’taki edge node’da milisaniyeler içinde kimlik doğrulamasından geçiyor:
// middleware.ts
export default clerkMiddleware(async (auth, req) => {
// Public rotalar: webhook'lar, giriş sayfaları
// Diğer her şey: Clerk auth zorunlu
});
Lee Robinson, Next.js’in VP of Product’ı, bu yaklaşımı şöyle açıklıyor:
“Middleware at the edge means authentication happens before your origin server even wakes up. It’s not just faster — it’s a fundamentally different security model.”
Supabase: Açık Kaynak PostgreSQL Gücü
Veritabanı seçiminde Firebase, PlanetScale ve Supabase’i değerlendirdik. Supabase‘i seçmemizin üç temel nedeni var:
1. PostgreSQL’in Gücü
HeyCaly’de 12 tablo, onlarca ilişki ve karmaşık sorgular var. NoSQL (Firebase/Firestore) bu ilişkisel veri modeline uygun değil. PostgreSQL’in TIMESTAMPTZ, JSONB, foreign key’leri ve index’leri kritik.
2. Row-Level Security (RLS)
Multi-tenant bir SaaS’ta veri izolasyonu hayati:
-- Her işletme sadece kendi müşterilerini görebilir
CREATE POLICY "business_isolation" ON customers
USING (business_id = current_setting('app.business_id')::uuid);
Paul Copplestone, Supabase’in CEO’su, bu felsefeyi şöyle anlatıyor:
“We chose Postgres because it’s the most trusted database in the world. When you’re building on Postgres, you’re building on 35 years of battle-tested reliability.”
3. Migration Tabanlı Şema Yönetimi
5 migration dosyası ile veritabanı şeması versiyon kontrolünde:
supabase/migrations/
├── 001_initial.sql → 12 tablo, index'ler, RLS
├── 002_onboarding_progress.sql → Onboarding alanları
├── 003_demo_columns.sql → Demo modu desteği
├── 004_conversation_metadata.sql → Konuşma metadata
└── 005_partner_api.sql → Per-business WhatsApp anahtarları
Her migration geri alınabilir, her değişiklik izlenebilir. WordPress’in dbDelta() fonksiyonuyla yaptığımız şema değişikliklerini düşününce… Fark ortada.
Claude AI: Neden Anthropic?
HeyCaly’nin en kritik bileşeni yapay zeka konuşma motoru. Bir müşteriye WhatsApp’tan mesaj gönderdiğimizde, o mesajın doğal, kişisel ve ikna edici olması gerekiyor.
Model Seçimi: Claude Sonnet
OpenAI GPT-4, Google Gemini ve Anthropic Claude‘u kapsamlı testlerden geçirdik. Claude Sonnet’i seçmemizin nedenleri:
- Türkçe doğallık — Türkçe WhatsApp konuşmalarında en doğal tonu Claude üretiyor
- Bağlamsal muhakeme — Müşteri geçmişini, hizmet detaylarını ve takvim durumunu tek bir yanıtta harmanlayabiliyor
- Çıktı kalitesi — 500 token limiti ile WhatsApp’ın kısa mesaj formatına ideal, tutarlı ve yapılandırılmış yanıtlar
- Güvenlik — Anthropic’in Constitutional AI yaklaşımı, hassas müşteri verilerinde güven veriyor
Dario Amodei, Anthropic’in CEO’su:
“We believe the most important property of AI systems is that they are safe, beneficial, and understandable.”
— Anthropic Core Views on AI Safety
Sinyal Tabanlı Mimari (Tool Calling Değil)
Burada ilginç bir mühendislik kararı verdik. Anthropic’in tool calling özelliğini kullanmak yerine metin tabanlı sinyal sistemi tasarladık:
AI yanıtı: "Harika, perşembe saat 14:00'e kaydınızı oluşturdum! 💇♀️"
[[APPOINTMENT_CONFIRMED]]{"date":"2026-02-27","time":"14:00","service":"Saç Kesimi"}
Neden? WhatsApp mesajları kısa olmak zorunda. Tool calling JSON overhead’i ekliyor. Sinyal sistemi daha hafif, daha dayanıklı ve JSON parse hatalarında bile “confirmed” sinyalini yakalayabiliyor.
Inngest: 27 Arka Plan Görevi
Bir SaaS’ın “görünmeyen” ama en kritik katmanı arka plan işleri. Inngest bu konuda oyun değiştirici oldu.
Neden Vercel Cron veya BullMQ Değil?
- Vercel Cron: Basit zamanlama için yeterli, ama event-driven iş akışları için yetersiz
- BullMQ/Redis: Kendi sunucumuzu yönetmek istemiyorduk
- Inngest: Event-driven,
sleepUntil()ile zamanlanmış görevler, yerleşik retry mantığı
Dan Farrelly, Inngest’in CTO’su:
“Traditional job queues make you think in terms of ‘push job to queue, worker picks it up.’ Inngest lets you think in terms of ‘when this event happens, do this’ — which is how your business actually works.”
— Inngest Blog: Why Event-Driven
Görev Haritası
HeyCaly’de 27 Inngest fonksiyonu çalışıyor:
| Kategori | Görevler |
|---|---|
| Mesaj alma → AI yanıt üretme → gönderme → durum takibi | |
| Kampanyalar | Zamanlama → müşteri filtreleme → toplu gönderim (50’lik batch’ler) |
| Takvim | Google/Outlook senkronizasyonu → slot hesaplama → çakışma kontrolü |
| Faturalandırma | Aylık sıfırlama → kullanım uyarıları → deneme süresi yönetimi |
| Hatırlatmalar | 24 saat önce → 2 saat önce (cron) |
| WhatsApp Warmup | Günlük limit sıfırlama → tier yükseltme → kalite izleme |
| Import | CSV parse → batch insert → telefon doğrulama (Twilio) |
| Demo | Demo hesap oluşturma → örnek konuşmalar → sıfırlama |
Kampanya gönderiminde 50’lik batch’ler kullanıyoruz. Bu, Meta’nın WhatsApp Business API rate limit’lerine uyum sağlarken warmup tier’ına göre günlük limiti aşmamayı garantiliyor.
Clerk: Multi-Tenant Kimlik Doğrulama
HeyCaly’de her işletme bir “organizasyon.” Her organizasyonun kendi ekip üyeleri, müşterileri, konuşmaları var. Clerk bu organizasyon tabanlı multi-tenancy’yi kutudan çıktığı gibi sunuyor.
Neden Supabase Auth veya NextAuth Değil?
- Supabase Auth: Organizasyon konsepti yok, custom setup gerekiyor
- NextAuth: Harika ama takım yönetimi UI’ı yok
- Clerk: Organizasyon oluşturma → webhook → veritabanında otomatik işletme kaydı. Hazır davet sistemi, rol yönetimi, güvenli oturum yönetimi
Yeni kayıt akışı:
1. Kullanıcı Clerk'te kayıt olur
2. Clerk webhook tetiklenir
3. Stripe müşterisi oluşturulur
4. Supabase'de business + team_member kaydı
5. 14 günlük deneme süresi başlar
Bu akış tamamen otomatik — insan müdahalesi sıfır.
heycaly.com: Sanity ile Headless CMS
HeyCaly’nin pazarlama sitesi (heycaly.com) uygulama kodundan tamamen bağımsız. Burada Sanity headless CMS kullanıyoruz.
Neden WordPress Değil?
Evet, ironik. Ama sebepleri çok somut:
-
Aynı deployment pipeline: heycaly.com de Next.js ile yazılmış. Sanity’den içerik çekip Vercel’de statik sayfalar oluşturuyor. Tek bir
git pushile hem uygulama hem site güncelleniyor. -
Yapılandırılmış içerik: Sanity’nin GROQ sorgu dili ile 9 farklı dildeki içeriği (İngilizce, Türkçe, İspanyolca, Almanca, Portekizce, İtalyanca, Arapça, Fransızca ve Azerbaycanca) tek bir kaynaktan yönetiyoruz.
-
Performans: Statik olarak üretilen sayfalar Vercel CDN’den servis ediliyor. WordPress’in dinamik PHP render’ına kıyasla sayfa yükleme süreleri %60 daha düşük.
-
Geliştirici deneyimi: İçerik ekibi Sanity Studio’dan düzenliyor, geliştiriciler aynı Next.js projesi içinde template’leri güncelliyor. İki dünya sorunsuz birleşiyor.
Sanity’nin kurucusu Simen Svale Skogsrud’un bu yaklaşımı özetleyen sözü:
“Content is data, not pages. When you treat content as structured data, you can deliver it anywhere — a website, a mobile app, a WhatsApp message, or an AI prompt.”
Bu felsefe HeyCaly için biçilmiş kaftan. Sanity’deki içerik hem web sitesinde hem de potansiyel olarak uygulama içi yardım metinlerinde kullanılabiliyor.
Headless CMS yaklaşımımız hakkında daha fazla bilgi →
Güvenlik: Şifreleme, İzolasyon, Uyumluluk
Sağlık verileri, randevu bilgileri, telefon numaraları — HeyCaly hassas verilerle çalışıyor. Güvenlik mimarimiz:
AES-256-CBC Şifreleme
WhatsApp API anahtarları ve OAuth token’ları veritabanında şifreli saklanıyor:
Kaydetme: plaintext → AES-256-CBC encrypt → DB
Kullanma: DB → decrypt → API çağrısı → bellekten silme
Veri İzolasyonu
- Clerk: Her organizasyon kendi auth boundary’sine sahip
- Supabase RLS: Veritabanı seviyesinde satır bazlı erişim kontrolü
- Service Role: Inngest arka plan görevleri güvenli service role key ile çalışıyor
GDPR ve KVKK Uyumu
- Vercel hosting: Frankfurt, Almanya (EU bölgesi)
- Sentry: EU bölge yapılandırması
- Supabase: EU bölge
- Tüm kişisel veriler Avrupa sınırları içinde
Stripe: Abonelik ve Faturalandırma
Stripe entegrasyonu dört plan seviyesini yönetiyor:
| Plan | Mesaj/Ay | WhatsApp No | Takvim | Ekip |
|---|---|---|---|---|
| Starter | 50 | 1 | — | 1 |
| Growth | 500 | 1 | 1 | 3 |
| Business | 2.000 | 3 | 3 | 5 |
| Enterprise | Sınırsız | Sınırsız | Sınırsız | Sınırsız |
Webhook tabanlı olay akışı:
Stripe webhook → subscription.updated
→ Inngest: plan limitlerini güncelle
→ Supabase: businesses tablosunu güncelle
→ Postmark: onay e-postası gönder
14 günlük deneme süresi Business plan limitleriyle başlıyor. 12. gün uyarı, 14. gün ödeme yoksa otomatik Starter’a düşürme — tamamı Inngest cron görevleriyle.
Sentry: Hata İzleme
Üretim ortamında her hata anında yakalanıyor. Sentry‘nin Next.js SDK’sı üç katmanda çalışıyor:
// Client-side hatalar
sentry.client.config.ts
// Server-side hatalar (API routes, Server Components)
sentry.server.config.ts
// Edge runtime hataları (middleware)
sentry.edge.config.ts
WhatsApp webhook’larında yaşanan bir timeout, bir Stripe webhook’unda eksik alan, bir Claude API yanıtında beklenmeyen format — her biri anlık bildirim olarak ekibe ulaşıyor.
Performans Metrikleri
Frankfurt’taki Vercel Edge Network üzerinde ölçümler:
| Metrik | Değer |
|---|---|
| TTFB (Time to First Byte) | < 100ms (Edge middleware) |
| WhatsApp webhook işleme | < 500ms (mesaj alma → Inngest event) |
| AI yanıt üretme | 1-3 saniye (Claude Sonnet, 500 token) |
| Dashboard sayfa yüklenme | < 1.5s (Server Components) |
| heycaly.com landing page | < 800ms (statik, CDN) |
Timezone Yönetimi: Küçük Ama Kritik Detay
Randevu tabanlı bir sistemde timezone yönetimi sizi ya kurtarır ya batırır. HeyCaly’nin yaklaşımı:
- Veritabanı: Her şey UTC (
TIMESTAMPTZ) - İşletme ayarı: IANA formatında timezone (
Europe/Istanbul,America/New_York) - AI prompt: Müsait saatler işletmenin local timezone’unda sunuluyor
- Müşteri mesajı: AI local saat yazar (“Perşembe 14:00”)
- Kayıt: Server tarafında UTC’ye dönüştürülüp veritabanına yazılıyor
date-fns-tz kütüphanesi bu dönüşümleri güvenilir şekilde yönetiyor.
“There are only two hard things in Computer Science: cache invalidation and naming things.”
— Phil Karlton
Biz üçüncüsünü eklerdik: timezone yönetimi.
WordPress’ten Öğrendiklerimiz
Bu yazıyı “WordPress kötü, modern stack iyi” diye bitirmek istemiyoruz. Çünkü doğru değil.
WordPress bize öğretti:
- Kullanıcı deneyimi her şeyden önemli — WordPress’in dünya genelinde %43 pazar payına sahip olmasının nedeni teknik üstünlük değil, kullanım kolaylığı
- Eklenti mimarisi düşün — HeyCaly’nin modüler yapısı (her entegrasyon kendi
lib/klasöründe) WordPress’in eklenti felsefesinden esinleniyor - Geriye uyumluluk önemli — Migration tabanlı şema yönetimi, Stripe webhook versiyonlama — hep aynı ilke
- Topluluk gücü — shadcn/ui, Radix, Tailwind — açık kaynak topluluk bileşenleri WordPress’in tema/eklenti ekosisteminin modern karşılığı
WordPress projelerimiz hakkında →
HeyCaly’yi geliştirirken WordPress deneyimimiz en büyük avantajımız oldu. Yılların getirdiği “kullanıcı nasıl düşünür” bilgisi hiçbir framework dokümantasyonunda yazmıyor.
Doğru Araç, Doğru İş
Bir müşterimiz bize kurumsal web sitesi istediğinde WordPress öneriyoruz. E-ticaret istediğinde WooCommerce kuruyoruz. İçerik ağırlıklı, çok dilli bir platform istediğinde WordPress + WPML sunuyoruz.
Ama gerçek zamanlı AI, WhatsApp entegrasyonu, event-driven arka plan görevleri ve multi-tenant SaaS mimari istediğinde — Next.js, Supabase, Inngest ve Claude AI ile inşa ediyoruz.
Mesele teknoloji savaşı değil. Mesele doğru aracı doğru iş için kullanmak.
The WP Clan olarak her iki dünyada da deneyimimiz var. Projenizin hangi dünyaya ait olduğunu birlikte belirleyelim.
Projeleriniz için bizimle iletişime geçin →
Kaynaklar ve İleri Okuma
- Next.js App Router Dokümantasyonu
- Supabase Row-Level Security
- Anthropic Claude API
- Inngest Event-Driven Functions
- Sanity Headless CMS
- Clerk Organization-Based Auth
- 360dialog WhatsApp Business API
- Vercel Edge Network
Bu yazı The WP Clan ekibi tarafından yazılmıştır. WordPress, headless CMS, SaaS geliştirme ve AI entegrasyonu konularında hizmetlerimize göz atabilirsiniz.
Last modified: Nisan 3, 2026
United States / English
Slovensko / Slovenčina
Canada / Français
Türkiye / Türkçe