SaaS uygulaması için Supabase Storage ile dosya depolama altyapısı kur. Bucket yapılandırması, RLS ile dosya güvenliği, dosya yükleme, görsel optimizasyonu ve plan bazlı depolama limitleri. Bu skill'i kullanıcı dosya yükleme, görsel, depolama, storage, upload veya profil fotoğrafı ile ilgili bir şey istediğinde kullan. "Dosya yükleme ekle", "profil fotoğrafı yükle", "storage kur" gibi ifadeler tetikler.
Bu skill, bir SaaS uygulamasının dosya depolama katmanını Supabase Storage ile kurar. Profil fotoğrafları, kullanıcı tarafından yüklenen dokümanlar, ürün görselleri veya dışa aktarılan raporlar — dosya depolama çoğu SaaS'ta gerekli bir katmandır.
Supabase Storage, zaten veritabanı için kullandığın Supabase projesinin parçasıdır — ek servis hesabı veya yapılandırma gerektirmez. RLS ile dosya seviyesinde güvenlik, dahili görsel dönüştürme ve Dashboard'da görsel dosya yönetimi sunar. Ücretsiz katman: 1 GB depolama, 2 GB bandwidth/ay.
Bağımlılık: Bu skill saas-launcher orkestratör skill'inin opsiyonel bir fazıdır. Bağımsız olarak da kullanılabilir. Her SaaS'ta gerekmez — yalnızca dosya yükleme ihtiyacı varsa uygula.
Bağlı skill'ler:
Supabase Storage'da dosyalar bucket'larda organize edilir. Her bucket bir klasör gibidir.
Önerilen bucket yapısı:
avatars — Kullanıcı profil fotoğrafları (public)uploads — Kullanıcı dosyaları (private — RLS ile korunmalı)exports — Sistem tarafından üretilen dosyalar (private)Public vs. Private bucket:
Storage bucket'ları da veritabanı tabloları gibi RLS ile korunur:
avatars/{user_id}/) yükleyebilsinKlasör yapısı ile RLS'i birleştir: {bucket}/{user_id}/{dosya} — bu sayede auth.uid() ile yol kontrolü yapılabilir.
Supabase Storage client'ı ile doğrudan tarayıcıdan yükleme:
Avantaj: Basit, sunucu yükü yok. Limit: Maksimum dosya boyutu Supabase client'ta varsayılan 5 MB (yapılandırılabilir).
Büyük dosyalar için sunucu üzerinden presigned URL oluştur:
Avantaj: Sunucu dosya içeriğini taşımaz, bandwidth tasarrufu. Büyük dosyalar desteklenir.
Dosya yüklemede şu kontrolleri yap:
Dosya türü kontrolü: İzin verilen MIME türlerini belirle. Yalnızca beklenen türleri kabul et.
image/jpeg, image/png, image/webpapplication/pdf, text/plain*/* veya tüm türlere izin vermeDosya boyutu kontrolü: Maksimum boyut belirle.
Dosya adı temizleme: Kullanıcının gönderdiği dosya adını güvenme. UUID ile yeniden adlandır. Orijinal adı metadata olarak sakla.
Magic bytes kontrolü (ileri seviye): MIME türü header'ı manipüle edilebilir. Dosyanın ilk byte'larını (magic bytes) kontrol ederek gerçek türünü doğrula.
Yükleme endpoint'ine rate limit uygula:
Content-Disposition: attachment header'ı ile indirmeye zorla, tarayıcıda açmaya değilOptimize edilmemiş görseller sayfa yükleme süresini katlar. 5 MB'lık bir profil fotoğrafı yerine 50 KB'lık optimizeli versiyon kullanıcı deneyimini dramatik iyileştirir.
Supabase Storage dahili görsel dönüştürme sunar. URL'ye parametre ekleyerek resize, format dönüşümü ve kalite ayarı yapılabilir.
Önerilen stratejiler:
Next.js'in <Image> bileşeni otomatik görsel optimizasyonu sağlar:
Storage URL'lerini next.config.js'te remotePatterns'a ekle — aksi halde Next.js dış domain görselleri optimize etmez.
Her planda farklı depolama limiti tanımla:
Her yükleme öncesinde kullanıcının toplam depolama kullanımını kontrol et. Limit aşıldığında yüklemeyi reddet ve plan yükseltme öner.
Toplam kullanımı veritabanında bir sayaç olarak tut — her yükleme ve silme işleminde güncelle. Storage API'den her seferinde toplam boyut hesaplamak yavaş.