Files
kovakemlak-crm/CLAUDE.md
T
egecankomur 37679e83e6 init: kovakemlak-crm project scaffold
- Next.js 16 + Appwrite multi-tenant emlak CRM
- Database: kovakemlak-db (properties, customers, customer_searches, property_matches, presentations, investors, activities, tenant_settings)
- Same stack as isletmem-kovakcrm (shadcn/ui template base)
- Modules: portföy, müşteri takibi, arama kriterleri, otomatik eşleştirme, sunum linki, yatırımcı portalı
2026-05-05 04:37:04 +03:00

4.0 KiB
Raw Blame History

KovakEmlak CRM

Multi-tenant emlak CRM. Emlak ofisleri portföy yönetimi, müşteri takibi, yatırımcı portalı ve portföy sunumu yapar. Her tenant kendi verilerini görür.

Stack

  • Next.js 16 + React 19 (App Router, TypeScript)
  • Tailwind CSS v4 + shadcn/ui v3 (Radix primitives)
  • Zustand — client state
  • TanStack Table, react-hook-form + Zod, Recharts
  • Appwrite — DB, Auth, Storage, Teams (tenant izolasyonu)
  • pnpm — package manager
  • Coolify — Gitea webhook ile auto-deploy

Multi-tenancy modeli

Concept Appwrite primitive
Tenant Appwrite Team (1 team = 1 emlak ofisi)
Tenant üyesi Team membership (rol: owner / admin / member)
Veri izolasyonu Her doküman tenantId attribute + Permission.read/update/delete(Role.team(tenantId))

Modüller

Modül Collection Notlar
Portföy properties İlan yönetimi (satılık/kiralık, tüm ilan tipleri)
Müşteriler customers Alıcı / kiracı / yatırımcı adayları
Arama Kriterleri customer_searches Müşteri bazlı saved search (oda, fiyat, lokasyon)
Eşleşmeler property_matches Yeni ilan → kriter eşleşmesi, bildirim takibi
Sunumlar presentations Seçilmiş ilanlar → paylaşılabilir sunum linki
Yatırımcılar investors Portal erişimi olan yatırımcı profilleri
Aktiviteler activities Görüşme, teklif, ziyaret, arama notları
Ofis Ayarları tenant_settings Logo, para birimi, iletişim bilgileri

Appwrite Database

  • Database ID: kovakemlak-db
  • Project ID: 69f27b51000a5bee46ce (aynı proje, isletmem ile ortak)
  • Endpoint: https://db.kovaksoft.com/v1

Özel Özellikler

Otomatik Eşleştirme (Matching Engine)

Yeni ilan eklendiğinde server action içinde customer_searches tablosu filtrelenerek kriterlere uyan müşteriler bulunur ve property_matches'e yazılır.

yeni ilan kaydedildi
  → matchPropertiesForSearches(propertyId, tenantId)
  → customer_searches filtrele (listingType, propertyType, roomCount, fiyat aralığı, lokasyon)
  → property_matches'e yaz (notified: false)
  → danışmana bildirim

Portföy Sunumu

Danışman birden fazla ilan seçer → presentations kaydı oluşur → shareToken ile public URL üretilir → müşteri /sunum/[token] rotasında giriş yapmadan görüntüler.

Yatırımcı Portalı

investors.userId Appwrite user ID'siyle eşleşir. Login olan yatırımcı /portal rotasında kendi kriterlerine uyan aktif ilanları görür.

Rotalar

(auth)/           login, register
(dashboard)/      ana CRM (danışman)
  properties/     portföy listesi + detay + ekle
  customers/      müşteri listesi + arama kriterleri
  presentations/  sunum oluştur + paylaş
  investors/      yatırımcı profilleri
  activities/     aktivite takibi
  settings/       ofis ayarları
(portal)/         yatırımcı portalı (ayrı layout)
sunum/[token]/    public sunum sayfası (auth gerektirmez)

Komutlar

pnpm dev           # localhost:3001
pnpm build
pnpm lint
pnpm typecheck     # tsc --noEmit

Environment variables

NEXT_PUBLIC_APPWRITE_ENDPOINT=https://db.kovaksoft.com/v1
NEXT_PUBLIC_APPWRITE_PROJECT_ID=69f27b51000a5bee46ce
NEXT_PUBLIC_APPWRITE_DATABASE_ID=kovakemlak-db
APPWRITE_API_KEY=                 # server-only
APP_URL=https://emlak.kovakcrm.com

Geliştirme prensipleri

  • Template görselini bozma. Sayfa layout, sidebar, theme korunur.
  • Tenant filtresi şart. Her query'de tenantId zorunlu.
  • Server actions tercih edilir — validation + audit için.
  • Schema değişikliği = MCP çağrısı (commit prefix: db:).
  • Türkçe UI, kod İngilizce.
  • Matching engine idempotent — aynı (propertyId, searchId) çifti için duplicate match yazma.

Gitea Deploy

  • Repo: ssh://git@git.kovaksoft.com:2222/kovakmedya/kovakemlak-crm.git
  • Production domain: https://emlak.kovakcrm.com
  • Workflow: main branch push → Coolify auto-deploy