39c26bd4d464466c322d948b94bb92e48a10a7de
A user-list-style table at /projects/sase/vin-decode/vins for inspecting
and managing decoded VINs. Pairs with sase.tr#34 (cache-clear + delete
endpoints).
Repo (lib/sase/vin-list.ts)
- listVinDecodes(filter, sort, page) — raw SQL with dynamic WHERE for
search (VIN/email), provider IN, success boolean, brand IDs, date
range. Joins users + brands, computes EXISTS(vehicles) per row so the
action menu knows whether DB delete is meaningful.
- KNOWN_PROVIDERS export.
Admin SDK
- clearVinCache({ vin, reason, founderId }) — POST cache-clear
- deleteVehicleByVin({ vin, reason, founderId }) — DELETE vehicle
- Result types: VinCacheClearResult, VinDeleteResult.
- SASE_ADMIN_ENDPOINTS list updated.
Panel routes
- POST /api/sase/vins/[vin]/cache-clear — auth + spoke-wired + reason
≥ 5 chars. Audit on both paths.
- DELETE /api/sase/vins/[vin] — same shape.
UI (/projects/sase/vin-decode/vins)
- URL-driven filters (VIN/email search, provider multi-select pills,
success/fail toggle) — sharable links.
- Sortable columns: Tarih (createdAt) and RT (responseTimeMs).
- Per-row cells: timestamp · VIN (mono) · brand slug+name · user email
(link to user detail) · provider badge (link to provider drill-down)
· ok/fail badge (fail title = errorMessage) · responseTimeMs ·
cacheSource from timings jsonb · action menu.
- Per-row action menu (gated on saseAdminWired):
[Cache] — opens reason modal, POSTs cache-clear
[DB] — only when vehicles row exists; opens reason modal,
destructive variant, DELETE
- Pager with prefix/postfix range + ←/→ links preserving filters.
Dashboard header gets a "VIN list →" pill next to Business/Trends.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Süper Panel
Internal admin panel — sp.semih.ai — Tailscale-only access.
Phase 0 skeleton: Next.js 16 + Better Auth (email/password + TOTP) + Prisma + Postgres + Redis. Deployed on Coolify, fronted by Traefik with Let's Encrypt (Cloudflare DNS-01).
See super-panel-prd.md for the full PRD.
Local dev
pnpm install
cp .env.example .env
# fill DATABASE_URL_PANEL, BETTER_AUTH_SECRET (32+ chars)
pnpm --filter @panel/web prisma:generate
pnpm dev
Production deploy
Pushes to main trigger Coolify deploy via webhook.
Deploy status
First production deploy: 2026-05-13. Live at https://sp.semih.ai (Tailscale only).
Description
Languages
TypeScript
99.2%
CSS
0.4%
Shell
0.2%
Dockerfile
0.2%