← Kullanım kılavuzu · Ana sayfa · Yönetim
Sistem analiziKalıp Üretici SaaS · mimari, veri modeli, akışlar, güvenlik, maliyet, riskler, yayın planı · 6 Eylül 2026
1 · Özet
Yerel çalışan kalıp üreticisi, statik web uygulaması + Supabase + Lemon Squeezy üçlüsüyle abonelik ürününe dönüştürüldü. Ağır iş (CSG) tarayıcıda kalır; sunucu tarafı yalnızca kimlik, plan/kota, proje deposu ve ödeme webhook'udur. Bu sayede sunucu maliyeti neredeyse sıfırdır ve kullanıcı dosyaları sunucuya yüklenmez; bu hem gizlilik hem pazarlama argümanıdır.
Landing → uygulama (/app) → yönetim paneli (/admin). Ücretsiz: yöneticinin yüklediği kütüphane modellerinden sınırsız kalıp; Pro: kendi modelleri + ticari kullanım.
Statik barındırma (Cloudflare Pages/Netlify/Vercel) · Supabase (Auth, Postgres+RLS, Storage, Edge Function) · Lemon Squeezy (checkout, abonelik, vergi, fatura).
Kod ve şema hazır; hesap/anahtar kurulumu ve canlı test bekliyor (docs/kurulum-saas.md). Sahte mod ile tüm akışlar sunucusuz denenebilir.
2 · Mimari
Dosya haritası
/i18n.js, /i18n-dict.js dil + para birimi (tr/en/de, USD/TRY/EUR; DOM gözlemcisiyle çeviri) /index.html landing /admin/index.html yönetim paneli (RLS + is_admin) /app/index.html uygulama /config.js Supabase + Lemon Squeezy anahtarları (anon) /app/saas.js SaaS katmanı /supabase/migrations/ şema, RLS, fonksiyonlar, storage politikası /worker.js /geom.js CSG ve geometri /supabase/functions/ls-webhook webhook (Deno) /vendor/ three, manifold, supabase-js (çevrimdışı) /docs/ kılavuz, kurulum, bu analiz /gizlilik.html /kosullar.html hukuki taslaklar /netlify.toml /vercel.json barındırma
3 · Veri modeli
| Tablo | Amaç | Yazan | RLS |
|---|---|---|---|
| profiles | auth.users ile 1:1; rol (user/admin), plan_override, banned, last_seen | trigger (kayıt), kullanıcı (sınırlı), admin | kendi satırı + admin |
| subscriptions | Lemon Squeezy abonelik durumu, portal URL'leri, ham webhook | yalnızca service role (webhook) | okuma: sahibi + admin |
| downloads | İndirme günlüğü; library_id kaynak modeli gösterir (kapı ve istatistik) | record_download() (security definer) | okuma: sahibi + admin |
| events | Kullanım analitiği: generate, login, checkout_click, ls_* | log_event(), webhook | okuma: sahibi + admin |
| projects | Ad, mod, ayarlar (jsonb), model dosya yolu | sahibi | sahibi + admin |
| library_models | Yönetici kütüphanesi: ad, kategori, dosya yolu ve önizleme PNG yolu (public bucket library, thumbs/), önerilen mod, aktif, sıra | admin | aktifler herkese, hepsi admin'e |
| app_settings | free_downloads_per_week, price_monthly/yearly (USD), fx (TRY/EUR kuru), announcement | admin | herkes okur |
| storage: models | Model dosyaları, <uid>/<proje>.bin, 100 MB sınır | sahibi | klasör = uid |
Fonksiyonlar: current_plan(uid) (banned > override > aktif abonelik > free), record_download, quota_status, log_event, is_admin, admin_stats; görünüm admin_users.
4 · Akışlar
E-posta+şifre, sihirli bağlantı ya da Google → Supabase Auth → trigger ile
profiles satırı → uygulama quota_status çağırır, rozet ve menü gösterir.STL/ZIP düğmesi →
record_download(mode, pieces, file, library_id) → Pro: her zaman; Free: yalnızca aktif kütüphane modelinden üretilmişse (isteğe bağlı haftalık tavan) → aksi halde "Pro'ya geç". Yerel modda kapı yok."Pro'ya geç" → Lemon Squeezy hosted checkout (
checkout[custom][user_id], e-posta ön dolu) → başarı → /app/?odeme=ok. Webhook subscription_created/updated/... → HMAC doğrulama → subscriptions upsert → uygulama yenilendiğinde plan pro.Müşteri portalı →
cancelled (ends_at'e kadar pro) → expired → free. past_due geçici olarak pro sayılır (ödeme yeniden denenir)."Projeyi kaydet": ayarlar jsonb + model dosyası Storage'a (≤ 30 MB tampon tutulur). "Projelerim": indir, ayarları uygula.
admin rolü → Lemon Squeezy işlemleri (iptal/duraklat/sürdür/iade)
ls-admin fonksiyonuyla (JWT → admin kontrolü → LS API, anahtar sunucuda) → istatistik kartları, günlük grafik, kullanıcı tablosu (arama/sıralama/CSV), plan override, yasaklama, admin rolü, ücretsiz limit ayarı, olay günlüğü.5 · Güvenlik
| Konu | Önlem | Kalan risk |
|---|---|---|
| Anahtarlar | İstemcide yalnızca anon key; service role yalnızca Edge Function gizli değişkeninde | düşük |
| Veri erişimi | Tüm tablolarda RLS; yönetici is_admin() ile; storage klasörü = uid | düşük |
| Webhook sahteciliği | X-Signature HMAC-SHA256 sabit zamanlı karşılaştırma; user_id yoksa e-posta eşleme | düşük |
| Kota atlatma | Sayaç sunucuda (RPC); ancak CSG istemcide olduğundan teknik bilgisi olan kullanıcı STL'i konsoldan alabilir | orta · kabul edilebilir: hedef kitle maker'lar; ileride Pro'ya özel sunucu tarafı özellikler (proje deposu, yüksek çözünürlük) eklenebilir |
| Kötüye kullanım | Yasaklama, olay günlüğü, Supabase rate limit; kayıt için e-posta doğrulama | orta |
| Ödeme | Kart bilgisi Lemon Squeezy'de (PCI), MoR olarak KDV/vergi onlarda | düşük |
| Hukuk | Gizlilik ve koşullar taslak; KVKK/GDPR için danışmanlık, veri silme süreci | yüksek · yayın öncesi kapatılmalı |
6 · Maliyet ve fiyatlandırma
| Kalem | Başlangıç | Ölçek (1000 kullanıcı) |
|---|---|---|
| Statik barındırma | 0 (Cloudflare Pages / Netlify free) | 0-20 $/ay |
| Supabase | 0 (free: 500 MB DB, 1 GB storage) | 25 $/ay Pro (8 GB DB, 100 GB storage) |
| Lemon Squeezy | %5 + 0.50 $ / işlem (vergi dahil MoR) | aynı |
| Alan adı, e-posta | ~15 $/yıl + Resend/Postmark 0-15 $/ay | aynı |
Öneri: Pro 9.90 $/ay, 99 $/yıl (₺/€ panelden çekilen kurla gösterilir). Rakipler: Meshcast 20 $/ay, MoldStudio3D 19 $/ay, Mold Studio kredi başı ~1 $, Moldboxer tek seferlik lisans. Konumlandırma: "dosyan yüklenmez, çevrimdışı da çalışır, beş kalıp türü tek yerde". Break-even 25 $/ay Supabase için ~4 Pro abone.
7 · Riskler ve varsayımlar
- yüksek Ürün-pazar uyumu: Meshcast ücretsiz katmanı cömert; farkımız gizlilik, çevrimdışı, çekirdek/tepsi/pres genişliği ve Türkçe. Landing'de bunu öne çıkar.
- orta Tarayıcı uyumluluğu: WASM + Web Worker + DecompressionStream; Safari 16.4+, Chrome 103+. Eski cihazlarda büyük modeller yavaş.
- orta Destek yükü: bozuk STL, baskı toleransları. Kılavuz ve onarım özelliği yükü azaltır; destek e-postası ve SSS şart.
- orta Lemon Squeezy mağaza onayı ve TR ödeme yöntemleri (kart, bazı bölgelerde PayPal). Onay 1-3 gün.
- düşük Supabase kesintisi: uygulama yerel modda çalışmaya devam eder (kota kontrolü hata verirse indirme engellenir; ileride "çevrimdışı tolerans" eklenebilir).
8 · Yayın öncesi test planı (birlikte)
- Sahte mod:
/app/?mock=free→ kendi modelinde indirme → yükseltme penceresi; Kütüphaneden seç → indirme serbest → sahte ödeme → PRO rozeti → Projeyi kaydet / Projelerim →/admin/?mock=1paneli. - Supabase: kayıt (e-posta doğrulama), giriş, sihirli bağlantı, Google;
profilessatırı; admin rolü SQL. - Kapı: free hesapla kendi modeli engelli, kütüphane modeli serbest; yönetim panelinden haftalık tavan girilirse kütüphane indirmeleri de sınırlanır.
- Ödeme (test modu): checkout → test kartı → webhook 200 →
subscriptions.active→ PRO; müşteri portalı; iptal → cancelled → (manuel) expired → free. - Projeler: 20 MB model kaydet/aç/sil; Storage'da klasör = uid; başka kullanıcı erişemiyor (RLS).
- Yönetim: plan override pro → kullanıcıda PRO; yasakla → indirme engeli; CSV.
- Yayın: alan adı, HTTPS, Supabase Site URL, LS success URL, gizlilik/koşullar gözden geçirme, destek e-postası, hata izleme (Sentry isteğe bağlı).
- Duman testi
node test/smoke.mjsyeşil; Lighthouse landing ≥ 90.
9 · Yol haritası
| Aşama | İş |
|---|---|
| Hafta 1 | Hesaplar ve anahtarlar, test modunda uçtan uca ödeme, hukuki metinler, alan adı, yayın (beta). |
| Hafta 2-4 | Onboarding (ilk kalıp sihirbazı), e-posta bildirimleri (Resend), Pro'ya özel: proje sınırı yok, yüksek çözünürlük, öncelikli destek. |
| Ay 2-3 | Galeri/topluluk, kütüphane kategorileri, mum/vazo tasarımcıları, mobil düzen. |