Files
GMW/services/frontend
asepharyanaandClaude Opus 4.5 2fa1827f17 feat(backend,frontend): migrate data APIs from REST to native tRPC over WebSocket
Replace REST module routers with a single typed tRPC appRouter served over
/trpc (HTTP + WebSocket), and rewire the frontend to call it via
@trpc/client wsLink (browser) and httpLink (RSC data layer). Existing
/api/health + /api/metrics stay as plain Express for infra scraping.

Notable fixes surfaced by the live smoke test:
- Express 5 / path-to-regexp v8 rejects the /trpc/* wildcard route; use a
  prefix middleware that computes opts.path from the URL instead.
- nodeHTTPRequestHandler treats opts.path as the literal procedure path, so
  it is derived per-request from req.url.
- Two ws servers on one http.Server (the /ws voice socket + /trpc) collided
  and returned 400 on upgrade; both now use noServer + a manually routed
  server.on('upgrade') keyed by path.

Verified: BE tsc+biome+40 vitest green; FE tsc+biome green; live
HTTP and WebSocket calls returned real prod data.

Co-Authored-By: Claude Opus 4.5 (1M context) <noreply@anthropic.com>
2026-08-16 13:25:10 +07:00
..
2026-08-02 16:46:22 +07:00

Bete Frontend

Next.js 16 (React 19) dashboard untuk Discord Moderation Watcher.

Stack: Next.js 16 (App Router, static export), React 19, TypeScript strict, Tailwind v4, shadcn/ui, base-ui, lucide-react.

Dev

bun run dev        # next dev — port 3000 (lokal; prod via nginx 4009)
bun run build      # next build — static export ke out/
bun run lint       # Biome check

Architecture

src/
├── app/                  # Pages
│   ├── page.tsx          # Redirect ke /dashboard
│   └── dashboard/        # Dashboard layout + tabs
│       ├── layout.tsx    # Sidebar, header, WS provider, chatbot
│       └── page.tsx      # Tab routing (messages/live/dashboard)
├── features/
│   ├── messages/         # Message feed, search, review, detail modal
│   ├── live/             # Voice connection, music player, recordings
│   ├── dashboard/        # Stats, users, channels overview
│   └── chatbot/          # AI chatbot
├── lib/
│   ├── api/              # Fetch-based API client (all BE endpoints)
│   ├── ws/               # WebSocket client + React context
│   └── hooks/            # Shared hooks (config, auth)
└── components/
    └── layout/           # Sidebar, header, mobile tab bar

API

Backend berjalan di port 4001. Frontend mengakses API via window.location (same-origin atau proxy).

WebSocket terhubung otomatis ke /ws di host yang sama.