description:Supabase ve Poyraz UI ayrımı başlamadan önce mevcut Neta uygulamasının repo, davranış, bağımlılık ve risk baseline'ı.
title:Phase 0 v3 Baseline
description:Supabase çıkışı ve Poyraz UI v3 dönüşümü başlamadan önce güncel repo, route, davranış, dependency ve doğrulama baseline'ı.
status:active
last_updated:2026-07-10
last_updated:2026-07-16
---
# Phase 0 Baseline
# Phase 0 v3 Baseline
Bu dosya, self-hosted redesign başlamadan önce repo üzerinden doğrulanabilen mevcut durumu sabitler. Production Supabase verisine erişim gerektiren satır sayıları, storage boyutları, gerçek kullanıcı akışı ekran kayıtları ve backup doğrulaması bu dokümanda tamamlanmış sayılmaz; bunlar `phase-0-data-mapping.md` içindeki production audit sorguları ve checklist istisnalarıyla takip edilir.
Bu belge `neta-self-hosted-v3-master-plan.md` için Faz 0 kanıtıdır. Önceki 2026-07-10 baseline'ı; Better Auth, SQLite runtime, Docker ve yeni shell eklenmeden önceki durumu anlattığı için bu içerikle güncellenmiştir.
## Kanıt komutları
## 1. İnceleme kapsamı
Bu baseline aşağıdaki local komutlarla oluşturuldu:
rg-n'create table if not exists public\.|create table if not exists neta_internal\.|alter table public\..*enable row level security|create policy|create or replace function|create index if not exists|create trigger|insert into storage\.buckets'supabase\migrationssupabase\schema.sql
Alt feature sayfaları ve action'lar ise Supabase `auth.getUser()` kullanıyor. Better Auth cookie'si Supabase session üretmediği için güncel dal uçtan uca çalışan tek auth sistemi sunmuyor.
Beklenen mevcut sonuç:
- Better Auth ile giriş yapan freelancer layout guard'ını geçebilir.
- Aynı kullanıcı Supabase tabanlı page/action içinde oturumsuz görünür.
- Feature reads/mutations boş sonuç, redirect, `null` veya auth hatası verebilir.
- Better Auth client profile oluşturacak invitation consume akışı henüz yoktur.
- Eski `/api/create-client-user` route'u Supabase Auth user üretir ve yeni portal layout'ının beklediği SQLite profile'ı üretmez.
Bu durum redesign sırasında korunacak davranış değil, ortadan kaldırılması gereken geçiş kırığıdır.
-`tailwindcss-animate`: animasyon stratejisine göre değerlendirilecek.
-`uuid` ve `@types/uuid`: Web Crypto UUID yeterliyse kaldırılacak.
## Davranış baseline matrisi
Bu davranışlar yeni sistemde korunacak veya bilinçli olarak iyileştirilecek:
| Akış | Mevcut davranış | Redesign notu |
| Route | Güncel durum | İlk release kararı |
| --- | --- | --- |
| İlk admin setup | `/register`, `is_first_admin_setup_available`, signup sonrası profile role `freelancer` | Better Auth setup route'u public registration'ı ilk kullanıcıdan sonra kapatacak |
| Login/logout | Supabase `signInWithPassword`, `signOut`, middleware session refresh | Better Auth DB session ve server-side session helper |
| Client portal hesabı | Freelancer route handler üzerinden client auth user yaratıyor | Invite token ve client self-activation tercih edilecek |
-`app/(dashboard)/journal/page.tsx` 180 kayıt limiti kullanıyor.
-`app/(dashboard)/page.tsx` recent projects/clients için 5 kayıt limiti kullanıyor.
- Calendar visible range filtresi yerine current implementation daha geniş veri çekme riski taşıyor; Faz 4'te görünür aralık zorunlu olacak.
Ölçülmemiş production baseline:
- Gerçek TTFB, payload boyutu, route client JS boyutu ve click-to-feedback metrikleri production veya seeded local environment ayağa kaldırılmadan tamamlanmış sayılmaz.
- Bu metrikler Faz 1 spike container'ı ve import rehearsal sonrası tekrar ölçülecek.
## Local doğrulama sonuçları
2026-07-10 local workspace sonuçları:
| Komut | Sonuç | Not |
| Route | Güncel yetenek | Bilinen sınır |
| --- | --- | --- |
| `npm.cmd run lint` | Başarısız | 34 error, 25 warning. Mevcut baseline: `any`, React `setState-in-effect`, unused import, unescaped entities, `<img>` warnings. Faz 0 doküman değişiklikleri app code değiştirmedi. |
| `.\node_modules\.bin\tsc.cmd --noEmit` | Başarılı | TypeScript typecheck temiz. |
| `npm.cmd run build` | Başarılı | Next.js 16.2.7 Turbopack production build geçti. Edge runtime static generation warning'i mevcut build uyarısı olarak görüldü. |
| `/portal` | Proje KPI ve proje kartları | Hybrid auth nedeniyle veri session'ı kırık |
| `/portal/projects` | Client'a bağlı projeler | Supabase RLS'e bağlı |
| Portal project | RLS ile client project read | Actor/client/project explicit ilişki kontrolü |
| Portal revision | UI quota uyarısı, zayıf insert policy | Kota ve ilişki aynı transaction içinde |
| AI chat | Kullanıcı verisi cloud provider'a gönderiliyor | Açık gizlilik bildirimi ve server-only secret |
- Production Supabase backup alma ve restore doğrulama.
- Production tablo/status dağılımlarını sayma.
- Storage bucket dosya sayısı, toplam boyut ve orphan path raporu.
- Gerçek kullanıcı akışı ekran kayıtları.
- Gerçek route timing, payload ve bundle ölçümleri.
- Ürün sahibi onayı gereken ADR ve kritik akış matrisi.
Bu tablo Faz 0 kritik davranış kaydıdır. Canlı ekran kaydı mevcut hibrit auth nedeniyle güvenilir parity kanıtı sayılmayacaktır; vertical slice kabulünde yeni ekran kayıtları alınacaktır.
## 7. Supabase kaynak envanteri
`supabase/setup.sql` üzerinden doğrulanan kaynak tablolar:
`supabase/seed.sql` legacy fixture; 1 profile, 1 settings, 2 project, 3 task, 3 finance ve 3 daily log içerir. Bu seed'de `completed` task status'ü ve `daily_logs.notes` alanı gibi güncel schema ile uyumsuz legacy değerler vardır; hedef seed olarak kullanılmayacaktır.
### 7.2. Production veri sayımı durumu
Workspace'te yalnızca `.env.example` vardır; read-only production Supabase bağlantısı veya export snapshot'ı bulunmamaktadır. Bu nedenle gerçek production satır sayıları, status dağılımları, bucket dosya sayıları/boyutları ve orphan path raporu ölçülmemiştir.
Çalıştırılacak sorgular `phase-0-data-mapping.md` içinde hazırdır. Bu veri gelmeden ana plandaki “Supabase tablo ve storage veri sayıları çıkarıldı” maddesi işaretlenmez.
## 8. Mevcut SQLite envanteri
Mevcut tablolar:
```text
user
session
account
verification
app_profiles
app_setup_state
portal_invitations
auth_audit_events
runtime_checks
runtime_events
```
Henüz domain tablosu yoktur. `portal_invitations` yalnızca schema düzeyindedir; davet oluşturma/kabul/revoke service ve route akışı uygulanmamıştır.
## 9. Supabase kod bağımlılığı baseline'ı
- 40 app/lib/server dosyası Supabase entegrasyonu veya helper'ı içeriyor.
Poyraz v3 migration sırasında local primitive dosyaları hemen topluca silinmeyecek. Her kullanım taşındıktan ve import boundary doğrulandıktan sonra duplicate dosya/dependency kaldırılacak.
## 11. Dependency baseline'ı
Doğrudan production dependency sayısı 47'dir.
Statik import taramasında aktif kullanımı bulunmayan adaylar:
-`@base-ui/react`
-`dexie-react-hooks`
-`shadcn`
-`uuid`
Çok sınırlı kullanım:
-`@iconify/react`: 1 dosya
-`framer-motion`: 1 dosya
-`next-themes`: 1 dosya
Geçiş sonrasında kaldırılacak ana gruplar:
- Supabase SDK'ları
- PWA ve Dexie
- Poyraz v3'ün gereksiz kıldığı direct Radix/Base UI/shadcn bağımlılıkları
- Aktif importu olmayan yardımcı paketler
Kanban için DnD Kit, grafikler için Recharts ve kullanılan AI provider paketleri işlevsel gerekçeyle korunabilir.
Gerçek TTFB, route payload ve client JS ölçümü mevcut hibrit auth ve eksik local feature schema nedeniyle güvenilir değildir; ilgili vertical slice tamamlandığında yeniden ölçülecektir.
## 14. 2026-07-16 local doğrulama sonuçları
Ortam:
```text
Node: v24.16.0
pnpm: 11.5.1
Platform: macOS arm64
```
| Komut | Sonuç | Kanıt/not |
| --- | --- | --- |
| `npm run typecheck` | Başarılı | TypeScript hata vermedi |
| `npm run phase3:ui-boundary` | Başarılı | Tarihsel internal UI boundary script'i geçti |
| `npm run lint` | Başarısız | 32 error, 22 warning; `any`, `set-state-in-effect`, unused import, unescaped entity ve image uyarıları |
| `npm run phase1:smoke` | Başarısız | `better-sqlite3` native binding yok |
| `npm run phase2:smoke` | Çalışmadı | Faz 1 zinciri başarısız olduğu için başlanmadı; aynı native runtime'a bağlı |
| `npm run build` | Başarısız | Compile ve TypeScript geçti; page data aşamasında default `/app/data` oluşturulamadı |
| Temp `DATA_DIR` ile build | Başarısız | `/app/data` sorunu izole edildi; sonra eksik `better-sqlite3` binding'inde durdu |
-`pnpm-workspace.yaml` içindeki `allowBuilds` değerleri henüz boolean olarak kilitlenmemiş.
- Native binding düzeltilmeden SQLite smoke ve production build yeşil kabul edilemez.
- Build sırasında production varsayılanının `/app/data` olması builder aşamasında güvenli build-time path gereksinimi doğuruyor; Faz 1 hardening maddesidir.
## 15. Faz 0 tamamlanma durumu
Tamamlanan:
- Ürün kapsam kararları ADR ile kilitlendi.
- Güncel route ve özellik envanteri çıkarıldı.
- Kritik kullanıcı akışları kod davranışı ve hedef sözleşmeyle kaydedildi.
- Supabase kaynak schema, bucket, RPC ve fixture envanteri çıkarıldı.
- Source-to-target data mapping onaylandı.
- Poyraz UI v3 kararı ADR-0006 olarak güncellendi.
- Local typecheck/lint/build/smoke baseline'ı kaydedildi.
Açık dış veri:
- Production Supabase gerçek satır sayıları
- Production status dağılımları
- Storage bucket dosya sayısı ve toplam boyut
- Storage orphan path raporu
Bu dış veri kalemleri için hazır audit sorguları vardır; read-only export veya erişim sağlandığında Faz 0'ın son açık checklist maddesi kapatılacaktır.
description:Supabase kaynak modelinden SQLite/Next.js hedef modeline ilk mapping ve production audit sorguları.
description:Supabase kaynak modelinden SQLite/Next.js hedef modeline onaylı mapping ve production audit sorguları.
status:active
last_updated:2026-07-10
last_updated:2026-07-16
---
# Phase 0 Data Mapping
Bu dosya Faz 0 için source-to-target veri mapping taslağıdır. Production verisine bağlanmadan status dağılımı ve gerçek satır sayısı tamamlanamaz; bu nedenle her production-only madde audit sorgularıyla birlikte bırakılmıştır.
Bu dosya Faz 0 için onaylı source-to-target veri mapping'idir. Production verisine bağlanmadan status dağılımı ve gerçek satır sayısı tamamlanamaz; bu nedenle her production-only madde audit sorgularıyla birlikte bırakılmıştır. Alan düzeyi nihai Drizzle schema Faz 2'de üretilecek, ancak tablo kaderi ve normalization kuralları bu belgeyle kilitlenmiştir.
## Kanonik veri standartları
@@ -24,8 +24,8 @@ Bu dosya Faz 0 için source-to-target veri mapping taslağıdır. Production ver
| Supabase kaynak | Mevcut amaç | Hedef model | Karar |
| --- | --- | --- | --- |
| `auth.users` | Supabase auth principal, freelancer/client user | Better Auth user/session/account tabloları | Password/session taşınmayacak; reset veya yeniden davet |
| `profiles` | Ad, avatar, role | `profiles` veya Better Auth user extension | `role: freelancer|client` korunur |
| `clients` | CRM client ve portal auth link | `clients` | `client_auth_id` nullable relation olarak korunur |
| `profiles` | Ad, avatar, role | `app_profiles` | `role: freelancer|client` korunur; tek owner setup guard ile sağlanır |
| `clients` | CRM client ve portal auth link | `clients` | `auth_user_id` nullable; invitation kabulünde transaction ile kurulur |
Bu sorgular Supabase SQL Editor veya read-only connection ile çalıştırılmalı. Secret değerleri loglanmamalı.
2026-07-16 durumu: workspace'te yalnızca `.env.example` bulunduğu için bu sorgular production üzerinde çalıştırılmamıştır. Kaynak schema envanteri 19 ürün/public tablo, 1 internal tablo ve 2 storage bucket olarak doğrulanmıştır; gerçek satır/dosya sayıları açık kalmıştır.
title:Phase 0 Regression and Phase 1 Spike Criteria
description:Mevcut hatalardan türetilen regression testleri ve Faz 1 runtime spike kabul kriterleri.
status:active
last_updated:2026-07-10
last_updated:2026-07-16
---
# Phase 0 Regression and Phase 1 Spike Criteria
@@ -23,10 +23,14 @@ Bu maddeler davranış paritesi değildir; redesign içinde düzeltilmesi zorunl
| REG-008 | Limitsiz listeler payload büyütüyor | Projects/tasks/clients/calendar list query contract incelenir | Pagination veya visible date range zorunlu |
| REG-009 | Auto progress transaction dışı kalabilir | Task status değişimi auto progress project'te yapılır | Task update ve project progress aynı transaction sonucu |
| REG-010 | Cross-owner UUID erişimi | Başka owner'a ait project/task/client UUID ile query/mutation yapılır | 404 veya authorization error; veri dönmez |
| REG-011 | Production build `/app/data` oluşturmaya çalışıyor | Env verilmeden ve kontrollü build env ile standalone build alınır | Build host root'una yazmaz; runtime data dir yalnızca runtime'da hazırlanır |
| REG-013 | Better Auth layout + Supabase feature session ayrışması | Better Auth ile login sonrası core feature read/mutation çalıştırılır | Tek session principal kullanılır; Supabase session gerekmiyor |
| REG-014 | Eksik link hedefleri | Login forgot-password ve portal settings linkleri izlenir | Her görünür link gerçek route veya bilinçli disabled state'e gider |
## Behavior smoke matrix
## Kritik davranış baseline matrisi
Faz 0 sırasında ekran kaydı alınması gereken kritik akışlar:
Faz 0'da mevcut kod davranışı `phase-0-baseline.md` içinde kaydedilmiştir. Hibrit auth nedeniyle eski ekranın canlı çalışması yeni sistem için güvenilir parity kanıtı değildir. Aşağıdaki akışların yeni vertical slice kabulünde ekran kaydı veya tekrarlanabilir browser smoke çıktısı alınacaktır:
| Akış | Kayıt adı önerisi | Kapsam |
| --- | --- | --- |
@@ -78,4 +82,3 @@ Rollback:
- Faz 1 spike production'a deploy edilmez.
- Eski Supabase app untouched kalır.
- Spike branch silinebilir veya ADR yeniden açılır.
> Tarihsel not: Bu belgede uygulanan internal UI yönü 2026-07-16 tarihli ADR-0006 ile supersede edilmiştir. İleriye dönük hedef Poyraz UI v3'ü tek genel UI sistemi olarak kullanmaktır. Buradaki internal primitive ve shell'ler geçiş/baseline kodu olarak değerlendirilmelidir.
## Kapsam
Bu fazda Poyraz UI tamamen package seviyesinde kaldırılmadı. Mevcut feature sayfaları hâlâ Poyraz component import ediyor ve Faz 4-6 sırasında veri/UI birlikte taşınacak. Faz 3 uygulaması yeni internal primitive setini, auth shell'i ve dashboard/portal shell'i Poyraz import sınırından ayırır.
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.