Tech stack for a Discord bot (2026)
Discord community bot with a dashboard, designed by StackPrism from one sentence: 9 components, a reason for each, and the live checks that watch them.
The stack
Next.js
Node.js
- Twitch
- Inngest
- Discord
Supabase
Sentry
“A Discord bot for gaming communities: it runs giveaways, tracks member XP and levels, posts alerts when streamers go live on Twitch, and server admins configure it in a web dashboard.”
Their answers on the constraints step
- Budget
- Up to ~$50/month
Make it yours. Open this stack in the editor to check its health, harden it and hand it to your coding agent. No sign-up, nothing to generate.
Start from this stackSelect a component to see what it does and what it connects to, or pick one above to see what breaks if it goes down. Pinch or use the buttons to zoom.
Why this stack
The bot is an always-on Discord.js process, because a bot that reacts to messages needs a live connection to Discord, and it posts giveaways, level-ups and stream alerts. Server admins sign in with Discord OAuth and change settings in a Next.js dashboard on Vercel, which saves them through a Node.js API to Supabase PostgreSQL, where the bot reads them. The API takes in Twitch events for streamers going live, and Inngest runs scheduled work, such as ending giveaways, then triggers the bot to post. Sentry reports dashboard errors.
Why each piece
All 9 components on the diagram: what each one does, what it talks to, and what stops if it goes down.
Next.js Dashboard
Runs on Vercel
Admin web dashboard. Calls Node.js API and Discord OAuth (signs in). Called by Sentry (tracks).
Nothing else on the diagram depends on it.
Node.js API
Runs on Vercel
Control plane API. Calls Supabase PostgreSQL (writes), Twitch (ingests) and Inngest (schedules). Called by Next.js Dashboard.
If it goes down, 1 of 8 components stops working.
Discord.js Bot
Always-on bot process. Calls Supabase PostgreSQL (reads) and Discord (posts). Called by Inngest (triggers).
If it goes down, 1 of 8 components degrades.
Twitch
In External Services
Streamer platform. Called by Node.js API (ingests).
If it goes down, 1 of 8 components degrades.
Discord OAuth
In External Services
Admin login. Called by Next.js Dashboard (signs in).
If it goes down, 1 of 8 components stops working.
Inngest
In External Services
Job orchestration. Calls Supabase PostgreSQL (updates) and Discord.js Bot (triggers). Called by Node.js API (schedules).
If it goes down, 1 of 8 components degrades.
Discord
In External Services
Chat platform. Called by Discord.js Bot (posts).
If it goes down, 1 of 8 components degrades.
Supabase PostgreSQL
Managed Postgres. Called by Node.js API (writes), Discord.js Bot (reads) and Inngest (updates).
If it goes down, 4 of 8 components stop working.
Sentry
Error tracking. Calls Next.js Dashboard (tracks).
If it goes down, 1 of 8 components degrades.
When this stack fits
- The bot reacts to messages and reactions as they happen.
- Admins configure it in a web dashboard, not only with slash commands.
- A small budget: one small always-on process plus managed services.
When to pick something else
- The bot only answers slash commands: Discord can send interactions to an HTTP endpoint, so a serverless function can replace the always-on process.
- The bot will join thousands of servers: plan for sharding, which Discord requires for large bots.
What you need to build this
9 components across 6 areas of the stack.
Build it with your AI agent
Hand the stack to Claude Code, Codex, Cursor or any coding agent as a brief: how it connects, install steps and a build plan.
Frontend1
- Docs
Next.js Dashboard
Admin web dashboard
npm install next
Backend & APIs4
- Docs
Node.js API
Control plane API
Discord
Chat platform
Twitch
Streamer platform
Discord.js Bot
Always-on bot process
Data1
- Docs
Supabase PostgreSQL
Managed Postgres
npm install @supabase/supabase-js
Cache & queues1
Inngest
Job orchestration
Auth1
Discord OAuth
Admin login
Observability1
- Docs
Sentry
Error tracking
npm install @sentry/nextjs
Install
npm install next @supabase/supabase-js @sentry/nextjs
SDKs only. Pick your own database driver or ORM.