2026-07-26 11:38:53 +07:00
|
|
|
# Bete Frontend
|
2026-07-26 11:27:21 +07:00
|
|
|
|
2026-07-26 11:38:53 +07:00
|
|
|
Next.js 16 (React 19) dashboard untuk Discord Moderation Watcher.
|
2026-07-26 11:27:21 +07:00
|
|
|
|
2026-07-26 11:38:53 +07:00
|
|
|
**Stack:** Next.js 16 (App Router, static export), React 19, TypeScript strict, Tailwind v4, shadcn/ui, base-ui, lucide-react.
|
|
|
|
|
|
|
|
|
|
## Dev
|
2026-07-26 11:27:21 +07:00
|
|
|
|
|
|
|
|
```bash
|
2026-08-02 16:46:22 +07:00
|
|
|
bun run dev # next dev — port 3000 (lokal; prod via nginx 4009)
|
2026-07-26 11:38:53 +07:00
|
|
|
bun run build # next build — static export ke out/
|
|
|
|
|
bun run lint # Biome check
|
2026-07-26 11:27:21 +07:00
|
|
|
```
|
|
|
|
|
|
2026-07-26 11:38:53 +07:00
|
|
|
## Architecture
|
2026-07-26 11:27:21 +07:00
|
|
|
|
2026-07-26 11:38:53 +07:00
|
|
|
```
|
|
|
|
|
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
|
2026-07-28 15:00:29 +07:00
|
|
|
│ └── chatbot/ # AI chatbot
|
2026-07-26 11:38:53 +07:00
|
|
|
├── 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
|
|
|
|
|
```
|
2026-07-26 11:27:21 +07:00
|
|
|
|
2026-07-26 11:38:53 +07:00
|
|
|
## API
|
2026-07-26 11:27:21 +07:00
|
|
|
|
2026-08-02 16:20:27 +07:00
|
|
|
Backend berjalan di port 4001. Frontend mengakses API via `window.location` (same-origin atau proxy).
|
2026-07-26 11:27:21 +07:00
|
|
|
|
2026-07-26 11:38:53 +07:00
|
|
|
WebSocket terhubung otomatis ke `/ws` di host yang sama.
|