091e9daa2ff014cd73d106038a733acc7476c93c
For string filter values (q, success, sort, etc.), the URL query string came out empty — array values (provider, status with multi-select) worked. Root cause was a brace-less if/for/if chain: if (Array.isArray(v)) for (const item of v) if (item) usp.append(k, item); else usp.set(k, String(v)); JS associates the `else` with the inner `if (item)`, not the outer `if (Array.isArray(v))`. So when v is a string, the outer if is false, nothing runs, usp stays empty, and the URL becomes just "?". The status pills and the "Ara" search button both looked broken because their patches were string-typed. Same buildHref in users/_query.ts already had braces, which is why the user list search was unaffected. Add the missing braces. Also drops the temporary console.log diagnostics from the VIN filter bar. 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%