Saas Database logo

Saas Database

Organization
komunite
saas-database

SaaS uygulaması için Supabase veritabanı altyapısını kur. Proje oluşturma, şema tasarımı, Row Level Security (RLS), migration, connection pooling, realtime ve edge function yapılandırması. Bu skill'i kullanıcı veritabanı, Supabase, tablo, migration, RLS, şema veya veri modeli ile ilgili bir şey istediğinde kullan. "Veritabanı kur", "tablo oluştur", "Supabase ayarla", "migration yap" gibi ifadeler tetikler.

Overview

Publisherkomunite
Repositorytezgah
Skill namesaas-database
Stars
92
Forks
10
Bundled files
Instructions only
LicenseMIT
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • Self-contained

    Everything the model needs lives in the instructions — no extra files to sync.

  • Open source

    Published by komunite on GitHub. Read the source before you install it.

Installation

Install the Saas Database AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
    https://github.com/komunite/tezgah/tree/main/skills/saas-database
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/komunite/tezgah.git /tmp/tezgah
mkdir -p .claude/skills
cp -r /tmp/tezgah/skills/saas-database .claude/skills/saas-database
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Saas Database in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Saas Database on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Saas Database is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

SaaS Database — Supabase Veritabanı Altyapısı

Bu skill, bir SaaS uygulamasının veritabanı katmanını kurar. Veritabanı uygulamanın belleğidir — şema kararları, güvenlik politikaları ve bağlantı stratejisi ilk günden doğru kurulmalıdır.

Bağımlılık: Bu skill saas-launcher orkestratör skill'inin Faz 2'sinin derinleştirilmiş versiyonudur. Bağımsız olarak da kullanılabilir.

Bağlı skill'ler:

  • saas-auth — Kullanıcı modeli veritabanında tanımlanır. Auth, kullanıcı kaydını burada oluşturur.
  • saas-payments — Abonelik ve plan bilgileri veritabanında saklanır.
  • saas-storage — Dosya metadata'sı veritabanında, dosyanın kendisi Supabase Storage'da saklanır.

Supabase Proje Kurulumu

İlk Adımlar

  1. https://supabase.com adresinden hesap oluştur
  2. Yeni proje oluştur — proje adı, veritabanı şifresi ve bölge seç
  3. Bölge seçimi: Kullanıcıların çoğunluğuna en yakın bölge. Türkiye için eu-central-1 (Frankfurt) önerilir
  4. Dashboard'dan proje URL'si ve anon key'i al
  5. .env.local dosyasına ekle:
    • NEXT_PUBLIC_SUPABASE_URL — proje URL'si (public, client'ta kullanılır)
    • NEXT_PUBLIC_SUPABASE_ANON_KEY — anonim anahtar (public, RLS ile korunur)
    • SUPABASE_SERVICE_ROLE_KEY — servis anahtarı (gizli, sadece server-side)

Kritik: SUPABASE_SERVICE_ROLE_KEY asla NEXT_PUBLIC_ prefix'i almamalı. Bu anahtar RLS'i bypass eder — client'a sızarsa tüm veriye erişim açılır.

Supabase Client Kurulumu

İki farklı client oluştur:

Browser client (client component'ler için): Anon key ile çalışır, RLS kurallarına tabidir. Kullanıcının kendi verisine erişim için.

Server client (API route'ları ve server component'ler için): Service role key ile çalışır, RLS'i bypass eder. Admin işlemleri, webhook handler'lar ve veri migration'ları için.

Middleware client: Oturum yenileme ve auth kontrolü için. Edge Runtime uyumlu olmalı.

Her client'ı ayrı bir dosyada tanımla ve projede tek yerden import et. Client'ları her dosyada yeniden oluşturma.


Şema Tasarımı

Temel Tablolar

Her SaaS'ta olması gereken minimum tablolar:

users — Kullanıcı profil bilgileri

  • id (UUID, primary key — Supabase Auth'un user ID'si ile eşleşmeli)
  • email (text, unique, not null)
  • full_name (text)
  • avatar_url (text, nullable)
  • plan (text, default: 'free')
  • stripe_customer_id (text, nullable, unique)
  • stripe_subscription_id (text, nullable)
  • plan_expires_at (timestamptz, nullable)
  • created_at (timestamptz, default: now())
  • updated_at (timestamptz, default: now())

Kullanıcı oluşturma tetikleyicisi: Supabase Auth'a yeni kullanıcı kaydolduğunda auth.users tablosuna satır eklenir. Bu olayı dinleyen bir PostgreSQL trigger fonksiyonu yazarak public.users tablosuna otomatik kayıt oluştur. Bu sayede Auth ve veritabanı her zaman senkron kalır.

Ek tablolar (projeye göre):

  • projects / workspaces — Kullanıcının oluşturduğu kaynaklar
  • subscriptions — Detaylı abonelik geçmişi
  • api_usage — API kullanım sayaçları (plan limitleri için)

Şema Tasarım İlkeleri

  • UUID kullan. Auto-increment integer yerine UUID — sıralı ID'ler güvenlik riski (tahmin edilebilir) ve multi-tenant uygulamalarda sorun yaratır.
  • Zaman damgası her tabloda olsun. created_at ve updated_at her tabloya ekle. Debugging ve analitik için vazgeçilmez.
  • Soft delete düşün. Kritik tablolarda deleted_at alanı ekleyerek silme yerine işaretle. Geri alma imkânı ve yasal uyumluluk (KVKK veri saklama süreleri) için.
  • İlişkileri foreign key ile zorunlu kıl. Veritabanı seviyesinde ilişki bütünlüğü sağla. Uygulama koduna güvenme.
  • Index'leri erken ekleme. İlk aşamada sadece foreign key ve sık sorgulanan alanlara index ekle. Geri kalanını sorgu yavaşlayınca ekle.

Row Level Security (RLS)

Neden Zorunlu

RLS, Supabase'in en önemli güvenlik katmanıdır. Anon key client'ta açıkça görünür — RLS olmadan herhangi biri bu anahtarla tüm veriye erişebilir.

RLS'i her tabloda aktifleştir. İstisnasız. RLS aktif değilse tablo herkese açıktır.

Temel Politika Kalıpları

Kullanıcı kendi verisini görsün:

  • SELECT: auth.uid() = user_id koşulu ile
  • INSERT: auth.uid() = user_id koşulu ile
  • UPDATE: auth.uid() = user_id koşulu ile
  • DELETE: auth.uid() = user_id koşulu ile (veya soft delete kullanıyorsan UPDATE)

Takım bazlı erişim:

  • Kullanıcının üye olduğu takımların verisine erişim
  • team_members junction tablosu üzerinden kontrol

Public okuma, authenticated yazma:

  • Blog yazıları, ürün sayfaları gibi herkesin okuması gereken veriler
  • SELECT: herkese açık
  • INSERT/UPDATE/DELETE: sadece admin rolü

RLS Test Etme

RLS politikalarını mutlaka test et:

  1. Supabase Dashboard'da SQL Editor'ü aç
  2. Farklı kullanıcı rolleri ile sorgu çalıştır
  3. Bir kullanıcının başka birinin verisine erişemediğini doğrula
  4. Anon (giriş yapmamış) erişimin beklendiği gibi çalıştığını doğrula

Migration Stratejisi

Supabase CLI ile Migration

Supabase CLI (npx supabase) ile migration yönetimi:

  1. npx supabase init — lokal Supabase projesini başlat
  2. npx supabase migration new <isim> — yeni migration dosyası oluştur
  3. Migration dosyasına SQL yaz (CREATE TABLE, ALTER TABLE vb.)
  4. npx supabase db push — migration'ları remote veritabanına uygula

Migration İlkeleri

  • Her değişiklik migration olsun. Dashboard'dan manuel tablo oluşturma yerine migration dosyası yaz. Tekrarlanabilir, versiyonlanabilir, geri alınabilir.
  • Migration'lar idempotent olsun. IF NOT EXISTS kullan. Aynı migration iki kez çalışsa bile hata vermemeli.
  • Veri kaybetme. Sütun silme veya tablo kaldırma migration'larında dikkatli ol. Önce verinin yedeklendiğinden emin ol.
  • RLS politikalarını migration'a dahil et. Tablo oluşturma ile birlikte RLS'i de aynı migration'da aktifleştir.

Connection Pooling

Serverless Ortamda Neden Kritik

Vercel gibi serverless platformlarda her function invocation yeni bir veritabanı bağlantısı açar. Supabase'in ücretsiz planında bağlantı limiti düşüktür — limit aşılırsa "too many connections" hatası alırsın.

Çözüm: Supavisor (Supabase Pooler)

Supabase dahili connection pooler sunar (Supavisor). Dashboard'da "Connection Pooling" sekmesinden pooler URL'sini al. Direct connection yerine pooler URL'sini kullan:

  • Direct: postgresql://user:pass@host:5432/db — development için
  • Pooler: postgresql://user:pass@host:6543/db — production için (port farkına dikkat: 6543)

.env.local'da iki ayrı URL tut:

  • DATABASE_URL — pooler URL (uygulama bağlantısı)
  • DIRECT_URL — direct URL (migration'lar için — migration araçları pooler'dan geçemeyebilir)

Realtime (İleri Seviye)

Supabase Realtime, veritabanı değişikliklerini WebSocket üzerinden canlı olarak client'a iletir. Kullanım alanları: canlı bildirimler, ortak çalışma, chat, canlı dashboard.

Day 1'de gerekmez. Çoğu SaaS'ta ilk versiyonda realtime ihtiyacı yoktur. İhtiyaç ortaya çıkınca ekle.

Aktifleştirme: İlgili tablonun "Realtime" özelliğini Dashboard'dan aç. RLS politikaları realtime erişime de uygulanır.


Supabase Edge Functions (İleri Seviye)

Supabase'in Deno tabanlı serverless function'ları. Next.js API route'ları varken genellikle gerekmez. Kullanım alanları: Supabase Webhook tetikleyicileri, CRON job'lar, veritabanına çok yakın işlemler (latency kritikse).

Çoğu SaaS için Next.js API route'ları yeterlidir. Edge Function'ları yalnızca spesifik bir ihtiyaç varsa değerlendir.


Gotchas

  • Service role key client'a sızarsa felaket. Bu anahtar RLS'i bypass eder. NEXT_PUBLIC_ prefix'i verme, sadece server-side'da kullan.
  • RLS unutulursa veri sızar. Yeni tablo oluşturunca RLS'i hemen aktifleştir. Dashboard'da tablo oluşturunca RLS varsayılan olarak kapalıdır.
  • Auth trigger olmadan kullanıcı kaydı eksik kalır. Supabase Auth'a kayıt olan kullanıcı auth.users'da oluşur ama public.users'da oluşmaz — trigger'ı kur.
  • Pooler port'u farklıdır. Direct bağlantı 5432, pooler 6543. Yanlış port = bağlantı hatası.
  • Migration'sız dashboard değişikliği kaybolur. Dashboard'dan yapılan tablo değişiklikleri migration dosyasında değildir — başka bir ortama taşınamaz, supabase db reset ile kaybolur.
  • Supabase ücretsiz plan uyku modu. 7 gün inaktif kalırsa proje duraklatılır. Development'ta düzenli istek göndererek uyandır veya Pro plana geç.
  • TypeScript tipleri üret. npx supabase gen types typescript ile veritabanı şemasından TypeScript tipleri üret. Elle tip tanımlamaya çalışma — şema değişince tipler senkrondan çıkar.

Frequently asked questions

What does the Saas Database AI skill do?

SaaS uygulaması için Supabase veritabanı altyapısını kur. Proje oluşturma, şema tasarımı, Row Level Security (RLS), migration, connection pooling, realtime ve edge function yapılandırması. Bu skill'i kullanıcı veritabanı, Supabase, tablo, migration, RLS, şema veya veri modeli ile ilgili bir şey istediğinde kullan. "Veritabanı kur", "tablo oluştur", "Supabase ayarla", "migration yap" gibi ifadeler tetikler.

Why use Saas Database on TypingMind?

Because you install it once and use it with any model. Saas Database is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Saas Database in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/komunite/tezgah/tree/main/skills/saas-database. TypingMind reads its SKILL.md and installs it as a skill you can enable per chat.

Which AI models can use Saas Database?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Saas Database?

As many as you like. As long as a model supports skills, you can use Saas Database with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Saas Database AI skill free?

Yes. It is published on GitHub by komunite under the MIT license. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇