Yapay Zeka Ajanları
Tüm site türleri
⚡
Claude Code Rehberi

SaaS / Web App

Auth + database + dashboard + ödeme. Tam dinamik.

İleri 2-6 haftaÖrnek: B2B SaaS, internal tool

SaaS = abonelik tabanlı yazılım. MVP için minimum: auth + dashboard + 1 ana özellik + ödeme + e-posta. Claude Code ile 2 haftada MVP yayında. Modern stack: Next.js + Supabase + Stripe + Resend. Tüm bunlar tek geliştiriciyle, $50-100/ay maliyetle. Eskiden 3-6 ay + $30K-100K, şimdi 2 hafta + $50.

Kim İçin Uygun?

  • B2B SaaS kurucular (internal tool, productivity, AI tools)
  • Indie hackers (kendi ürünleri için)
  • Internal tool ihtiyacı olan şirketler (CRM, admin panel)
  • MVP test eden girişimciler
Tipik Özellikler

SaaS / Web App için olmazsa olmazlar

1

Kullanıcı auth (Supabase Auth)

E-posta + şifre + sosyal login (Google, GitHub).

2

Multi-tenant database

RLS ile organizasyonlar arası veri izolasyonu.

3

Dashboard

Ana kullanıcı paneli, KPI'lar, son aktiviteler.

4

Ana özellik (ürünün kendisi)

Niş'inize göre — örn. yazı yaz, fatura kes, müşteri yönet.

5

Stripe Subscription

Aylık/yıllık abonelik, trial, paket yükseltme, iptal.

6

E-posta bildirimleri

Welcome, trial bitiyor, abonelik onayı, hatırlatma.

7

Admin paneli

Kullanıcı yönetimi, faturalar, metrikler.

8

Onboarding flow

İlk girişte 3-5 adım: ne yapacak, nasıl kullanacak.

Önerilen Yığın

Next.js 14 + TypeScript Supabase (Auth + Postgres + Storage) Stripe (Billing) Resend + React Email Tailwind + shadcn/ui Vercel
Adım Adım Kurulum

8 adımda yayında

1

PRD + mimari (1 gün)

Claude Code: 'şu ürün için PRD ve mimari öner: kullanıcı sayfaları, admin sayfalar, ödeme, e-posta. Veri modeli tablolarıyla.'

2

Supabase + Auth (1 gün)

Supabase projesi, e-posta + Google auth, kullanıcı tablosu, organizasyon tablosu, RLS politikaları.

3

Layout + auth flow (1 gün)

Login/signup sayfaları, dashboard layout, protected routes, middleware.

4

Ana özellik (3-5 gün)

Ürününüzün ana fonksiyonu. Her gün 1-2 alt özellik. Test ederek ilerle.

5

Stripe billing (1 gün)

Subscription products, Checkout flow, webhook handler, dashboard'da plan yönetimi.

6

E-posta + onboarding (1 gün)

Welcome, trial countdown, payment success, abonelik iptal. React Email + Resend.

7

Admin + test (1 gün)

Kullanıcı listesi, subscription durumu, manual müdahale. E2E test (Playwright).

8

Deploy + monitoring (1 gün)

Vercel prod, custom domain, Sentry (error tracking), PostHog (analytics).

Önemli · Video Slider Rehberi

SaaS / Web App'da Video / Slider Nasıl Yapılır?

SaaS landing page'de demo video = dönüşüm 2× artar. Dashboard içinde feature walkthrough = onboarding tamamlama %80'i geçer. Yardım/dokümantasyonda screen recording = support ticket'lar yarıya iner.

1

Landing page demo video

Loom kayıt, YouTube/Vimeo'ya yükle, lite-youtube-embed ile göm.

// Hero'da
<LiteYouTubeEmbed
  id="DEMO_VIDEO_ID"
  title="2 dakikada ürün demosu"
  poster="hqdefault"
  webp
/>
2

In-app onboarding tour

İlk girişte 3-5 adımlı walkthrough. react-joyride kütüphanesi:

npm install react-joyride

import Joyride from 'react-joyride';

const steps = [
  { target: '.new-project-btn', content: 'Buradan yeni proje oluşturun' },
  { target: '.invite-team', content: 'Ekibinizi davet edin' },
  { target: '.upgrade-plan', content: 'Daha fazla özellik için yükseltin' },
];

<Joyride steps={steps} continuous showSkipButton />
3

Feature walkthrough video

Karmaşık özellikler için 'video tutorial' modal'ı. Dashboard içinde her bölümde küçük (?) ikonu, tıklanınca video açar.

<button onClick={() => setVideoOpen(true)}>
  <QuestionMarkIcon /> Nasıl kullanılır?
</button>

{videoOpen && (
  <Dialog open onClose={() => setVideoOpen(false)}>
    <video src="/tutorials/feature-x.mp4" controls autoPlay className="w-full" />
  </Dialog>
)}
4

Yardım merkezi video kütüphanesi

/help sayfası: kategori başına 3-5 video. Loom ile kayıt, embed.

<div className="grid grid-cols-1 md:grid-cols-3 gap-6">
  {tutorials.map(t => (
    <div key={t.id} className="rounded-lg overflow-hidden border">
      <div className="aspect-video">
        <iframe
          src={`https://www.loom.com/embed/${t.loomId}`}
          frameBorder="0"
          allowFullScreen
          className="w-full h-full"
        />
      </div>
      <div className="p-4">
        <h3 className="font-bold">{t.title}</h3>
        <p className="text-sm text-gray-600">{t.duration} · {t.category}</p>
      </div>
    </div>
  ))}
</div>
5

Müşteri başarı hikayesi videoları

Landing page'de sosyal kanıt: 'X şirketi nasıl başarılı oldu' tarzı 60 sn case study video carousel.

<Swiper modules={[Pagination, Navigation]} navigation pagination={{ clickable: true }} className="my-12">
  {caseStudies.map(c => (
    <SwiperSlide key={c.id}>
      <div className="grid md:grid-cols-2 gap-8 p-8 bg-gray-50 rounded-2xl">
        <video src={c.video} controls poster={c.poster} className="rounded-xl" />
        <div>
          <h3 className="text-2xl font-bold">{c.title}</h3>
          <p className="mt-4">{c.summary}</p>
          <div className="mt-6 flex gap-6">
            <div>
              <p className="text-3xl font-bold text-emerald-500">{c.metric1}</p>
              <p className="text-sm text-gray-600">{c.metric1Label}</p>
            </div>
            <div>
              <p className="text-3xl font-bold text-emerald-500">{c.metric2}</p>
              <p className="text-sm text-gray-600">{c.metric2Label}</p>
            </div>
          </div>
        </div>
      </div>
    </SwiperSlide>
  ))}
</Swiper>
6

Loom embed sağlığı

Loom video'lar bazen yavaş yükler. Önce thumbnail göster, click'te yükle. Veya MP4 export edip kendin host et.

// Lazy Loom embed
const [loaded, setLoaded] = useState(false);

{!loaded ? (
  <div onClick={() => setLoaded(true)} className="aspect-video bg-gray-100 cursor-pointer">
    <img src={`https://cdn.loom.com/sessions/thumbnails/${loomId}.jpg`} className="w-full h-full" />
    <PlayIcon className="absolute inset-0 m-auto" />
  </div>
) : (
  <iframe src={`https://loom.com/embed/${loomId}?autoplay=1`} />
)}
Hazır Promptlar

Claude Code'a Yapıştır

Köşeli parantezleri kendi içeriğinizle değiştirin.

SaaS başlangıç iskelet

Aç ▾
Next.js 14 + TypeScript + Supabase + Tailwind + shadcn/ui ile SaaS iskeleti kur.

Yapı:
- (auth) grup: login, signup, forgot-password
- (marketing) grup: anasayfa, /pricing, /docs
- (app) grup: /dashboard, /settings, /billing, /team — protected
- /api/webhooks/stripe, /api/email, /api/cron

Supabase:
- users tablosu (auth.users'a foreign key)
- organizations (multi-tenant)
- members (user_id, org_id, role)
- subscriptions (org_id, stripe_id, status, plan)
- RLS politikaları (her tablo için)

Middleware: protected routes auth kontrolü.
Layout: dashboard layout (sidebar + header + content).
shadcn/ui ile button, dialog, dropdown, toast kurulu.

İlk komut: `npx create-next-app@latest` ile başla.

Stripe subscription tam kurulum

Aç ▾
Stripe billing tam entegrasyonu:

Products & Prices (Stripe Dashboard'da):
- Starter: $9/ay, $90/yıl (10 user, 100 project)
- Pro: $29/ay, $290/yıl (sınırsız user, 1000 project)
- Enterprise: contact us (custom)

Backend:
- /api/stripe/checkout — Checkout Session
- /api/stripe/portal — Customer Portal (plan değişimi, fatura)
- /api/webhooks/stripe — tüm subscription event'leri handle
  - customer.subscription.created → DB'ye yaz
  - customer.subscription.updated → status güncelle
  - customer.subscription.deleted → status=canceled
  - invoice.payment_failed → user'a mail at

Frontend:
- /pricing sayfası: 3 plan kartı + toggle (monthly/yearly)
- /billing sayfası: mevcut plan + 'manage' butonu (Portal'a)
- Trial: 14 gün, kart bilgisi gerektirmeden

Edge case'ler: webhook race condition, retry, idempotency.

Multi-tenant RLS politikası

Aç ▾
Supabase'de multi-tenant SaaS için RLS politikaları yaz:

Senaryo: Her kullanıcı bir veya daha fazla organizasyonun üyesi. Sadece üyesi olduğu org'ların verilerini görebilir/değiştirebilir.

Tablolar:
- organizations (id, name, owner_id, plan, created_at)
- members (user_id, org_id, role: 'owner'|'admin'|'member')
- projects (id, org_id, name, ...)
- tasks (id, project_id, ...)

RLS:
- organizations: SELECT olmaması, members tablosu üzerinden join ile
- members: kendi user_id'sini, ve owner ise tümünü görür
- projects: members.org_id = projects.org_id ise SELECT
- tasks: projects.org_id'si üyesi olduğu org'lardan biriyse SELECT

Tüm INSERT/UPDATE/DELETE politikaları da yaz.
Test query'leri ile doğrula. Edge case: organizasyondan çıkma, davet kabul, role değişimi.
Gerçek Örnek

Bu rehberden gerçek bir vaka

Brief

B2B SaaS — küçük ajanslar için müşteri yönetimi (mini-CRM). 3 paket: free, $29, $99/ay.

Sonuç

10 iş gününde: auth + dashboard + müşteri/proje yönetimi + Stripe billing + onboarding + 6 e-posta + admin. Vercel + custom domain. İlk 100 kullanıcı bekliyor.

Next.js 14SupabaseStripeResendReact Emailshadcn/uiVercelSentryPostHog
Sık Hatalar

Bunlardan kaçının

Hata

Her şeyi ilk versiyona sıkıştırma — 3 ay sonra hâlâ launch yok

Çözüm

MVP = minimum viable. 1 ana özellik + auth + ödeme. Geri kalan post-launch. Reid Hoffman: 'eğer ilk ürününüzden utanmıyorsanız, çok geç çıkardınız'.

Hata

Stripe webhook handler unutuluyor — abonelikler senkron değil

Çözüm

Webhook'lar production'da çalışıyor mu test et. Stripe CLI ile local'de simüle et. Idempotency önemli (aynı event 2× gelebilir).

Hata

Free trial kart istemeden veriyor — kötüye kullanım

Çözüm

14 gün trial, kart bilgisi opsiyonel. Çok cömert plan değil. Email verification zorunlu.

SSS

SaaS / Web App için sık sorular

Bolt.new veya v0 kullanmalı mıyım?▾

Bolt/v0 hızlı prototype için iyi. Production için: Claude Code daha kontrollü, anlaşılır kod, sahip olma. Bolt UI'da yapacaksanız ama production kodu Claude Code ile düzenleyebilirsin.

Supabase yerine Firebase mi?▾

Supabase modern (Postgres, native SQL), açık kaynak, daha ucuz scale, RLS güçlü. Firebase: hızlı başlangıç, real-time çok iyi. Yeni proje için Supabase tavsiye.

Stripe yerine Lemon Squeezy / Paddle?▾

Lemon Squeezy + Paddle merchant of record (vergi yönetir) — Türkiye'den global satış için harika. Stripe daha esnek ama vergiyi sen yönetirsin. Solo kurucu için: Lemon Squeezy başlangıç.