Adımızda “WP” var. WordPress ile başladık, WordPress ile büyüdük ve hala WordPress’i seviyoruz. Ama bir ürün inşa etmeye karar verdiğimizde — gerçek zamanlı AI konuşmaları, WhatsApp entegrasyonu ve takvim senkronizasyonu olan gerçek bir SaaS — WordPress’in sınırlarının nerede bittiğini tam olarak biliyorduk.
Bu makalede HeyCaly‘nin teknik altyapısını, her teknolojiyi neden seçtiğimizi ve bir WordPress ajansı olarak bu kararları nasıl aldığımızı açıklıyoruz. Amacımız sadece bir teknoloji listesi sunmak değil; her kararın arkasındaki “neden”i yanıtlamak.
HeyCaly Ne Yapar?
HeyCaly, randevu tabanlı işletmelerin (kuaförler, klinikler, spor salonları, spa’lar, veteriner klinikleri, diş hekimlikleri) AI destekli WhatsApp konuşmaları aracılığıyla geçmiş müşterilerle yeniden etkileşim kurmalarına yardımcı olan bir SaaS platformudur. Boş randevu slotlarını tespit eder, doğru zamanda doğru müşteriye kişiselleştirilmiş WhatsApp mesajları gönderir ve randevuyu otomatik olarak takvimlerine rezerve eder.
Kısacası: AI destekli müşteri yeniden etkileşim asistanı.
“Hizmet işletmeleri her hafta randevularının %20-40’ını boş bırakır. HeyCaly bu boşlukları akıllıca doldurur.”
Neden WordPress Değil?
Önce açık olalım: WordPress kötü bir teknoloji değil. Hala projelerimizde aktif olarak kullanıyoruz. WooCommerce mağazaları, kurumsal web siteleri, çok dilli içerik platformları — WordPress bunlar için hala mükemmel.
Ama HeyCaly farklı bir canavar:
- Gerçek zamanlı WhatsApp mesajlaşması — 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 işi — kampanya planlama, takvim senkronizasyonları, hatırlatmalar
- Çoklu entegrasyonlar — Google Calendar, Outlook, Stripe, WhatsApp Business API
- Çok kiracılı mimari — aynı altyapıda yüzlerce işletme, veri izolasyonu kritik
- Edge middleware — her istekte milisaniye seviyesinde kimlik doğrulama
WordPress’in PHP tabanlı, istek-yanıt mimarisi bu gereksinimlerin çoğunu ya karşılayamaz ya da önemli geçici çözümler gerektirir. Matt Mullenweg kendisi 2023 State of the Word konuşmasında WordPress’in her kullanım durumu için ideal olmadığını kabul etti.
Vercel CEO’su Guillermo Rauch bunu güzel özetliyor:
“En iyi framework’ler basit başlamanızı ve karmaşığa doğru ölçeklendirmenizi sağlar. App Router tam da bunun için tasarlandı — bir blogdan milyar dolarlık SaaS’a, aynı zihinsel model.”
— Guillermo Rauch, Vercel Keynote 2024
Tam da bunu yaptık.
Teknoloji Yığını: Büyük Resim
İşte HeyCaly’nin teknoloji haritası:
| Katman | Teknoloji | Neden? |
|---|---|---|
| Framework | Next.js (App Router) | Server Components, API Routes, Edge Middleware — hepsi 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ı çok kiracılılık, hazır UI |
| AI | Claude Sonnet (Anthropic) | Doğal çok dilli konuşmalar, güçlü akıl yürütme, güvenilir çıktı kalitesi |
| 360dialog | Meta onaylı partner, işletme başına mimari | |
| Arka Plan İşleri | Inngest | Olay güdümlü, sleepUntil(), 27 fonksiyon |
| Ödemeler | Stripe | Abonelik yönetimi, webhook’lar |
| Takvim | Google Calendar API + Microsoft Graph | OAuth 2.0, iki yönlü senkronizasyon |
| E-posta | Postmark | İşlemsel e-posta, yüksek teslim edilebilirlik |
| Hata Takibi | Sentry | Full-stack hata takibi, AB bölgesi |
| Pazarlama Sitesi | 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+ ortam değişkeni, 12 veritabanı tablosu. Ama her birinin bir nedeni var.
Next.js: Neden App Router?
HeyCaly’nin kalbinde Next.js‘in App Router mimarisi yatıyor. Bu sadece bir React framework’ü değil — frontend, backend ve API endpoint’lerini tek projede barındıran full-stack bir çözüm.
Server Components ile Performans
React Server Components sayesinde dashboard sayfaları sunucu tarafında render ediliyor. İstemciye gönderilen JavaScript miktarı minimal kalıyor:
Bir 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ının bulunduğu platformda — dramatik bir performans farkı yaratıyor.
Route Groups ile Mimari Organizasyon
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 route groups sayesinde her bölümün kendi layout’u var. Onboarding akışı dashboard’dan tamamen bağımsız çalışıyor.
Edge Middleware
Her HTTP isteği Frankfurt edge node’unda milisaniyeler içinde kimlik doğrulamadan geçiyor:
// middleware.ts
export default clerkMiddleware(async (auth, req) => {
// Genel rotalar: webhook'lar, giriş sayfaları
// Diğer her şey: Clerk auth gerekli
});
Next.js VP of Product Lee Robinson, bu yaklaşımı şöyle açıklıyor:
“Edge’de middleware, kimlik doğrulamanın kaynak sunucunuz uyanmadan önce gerçekleştiği anlamına gelir. Bu sadece daha hızlı değil — temelden farklı bir güvenlik modeli.”
Supabase: Açık Kaynak PostgreSQL’in Gücü
Veritabanı seçerken Firebase, PlanetScale ve Supabase’i değerlendirdik. Supabase‘i seçmemizin üç temel nedeni:
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 uymuyor. PostgreSQL’in TIMESTAMPTZ, JSONB, foreign key’leri ve indeksleri kritik.
2. Row-Level Security (RLS)
Çok kiracılı 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);
Supabase CEO’su Paul Copplestone, bu felsefeyi şöyle açıklıyor:
“Postgres’i seçtik çünkü dünyanın en güvenilir veritabanı. Postgres üzerine inşa ettiğinizde, 35 yıllık savaşta test edilmiş güvenilirlik üzerine inşa ediyorsunuz.”
3. Migration Tabanlı Şema Yönetimi
Veritabanı şeması 5 migration dosyasıyla versiyon kontrolü altında:
supabase/migrations/
├── 001_initial.sql → 12 tablo, indeksler, RLS
├── 002_onboarding_progress.sql → Onboarding alanları
├── 003_demo_columns.sql → Demo modu desteği
├── 004_conversation_metadata.sql → Konuşma metadata'sı
└── 005_partner_api.sql → İşletme başına WhatsApp anahtarları
Her migration geri alınabilir, her değişiklik izlenebilir. WordPress’in dbDelta() fonksiyonuyla yaptığımız şema değişikliklerini düşündüğümüzde… Fark açık.
Claude AI: Neden Anthropic?
HeyCaly’nin en kritik bileşeni AI konuşma motoru. Bir müşteriye WhatsApp 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 üzerinde kapsamlı testler yaptık. Claude Sonnet’i seçme nedenlerimiz:
- Çok dilli doğallık — Claude, WhatsApp konuşmalarında birden fazla dilde en doğal tonu üretiyor
- Bağlamsal akıl yürütme — Müşteri geçmişi, hizmet detayları ve takvim durumunu tek yanıtta harmanlayabiliyor
- Çıktı kalitesi — WhatsApp’ın kısa mesaj formatına ideal, tutarlı şekilde iyi yapılandırılmış, özlü yanıtlar
- Güvenlik — Anthropic’in Constitutional AI yaklaşımı, hassas müşteri verileriyle güven veriyor
Anthropic CEO’su Dario Amodei:
“AI sistemlerinin en önemli özelliğinin güvenli, faydalı ve anlaşılır olmak olduğuna inanıyoruz.”
— 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 için randevunuzu aldım! 💇♀️"
[[APPOINTMENT_CONFIRMED]]{"date":"2026-02-27","time":"14:00","service":"Saç kesimi"}
Neden? WhatsApp mesajları kısa olmalı. Tool calling JSON yükü ekler. Sinyal sistemi daha hafif, daha dayanıklı ve JSON parsing başarısız olsa bile “onaylandı” sinyalini yakalayabiliyor.
Inngest: 27 Arka Plan İşi
Bir SaaS’ın “görünmez” ama en kritik katmanı arka plan işleri. Inngest burada oyunun kurallarını değiştirdi.
Neden Vercel Cron veya BullMQ Değil?
- Vercel Cron: Basit zamanlama için yeterli, ama olay güdümlü iş akışları için yetersiz
- BullMQ/Redis: Kendi sunucularımızı yönetmek istemedik
- Inngest: Olay güdümlü,
sleepUntil()ile zamanlanmış görevler, yerleşik retry mantığı
Inngest CTO’su Dan Farrelly:
“Geleneksel job queue’lar sizi ‘işi kuyruğa at, worker alsın’ şeklinde düşünmeye zorlar. Inngest ‘bu olay gerçekleştiğinde, şunu yap’ şeklinde düşünmenizi sağlar — işletmeniz gerçekte nasıl çalışıyorsa öyle.”
— Inngest Blog: Why Event-Driven
İş Haritası
HeyCaly 27 Inngest fonksiyonu çalıştırıyor:
| Kategori | İşler |
|---|---|
| Mesaj alma → AI yanıtı oluşturma → Gönderme → Durum takibi | |
| Kampanyalar | Zamanlama → Müşteri filtreleme → Toplu gönderim (50’lik gruplar) |
| Takvim | Google/Outlook senkronizasyonu → Slot hesaplama → Çakışma tespiti |
| Faturalandırma | Aylık sıfırlama → Kullanım uyarıları → Deneme yönetimi |
| Hatırlatıcılar | 24 saat önce → 2 saat önce (cron) |
| WhatsApp Warmup | Günlük limit sıfırlama → Seviye yükseltme → Kalite izleme |
| İçe Aktarma | CSV ayrıştırma → Toplu ekleme → Telefon doğrulama (Twilio) |
| Demo | Demo hesap oluşturma → Örnek konuşmalar → Sıfırlama |
Kampanya gönderiminde 50’lik gruplar kullanıyoruz. Bu, Meta’nın WhatsApp Business API hız limitlerini karşılarken warmup seviyesine göre günlük limiti asla aşmamamızı sağlıyor.
Clerk: Çok Kiracılı Kimlik Doğrulama
HeyCaly’de her işletme bir “organizasyon”dur. Her organizasyonun kendi ekip üyeleri, müşterileri ve konuşmaları vardır. Clerk bu organizasyon tabanlı çok kiracılığı kutudan çıktığı gibi sunar.
Neden Supabase Auth veya NextAuth Değil?
- Supabase Auth: Organizasyon kavramı yok, özel kurulum gerekli
- NextAuth: Harika, ama ekip yönetimi arayüzü yok
- Clerk: Organizasyon oluşturma → webhook → veritabanında otomatik işletme kaydı. Hazır davet sistemi, rol yönetimi, güvenli oturum işleme
Yeni kayıt akışı:
1. Kullanıcı Clerk'e kaydolur
2. Clerk webhook tetiklenir
3. Stripe müşterisi oluşturulur
4. Business + team_member kaydı Supabase'e
5. 14-günlük deneme başlar
Bu akış tamamen otomatik — sıfır insan müdahalesi.
heycaly.com: Sanity ile Headless CMS
HeyCaly’nin pazarlama websitesi (heycaly.com) uygulama kodundan tamamen bağımsız. Burada headless CMS olarak Sanity kullanıyoruz.
Neden WordPress Değil?
Evet, ironik. Ama nedenler çok somut:
-
Aynı dağıtım hattı: heycaly.com da Next.js ile yapılmış. Sanity’den içerik çekiyor ve Vercel’de statik sayfalar oluşturuyor. Tek bir
git pushhem uygulamayı hem de websiteyi güncelliyor. -
Yapılandırılmış içerik: Sanity’nin GROQ sorgu diliyle, 9 dildeki (İngilizce, Türkçe, İspanyolca, Almanca, Portekizce, İtalyanca, Arapça, Fransızca ve Azerbaycanca) çok dilli içeriği tek bir kaynaktan yönetiyoruz.
-
Performans: Statik olarak oluşturulan sayfalar Vercel’in CDN’inden sunuluyor. Sayfa yükleme süreleri WordPress’in dinamik PHP renderlamasına göre %60 daha düşük.
-
Geliştirici deneyimi: İçerik ekibi Sanity Studio üzerinden düzenliyor, geliştiriciler aynı Next.js projesi içindeki şablonları güncelliyor. İki dünya sorunsuz birleşiyor.
Sanity kurucusu Simen Svale Skogsrud’un bu yaklaşımı özetleyen sözleri:
“İçerik veridir, sayfa değil. İçeriği yapılandırılmış veri olarak ele aldığınızda, onu her yere sunabilirsiniz — bir websiteye, mobil uygulamaya, WhatsApp mesajına veya AI promptına.”
Bu felsefe HeyCaly için biçilmiş kaftan. Sanity’deki içerik hem websitede hem de potansiyel olarak uygulama içi yardım metinlerinde kullanılabilir.
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 şifrelenmiş olarak saklanıyor:
Kaydet: düz metin → AES-256-CBC şifrele → DB
Kullan: DB → şifre çöz → API çağrısı → bellekten temizle
Veri İzolasyonu
- Clerk: Her organizasyonun kendi auth sınırı
- Supabase RLS: Veritabanı seviyesinde satır düzeyinde erişim kontrolü
- Service Role: Inngest arkaplan işleri güvenli service role anahtarıyla çalışıyor
GDPR Uyumluluğu
- Vercel hosting: Frankfurt, Almanya (AB bölgesi)
- Sentry: AB bölgesi konfigürasyonu
- Supabase: AB bölgesi
- Tüm kişisel veriler Avrupa sınırları içinde kalıyor
Stripe: Abonelikler ve Faturalandırma
Stripe entegrasyonu dört plan seviyesini yönetiyor:
| Plan | Mesaj/Ay | WhatsApp Numaraları | Takvimler | 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 Business plan limitleriyle başlıyor. 12. gün uyarısı, 14. gün ödenmemişse otomatik Starter’a düşürme — hepsi Inngest cron işleriyle yönetiliyor.
Sentry: Hata Takibi
Prodüksyondaki her hata anında yakalanıyor. Sentry‘nin Next.js SDK’sı üç katmanda çalışıyor:
// İstemci tarafı hataları
sentry.client.config.ts
// Sunucu tarafı hataları (API rotaları, Server Components)
sentry.server.config.ts
// Edge runtime hataları (middleware)
sentry.edge.config.ts
WhatsApp webhook’larında bir timeout, Stripe webhook’unda eksik alan, Claude API yanıtında beklenmeyen format — her biri ekibe anlık bildirim olarak ulaşıyor.
Performans Metrikleri
Frankfurt’taki Vercel’in Edge Network’ündeki ölçümler:
| Metrik | Değer |
|---|---|
| TTFB (Time to First Byte) | < 100ms (Edge middleware) |
| WhatsApp webhook işleme | < 500ms (alma → Inngest olayı) |
| AI yanıt oluşturma | 1-3 saniye (Claude Sonnet, 500 token) |
| Panel sayfa yüklemesi | < 1.5s (Server Components) |
| heycaly.com ana sayfa | < 800ms (statik, CDN) |
Zaman Dilimi Yönetimi: Küçük Ama Kritik
Randevu tabanlı bir sistemde zaman dilimi yönetimi ya sizi kurtarır ya da batırır. HeyCaly’nin yaklaşımı:
- Veritabanı: Her şey UTC’de (
TIMESTAMPTZ) - İşletme ayarı: IANA formatında zaman dilimi (
Europe/Istanbul,America/New_York) - AI promptu: Müsait slotlar işletmenin yerel zaman diliminde sunuluyor
- Müşteri mesajı: AI yerel saat yazıyor (“Perşembe 14:00”)
- Saklama: Veritabanına yazmadan önce sunucu tarafında UTC’ye çevriliyor
date-fns-tz kütüphanesi bu dönüşümleri güvenilir şekilde yapıyor.
“Bilgisayar Bilimlerinde sadece iki zor şey vardır: cache invalidation ve isimlendirme.”
— Phil Karlton
Üçüncüyü ekleriz: zaman dilimi yönetimi.
WordPress’den Öğrendiklerimiz
Bu makaleyi “WordPress kötü, modern stack iyi” diye bitirmek istemiyoruz. Çünkü bu doğru değil.
WordPress bize şunları öğretti:
- Kullanıcı deneyimi her şeyden önemli — WordPress’in küresel olarak %43 pazar payına sahip olmasının nedeni teknik üstünlük değil, kullanım kolaylığı
- Plugin mimarisinde düşün — HeyCaly’nin modüler yapısı (her entegrasyonun kendi
lib/klasöründe) WordPress’in plugin felsefesinden ilham alıyor - Geriye uyumluluk önemli — Migration tabanlı şema yönetimi, Stripe webhook versiyonlama — hepsi aynı prensip
- Topluluk gücü — shadcn/ui, Radix, Tailwind — açık kaynak topluluk bileşenleri WordPress’in tema/plugin ekosisteminin modern karşılığı
WordPress projelerimiz hakkında daha fazla bilgi →
HeyCaly’yi yaparken, WordPress deneyimimiz en büyük avantajımızdı. Yıllarca edindiğimiz “kullanıcı nasıl düşünür” bilgisi hiçbir framework dokümantasyonunda yazılı değil.
Doğru İş İçin Doğru Araç
Bir müşteri kurumsal website istediğinde WordPress öneriyoruz. E-ticaret istediklerinde WooCommerce kuruyoruz. İçerik ağırlıklı, çok dilli platform istediklerinde WordPress + WPML sunuyoruz.
Ama ihtiyaç gerçek zamanlı AI, WhatsApp entegrasyonu, olay tabanlı arkaplan işleri ve çok kiracılı SaaS mimarisi olduğunda — Next.js, Supabase, Inngest ve Claude AI ile yapıyoruz.
Bu bir teknoloji savaşı değil. Doğru iş için doğru aracı kullanmakla ilgili.
The WP Clan olarak her iki dünyada da deneyimimiz var. Projenizin hangi dünyaya ait olduğunu birlikte çözelim.
Projeleriniz için 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 makale The WP Clan ekibi tarafından yazılmıştır. WordPress, headless CMS, SaaS geliştirme ve AI entegrasyonu için hizmetlerimize göz atın.
Last modified: Şubat 25, 2026
United States / English
Slovensko / Slovenčina
Canada / Français
Türkiye / Türkçe