Files
GMW/services/frontend
asepharyana 2b815e156c feat(frontend): rebuild chatbot UI to match backend — wider panel, guild context, Indonesian
- Chatbot bubble: 220px → 320px wide, 440px tall; proper header with
  drag handle; quick-prompt row when chat is closed
- ChatPanel: show ALL history (not last 8), Indonesian placeholder/empty
  state/error copy (backend speaks Indonesian), timestamps (id-ID),
  clear-history button, typing indicator bubbles, Enter-to-send
- Send active guildId as context so backend answers reference the real
  server (serverInsights path in chatbot.service)
- GuildId sync from layout → ChatbotProvider via ChatbotGuildSync
- chatbotApi.send(message, guildId) → POST /api/chat {message, context}
  matching BE zod schema (guildId optional)
2026-08-03 06:04:25 +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.