Semih b180980e49 feat(billing-actions): expired/cancelled kullanıcıya "Yeni abonelik başlat" butonu
Expired abonelikte panel "bu durum için aksiyon yok" diyordu; manuel paket
tanımları DB'den yapılıyordu. Artık expired/cancelled/aboneliksiz kullanıcıda
plan + dönem (aylık/yıllık) + süre (dönem default'u / 30g / 1 yıl / 3 yıl /
özel gün) + marka-limitli planda marka seçimi ile yeni active abonelik
açılıyor.

- admin-sdk: hiç implement edilmemiş setSubscription (PATCH) yerine
  startSubscription → POST /internal/admin/users/:id/subscriptions
  (Sase PR #266 ile gelir; merge edilene kadar spoke 404 döner).
- POST /api/sase/users/[id]/subscriptions route + audit kaydı.
- BillingActions artık subscription'sız kullanıcıda da render ediliyor.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ww3tfpuxBcettz81dDvyYt
2026-09-19 00:47:00 +03:00
2026-05-13 09:30:27 +00:00

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
Süper Panel - internal admin panel (sp.semih.ai)
Readme 4.1 MiB
Languages
TypeScript 99.2%
CSS 0.4%
Shell 0.2%
Dockerfile 0.2%