Her gün kullanacağımız CRM’i, onu kullanan ajans inşa etti.
Marketing CRM, Avangard’ın şirket içi ürünüdür: açıklanabilir lead skorlaması, üç dil desteği ve günler yerine saatler içinde özellik çıkaran bir tasarım sistemine sahip, ajanslara özel çok kiracılı ve yapay zekâ destekli bir CRM. Gerçek fırsatlarımızı içinden yönetiyoruz — bu sayfa da arkasındaki kararların kaydıdır.
Şirket içi bir ürün, portföy işi olarak yayınlandı.
Ajanslar; katı pipeline’lara zorlayan, yapay zekâyı sonradan eklenmiş bir sohbet botu gibi gören elektronik tablolar, Notion veya jenerik CRM’lerle çalışıyor. Marketing CRM bizim cevabımız: ajansa özel fikir sahibi pipeline’lar, altyapı olarak yapay zekâ, ilk günden çok kiracılı yapı — ve dakikalar içinde ilk değeri sunan sıfır kurulumla başlama.
Durum: özel beta (lansman öncesi), yaklaşık altı aylık geliştirme. Ürün henüz lansman yapmadığı için bu sayfa sonuç değil, inşa kaydı ve beta hedefleri yayınlar. Lansman sonrası veri oluştuğunda rakamlar damgalı bir güncellemeyle eklenir.
Jenerik CRM’ler ajansların satış biçimine uymuyor.
Ajans pipeline’larının gerçekte nasıl çalıştığını inceledik ve hazır araçlarda dört tekrarlayan boşluk bulduk. Yaklaşımımız basitti: Avangard’da her gün kullanacağımız CRM’i inşa etmek.
Boşluk
- Ajans satış döngülerine uymayan katı pipeline’lar.
- Karar katmanı yerine sonradan eklenmiş bot muamelesi gören yapay zekâ.
- Ajans-müşteri ayrımı için çok kiracılı çalışma alanı izolasyonunun olmaması.
- İlk değer anından önce haftalarca süren kurulum.
Bizim yaklaşımımız
- Ajans pipeline’ları için fikir sahibi varsayılanlar: Yeni → Nitelikli → Teklif → Kazanıldı/Kaybedildi.
- Altyapı olarak yapay zekâ — her lead otomatik olarak skorlanır, açıklanır ve aksiyona dönüştürülür.
- İlk günden çok kiracılı yapı — çalışma alanı izolasyonu, RBAC, davet akışları.
- Sıfır kurulumla başlama — dakikalar içinde CSV içe aktarma, Gmail senkronizasyonu ve herkese açık formlar.
Serverless Postgres üzerinde Next.js 16, dayanıklı çift sağlayıcılı yapay zekâ.
Varsayılan olarak React Server Components ve explicit istemci sınırları, Prisma üzerinden Neon serverless Postgres, çalışma alanı RBAC katmanlı JWT kimlik doğrulama — ve maliyet ile gecikme gözlemlenebilirliği için loglanan her yapay zekâ çağrısı.
Next.js 16 (App Router)
RSC/SSR Sayfalar · İstemci Bileşenleri · API Rotaları (/api/ai, /api/auth)
│ │ │
Prisma 7 + Neon NextAuth v5 (JWT) next-intl v4 (i18n)
│
PostgreSQL (Neon serverless)| Katman | Seçim | Gerekçe |
|---|---|---|
| Framework | Next.js 16 + React 19 | Varsayılan RSC, streaming, Turbopack, React 19 uyumu |
| Veritabanı | Prisma 7 + adapter-pg | Neon serverless, driverAdapters ile bağlantı havuzu gerektirir |
| Kimlik doğrulama | NextAuth v5 beta (JWT + PrismaAdapter) | Credentials sağlayıcı (bcrypt), OAuth’a hazır, çok kiracılı oturum |
| Çok kiracılı yapı | Workspace / WorkspaceMember + RBAC | Kurulum başına tek çalışma alanı; ADMIN / MEMBER / VIEWER rolleri |
| Yapay zekâ | Çift sağlayıcı: Groq → Gemini yedeği | Maliyet ve gecikme optimizasyonu, dayanıklılık ve streaming |
| i18n | next-intl v4, çerez tabanlı dil | 3 dil (EN/TR/ES), URL öneki yok, middleware dil başlığı |
| Gözlemlenebilirlik | Özel logger + YZ çağrı logları | Her YZ çağrısı loglanır: token, gecikme, sağlayıcı, sonuç |
Veritabanı şeması öne çıkanlar
- Kullanıcı & Auth: User, Account, Session, VerificationToken (NextAuth uyumlu).
- Çalışma alanı: Workspace, WorkspaceMember (çok kiracılı izolasyon).
- Çekirdek CRM: Lead, Client, Contact, Activity, Note, Tag.
- Pipeline: PipelineStage, Deal, Proposal, Task.
- YZ & Otomasyon: Automation, Sequence, ScoringRule, AIUsageLog.
- Entegrasyonlar: Webhook, GmailSync, GoogleCalendar.
- Analitik: Report, SavedView, CustomField.
API yüzeyi
/api/auth/[...nextauth] → NextAuth v5 işleyiciler /api/ai/analyze-stream → Streaming lead analizi (SSE) /api/ai/deep-analysis → Tam yapılandırılmış analiz /api/ai/generate-sequence → YZ ile e-posta serisi üretimi /api/ai/suggestions → Gerçek zamanlı YZ önerileri /api/cron/* → Zamanlanmış işler (özet, seriler, otomasyonlar) /api/integrations/google/* → OAuth bağlama / çözme / durum /api/track/* → E-posta açılma / tıklama takibi /api/upload-* → Doğrulamalı görsel / PDF yükleme
Tek bileşen kütüphanesi, kapsamlı iki tema.
Panel; bilgi yoğunluğu ve nötr bir çerçeve ister, landing sayfası ise duygusal rezonans ve marka kişiliği. İkisi de Radix primitifleri üzerinde 40’tan fazla özelleştirilmiş shadcn/ui bileşeninden besleniyor — tek bir tema sınıfıyla kapsülleniyor, böylece ikisi asla birbirine sızmıyor.
Bileşen temeli
- Kütüphane: shadcn/ui (New York stili, stone bazı, CSS değişkenleri) + Radix UI primitifleri.
- İkonlar: Lucide React. Formlar: react-hook-form + Zod doğrulama.
- Zengin metin: Tiptap (renk, yazı tipi, görsel, bağlantı, hizalama).
Özel tasarım token’ları (OKLCH)
:root {
--background: oklch(1 0 0);
--foreground: oklch(0.147 0.004 49.25);
--primary: oklch(0.216 0.006 56.043);
--radius: 0.625rem;
}
.landing-theme {
--canvas: oklch(0.977 0.008 95);
--bark: oklch(0.245 0.018 75);
--moss: oklch(0.545 0.075 155);
--clay: oklch(0.63 0.098 55);
}| Rol | Yazı tipi | Not |
|---|---|---|
| Arayüz Sans | Geist Sans | Panel ve arayüz metinleri |
| Arayüz Mono | Geist Mono | Veri, kod, etiketler |
| Teşhir | Fraunces (değişken) | Landing başlıkları — editoryal sıcaklık |
Hareket & etkileşim
- Scroll reveal (520ms ease-out), hover’da duran marquee, hero’da yavaş aura hareketi.
- “Canlı ürün” hissi için scroll-bağlantılı 3B dönüşümlü pipeline önizlemesi.
- Tüm animasyonlar prefers-reduced-motion altında kapalı.
Erişilebilirlik
- Radix primitifleri ARIA kalıplarını taşır; tüm etkileşimli öğelerde focus-visible halkaları.
- Semantik landmark’lar, başlıklar ve listeler; baştan sona klavye navigasyonu.
- Her iki temada da WCAG AA kontrast doğrulaması.
Landing, giriş ve mobil — beta’ya çıkan ürün.
Staging sürümünden yedi kare: landing hunisi, karanlık mod hero, giriş kapısı ve responsive mobil görünüm.







Landing’de kapılı beta hunisi, panelde aktivasyon.
Anonim ziyaretçiler beta talebine akar; giriş yapan kullanıcıları karşılayanlar ise bir onboarding kontrol listesi, bir komut paleti ve her biri tek bir yönlendirilmiş aksiyona işaret eden boş durumlar.
| Öğe | Amaç | Karar |
|---|---|---|
| Hero | Değer önerisi + interaktif kanıt | Pipeline önizlemesi gerçek bileşeni render eder, scroll-bağlantılı 3B dönüşümle |
| Birincil CTA | LinkedIn DM ile “Erişim İste” | Ajans karar vericilerini filtreler; davetten önce manuel eleme |
| İkincil CTA | “Giriş Yap” | Mevcut kullanıcılar kapıyı atlar |
| Marquee | Scroll’suz özellik yoğunluğu | 8 çip, sonsuz döngü, hover’da durma |
| Manifesto | Duygusal konumlandırma | “Yazılım, bahçe bakımı gibi hissettirmeli; elektronik tabloyla boğuşmak gibi değil” |
| Süreç bloğu | 3 adımda nasıl çalışır | İçe aktar → Skorla → Otomatikleştir |
| Kapanış CTA’sı | Son dönüşüm itişi | Aynı LinkedIn kapısı |
Landing sayfasında e-posta yakalama yok — bilinçli bir karar. LinkedIn DM, yüksek temaslı beta kullanıcılarını form doldurmadan çok daha iyi niteler ve meraklı tıklamaları huninin dışında tutar.
| Kalıp | Uygulama | Dönüşüm etkisi |
|---|---|---|
| Onboarding kontrol listesi | 4 adım: içe aktar, Gmail bağla, pipeline kur, ekip davet et | Aşamalı açıklama; tamamlanma aktivasyon demek |
| Komut paleti (⌘K) | Global arama ve aksiyonlar | Güç kullanıcısı tutarlılığı; aksiyona daha kısa süre |
| Klavye kısayolları | Sağlayıcı + yardım modalı (?) | Arayüz kalabalığı olmadan keşfedilebilirlik |
| Boş durumlar | Resimli + yönlendirilmiş butonlar | “CSV İçe Aktar” / “Lead Ekle” / “Gmail Bağla” |
| YZ içgörü paneli | Açıklanabilir skorlama ve sonraki adımlar | Güven → reliance → alışkanlık oluşumu |
Üç dil, çerez tabanlı, sayfa bazında meta veriler.
İngilizce (varsayılan), Türkçe ve İspanyolca tam mesaj paritesini paylaşıyor — landing metinleri, panel dizgileri ve hatta YZ analiz istemleri; analiz dili her lead’in tercih ettiği dile uyum sağlıyor.
i18n mimarisi
Middleware (çerez → dil)
→ next-intl isteği (statik mesaj içe aktarmaları)
→ Layout (NextIntlClientProvider)
→ Sayfalar (useTranslations, useFormatter)Dil algılama sırası
- NEXT_LOCALE çerezi (1 yıl max-age).
- Accept-Language başlığı (yedek).
- Varsayılan: İngilizce.
URL öneki yok (/en/dashboard, /tr/dashboard) — daha temiz UX ve basit middleware; doğrudan dile deep link verememe pahasına. Paylaşılan bağlantılar ?lang= parametresi taşır.
| Özellik | Durum |
|---|---|
| Sayfa bazında dinamik meta veriler | Her rotada generateMetadata |
| Open Graph / Twitter kartları | Layout + sayfa meta verilerinde yapılandırıldı |
| Yapılandırılmış veri (JSON-LD) | Landing’de SaaS ürün şeması; panelde WebApplication |
| hreflang | Dil başlığı + <head> içinde alternatif bağlantılar |
| robots.txt | Tümüne izin; /api/ ve /dashboard/ hariç |
| Core Web Vitals | Paket içe aktarma optimizasyonu, font display: swap |
Performans bütçeleri
- LCP 2,5sn altı (hero görseli + pipeline önizlemesi).
- CLS 0,1 altı (font swap, dinamik içerik için ayrılmış alan).
- INP 200ms altı (varsayılan RSC, minimal istemci JS).
Bir özellik sekmesi değil, altyapı olarak yapay zekâ.
Skorlama, içgörüler ve seriler tek bir pipeline’ı paylaşıyor: güçlü bir yedeği olan ucuz ve hızlı bir birincil sağlayıcı, üstel geri çekilmeli yeniden denemeler, Zod-doğrulamalı yapılandırılmış çıktı ve her çağrıda kullanım loglaması.
Kullanıcı isteği → Groq (birincil, llama-3.1)
→ Gemini (yedek, gemini-1.5)
Üstel geri çekilme (en fazla 3 deneme)
Yapılandırılmış çıktı (Zod) → Kullanım loglaması (her çağrı)Lead analiz çıktısı — TypeScript arayüzü (kısaltılmış)
interface LeadAnalysis {
score: number; // 0–100
confidence: number; // 0–1
scoreBreakdown: ScoreFactor[]; // açıklanabilir: faktör, ağırlık, kanıt
executiveSummary: string;
bestServiceMatch: ServiceType;
conversationStarters: string[];
recommendedActions: Action[];
nextBestAction: { action, reasoning, urgency };
outreachStrategy: { channel, multiTouchPlan[], toneGuidance };
dealStrategy: { positioning, stakeholders, competitiveAngle };
potentialObjections: { objection, response, proofPoint }[];
dealRisks: { risk, severity, mitigation }[];
outreachEmail: { subject, body, followUp };
proposalGuidance: { angle, deliverables, successMetrics, riskReversal };
}| Özellik | Uygulama |
|---|---|
| Streaming analiz | Token token UI güncellemeli SSE uç noktası |
| Açıklanabilir skorlama | Lead başına render edilen skor kırılımı |
| Çok dilli istemler | Analiz dili lead’in tercih ettiği dili takip eder |
| Çalışma alanı geri bildirimi | İnsan düzeltmeleri (beğen/beğenme) istemlere geri beslenir |
| Kullanım paneli | /dashboard/ai — sağlayıcı başına token, maliyet, başarı oranı, gecikme |
| Seri üretimi | Brieften tam e-posta serileri: konu, gövde, zamanlama |
Maliyet kontrolü
- Groq yaklaşık $0,0001 / 1K token (birincil); Gemini yaklaşık $0,001 / 1K (yedek).
- Token tavanları: analizde 4096, önerilerde 2048.
- Aynı istemler oturum içinde tekilleştirilir.
Gereken yerde yoğun, geri kalan her yerde yönlendiren.
Daraltılabilir role-filtreli kenar çubuğu, bildirimli çalışma alanı değiştirici, mobilde alt sekme navigasyonu — ve tek bir etkileşim grameri paylaşan yedi çekirdek görünüm.
| Görünüm | Kilit bileşenler | UX kalıpları |
|---|---|---|
| Lead’ler | Tablo + Kanban geçişi, kayıtlı görünümler, toplu aksiyonlar, CSV içe/dışa aktarma | Sürükle-bırak, sanallaştırılmış satırlar, sütun görünürlüğü |
| Lead detayı | Genel bakış, zaman çizelgesi, e-postalar, teklifler, dokümanlar, YZ içgörüleri | Sekmeli, yapışkan başlık, palet aksiyonları |
| Analitik | 15+ grafik, tarih aralığı seçici, rapor oluşturucu | Sekmeler: pipeline, ekip, seriler, e-posta, gelir |
| Seriler | Koşul değerlendirmeli görsel oluşturucu | Node tarzı akış + adım adım sihirbaz |
| Otomasyonlar | Tetikleyici → koşul → aksiyon kartları | Kart tabanlı, test modu, çalıştırma logu |
| Gelen kutusu | Birleşik Gmail senkronu, thread görünümü, YZ taslak desteği | Bölünmüş görünüm, klavye kısayolları (j/k, r, a) |
| Ayarlar | Kullanıcılar (RBAC), webhook’lar, entegrasyonlar, çalışma alanı | Bölümlenmiş, satır içi doğrulama |
Güç kullanıcısı özellikleri
- Komut paleti (⌘K): lead, müşteri, görev ve aksiyonlarda fuzzy arama.
- Global klavye kısayolları: panele git, lead’lere git, yeni lead, arama.
- Kayıtlı görünümler: kullanıcı başına, paylaşılabilir; filtre, sıralama ve sütun yapılandırmasıyla.
- Toplu aksiyonlar: çoklu seçimle ata, aşama değiştir, etiketle, dışa aktar veya sil.
Her kestirme, alınmadan önce fiyatlandırıldı.
İnşayı şekillendiren sekiz karar — her birinin kabul edilen maliyetiyle.
| Karar | Ödünleşim | Neden seçtik |
|---|---|---|
| Çerez tabanlı dil, URL öneki yok | Dile doğrudan deep link yok | Daha temiz UX; middleware neredeyse tüm durumları kapsar; paylaşılan bağlantılar ?lang= kullanır |
| Prisma driverAdapters (preview) | En uç sürüm, olası kırıcı değişiklikler | Neon serverless bağlantı havuzu gerektirir — alternatifi yok |
| NextAuth v5 beta | API istikrarsızlığı, seyrek dokümantasyon | JWT stratejisi + PrismaAdapter modern yol; v4 legacy |
| Çift YZ sağlayıcı | İki kat entegrasyon yüzeyi | Groq çok daha ucuz ve hızlı; Gemini daha iyi akıl yürütür; yedek dayanıklılık demek |
| shadcn/ui + özel token’lar | UI kit’e karşı bakım yükü | Tam tasarım sahipliği, vendor lock-in yok, token’lar Figma’ya taşınabilir |
| Varsayılan RSC, opt-in istemci | Ekip için öğrenme eğrisi | Varsayılan performans; istemci sınırları “use client” ile explicit |
| Kurulum başına tek çalışma alanı | Kullanıcı başına çoklu çalışma alanı yok | Daha basit zihinsel model: bir ajans, bir çalışma alanı; çoklu organizasyon ayrı deployment demek |
| Landing’de e-posta yakalama yok | Huni girişinde daha az lead | LinkedIn DM yüksek temaslı beta için çok daha iyi niteler; meraklı tıklamaları eler |
Beta için hedefler — sonuç değil.
Ürün henüz lansman yapmadı, bu yüzden dürüstçe raporlanacak bir şey yok. Aşağıda, betanın yargılanacağı AARRR çerçevesi ve teknik sağlık çıtası var.
| Aşama | Metrik | Beta hedefi |
|---|---|---|
| Edinme | Aylık beta talebi | 50 |
| Edinme | LinkedIn DM → davet gönderimi | > %60 |
| Aktivasyon | Onboarding kontrol listesi tamamlama | > %70 |
| Aktivasyon | İlk lead içe aktarma (1. gün) | > %80 |
| Aktivasyon | Gmail bağlama (3. gün) | > %50 |
| Tutarlılık | DAU / MAU (4. hafta) | > %40 |
| Tutarlılık | Özellik benimsenmesi: YZ skorlaması | > %60 |
| Tutarlılık | Özellik benimsenmesi: seriler | > %30 |
| Gelir | MRR (lansman sonrası) | 3. ayda $5K/ay |
| Gelir | Genişleme (koltuk) | Aylık > %20 |
| Tavsiye | Kullanıcı başına gönderilen davet | > 1,5 |
| Tavsiye | Davet → aktivasyon | > %40 |
| Metrik | Hedef |
|---|---|
| p95 API gecikmesi | < 500ms |
| YZ analiz gecikmesi (p95) | < 8sn |
| Hata oranı (5xx) | < %0,1 |
| Analiz edilen lead başına YZ maliyeti | < $0,02 |
| Derleme süresi (CI) | < 5 dk |
Dogfooding kendini amorti etti; istemler ayrı paket ister.
Avangard ekibi gerçek fırsatlarını ürünün içinden yönetiyor, geri bildirim döngüsü anlık. Tasarım sistemi yatırımı sayesinde yeni sayfalar saatler içinde çıkıyor — buna karşılık YZ istemleri, E2E kapsamı ve herkese açık API’nin hepsi olması gerekenden geç geldi.
İşe yarayanlar
- İlk günden dogfooding — gerçek fırsatlar, anlık geri bildirim döngüsü.
- Özellik değil altyapı olarak YZ — skorlama, içgörüler ve seriler tek pipeline’ı paylaşıyor.
- Tasarım sistemi yatırımı — özelleştirilmiş bileşenler sayesinde yeni sayfalar günler değil saatler içinde çıkıyor.
- Baştan çok kiracılı yapı — sıfır migrasyon sancısı; izolasyon her sorguya gömülü.
- Yerleşik gözlemlenebilirlik — YZ çağrı logları, sağlayıcı limitlerini kullanıcılardan önce yakaladı.
Farklı yapacaklarımız
- Sitemap üretimini daha erken eklemek — dinamik rotalar manuel yapılandırma ister; SEO hazırlığı gecikti.
- YZ istemlerini sürümlü ayrı pakete çıkarmak — manuel sürümlenen 2.000+ satır istem can yakıyor.
- E2E kapsamına daha erken yatırım — geç eklenen Playwright testleri flaky CI demekti.
- Tasarım token’larını Figma ile senkron tutmak — CSS tarafındaki token’lar tasarımcı dosyalarından sapıyor.
- İlk günden herkese açık API — geç eklenen webhook’lar veri modelini şekillendirirdi.
Ajansa kattığı değer
Şirket içi bir araç olmanın ötesinde, bu inşa ajans genelinde bileşik getiri sağlıyor — ve aynı düşünce, müşterilerimize sunduğumuz yapay zekâ otomasyonları, dönüşüm optimizasyonu ve teknik SEO çalışmalarımıza aktarılıyor.
- Portföy işi: full-stack, YZ, i18n, tasarım sistemleri ve CRO tek bir gösterimde.
- Şirket içi araç: Avangard içinden yönetiliyor — gerçek gelir etkisi.
- İşe alım sinyali: mühendisler bu stack’te çalışmak istiyor.
- Müşteri sohbetleri: “bunu inşa ettik”, “Next.js biliyoruz”dan güçlü.
Staging sürümüne bakın
Beta özel, ancak staging deployment’i bu sayfada anlatılan landing hunisini gösteriyor. İnşa hakkında sorular için LinkedIn üzerinden ulaşın. LinkedIn.
Staging sitesini aç