Files
neta/docs/11-client-portal.md
T
Poyraz 72a0b38f3e Remove obsolete scripts and configuration files for self-hosting and database migrations
- Deleted `pnpm-workspace.yaml` as it is no longer needed.
- Removed `apply-migrations.sh` script that handled database migrations.
- Eliminated `generate-full-stack-env.mjs` script for environment variable generation.
- Deleted `selfhost-backup.sh` script for creating backups of the self-hosted environment.
- Removed `selfhost-doctor.sh` script for health checks of the self-hosted services.
- Deleted `selfhost-restore.sh` script for restoring backups in the self-hosted environment.
2026-06-16 09:57:32 +03:00

145 lines
3.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
title: Client Portal
description: Müşteri portalının amacı, erişim modeli ve kullanım akışı.
order: 11
---
# Client Portal
Client portal, müşteriye sınırlı ve güvenli bir görünüm sunmak için var. Neta'nın ana dashboard'u freelancer içindir. Müşteriye bu dashboard'u açmak doğru olmaz. Bunun yerine müşteri sadece kendisini ilgilendiren proje, görev ve revizyon bilgilerini görür.
## Portalın Amacı
Müşteri portalı şu sorulara cevap verir:
- Projem hangi aşamada?
- Genel ilerleme ne durumda?
- Hangi görevler tamamlandı veya devam ediyor?
- Revizyon talebi gönderebilir miyim?
- Proje teslim tarihi ne?
Bu sayede müşteriyle sürekli manuel durum güncellemesi paylaşmak yerine, kontrollü bir şeffaflık sağlanır.
## Roller
Neta'da iki temel rol vardır:
- `freelancer`
- `client`
Freelancer ana paneli kullanır. Client ise portal alanını kullanır.
Rol bilgisi `profiles.role` alanında tutulur.
## Client Auth Bağlantısı
Müşteri portal erişimi için `clients` tablosunda şu alan kullanılır:
```txt
client_auth_id
```
Bu alan Supabase Auth içindeki müşteri kullanıcısının id değerini tutar.
İlişki şu şekildedir:
```txt
auth.users.id -> clients.client_auth_id -> projects.client_id
```
Bu bağlantı sayesinde müşteri sadece kendi client kaydına bağlı projeleri görebilir.
## Müşteri Hesabı Oluşturma
Müşteri public register ekranından kayıt olmaz. Freelancer paneli içinden bir müşteri kaydına portal hesabı oluşturulur.
Bu işlem sırasında:
1. Service role ile Supabase Auth user oluşturulur.
2. Kullanıcının profile rolü `client` yapılır.
3. `clients.client_auth_id` alanı yeni kullanıcıya bağlanır.
Bu akış için `SUPABASE_SERVICE_ROLE_KEY` gereklidir.
## Portal Route'ları
Portal route'ları `app/portal` altında durur.
Ana ekranlar:
- `/portal`
- `/portal/projects`
- `/portal/projects/[id]`
- `/portal/tasks`
- `/portal/revisions`
Portal layout, kullanıcının rolünü kontrol eder. Rol `client` değilse kullanıcı dashboard tarafına yönlendirilir.
## Müşteri Neleri Görebilir?
Müşteri şunları görebilir:
- Kendisine bağlı projeler.
- Proje adı, açıklama, durum, ilerleme ve teslim tarihi.
- Public olarak işaretlenmiş görevler.
- Proje planlama bölümleri.
- Kendi revizyon talepleri.
Müşteri şunları görmemelidir:
- Freelancer dashboard'u.
- Finans kayıtları.
- Diğer müşteriler.
- Diğer projeler.
- Private görevler.
- App settings.
- AI chat geçmişi.
## Public Task Mantığı
Görevlerde şu alan bulunur:
```txt
is_public_to_client
```
Bu alan `true` ise müşteri portalında gösterilebilir. Böylece iç operasyon görevleri müşteriyle paylaşılmadan tutulabilir.
## Revizyon Talepleri
Müşteri proje detay ekranından revizyon talebi oluşturabilir.
Revizyon durumları:
- `pending`
- `in_progress`
- `completed`
- `rejected`
Freelancer dashboard tarafında bu talepler görülebilir ve durumları güncellenebilir.
## Güvenlik Modeli
Portal güvenliği iki katmanda sağlanır:
1. Next.js layout seviyesinde rol kontrolü.
2. Supabase RLS policy seviyesinde veri erişim kontrolü.
Sadece layout kontrolüne güvenmek doğru değildir. Asıl kritik nokta Supabase policy'lerinin doğru olmasıdır.
## Portalı Özelleştirme
Portal menüsü şu dosyadan yönetilir:
```txt
config/portal-sidebar.ts
```
Portal shell bileşeni:
```txt
components/layout/portal-shell.tsx
```
Müşteriye daha fazla bilgi göstermek isterseniz önce RLS politikasını, sonra server component veri sorgusunu, en son UI bileşenini güncellemek gerekir.