Inspiration

Most Discord servers end up running five or six separate bots: one for tickets, one for economy, one for music, one for leveling, one for moderation. Each has its own dashboard, its own permissions and its own bugs. I wanted one bot that does all of it, configured from one place, with the quality of a paid product.

What it does

Flamey is an all-in-one Discord bot. It runs in 171 servers with 260k+ users.

  • Tickets: thread-based and forum-based tickets, claim mechanics, transcripts, and AI triage that sorts incoming tickets.
  • Economy and games: a full server economy with games.
  • Music: playback through Lavalink.
  • Leveling: XP and levels, with an importer for moving data over from other bots.
  • Giveaways: templates, modal-based setup, and duplicate-entry protection.
  • AutoMod: rules that create real Discord AutoMod rules. A trigger punishes the user and opens a case, the same as a manual moderation action.
  • Welcomer: visual welcome cards.
  • Web dashboard: every module is configurable from dashboard.flamey.lol, and changes apply to the bot in real time.

How I built it

I wrote everything in Discord.js v14 with no framework on top, so I control the whole command lifecycle. I built it solo, using AI coding tools heavily along the way.

  • Bot: Node.js, managed with PM2.
  • Command layer: a custom CommandGuard handles per-subcommand permissions and cooldowns. A custom schema builder defines subcommands.
  • Database: PostgreSQL with a fully relational schema of 164 tables. I use typed columns and normalized tables everywhere and avoid JSONB.
  • Dashboard: React + Vite on the frontend and an Express API on the backend.
  • Real-time sync: the bot and dashboard stay in sync through PostgreSQL pg_notify / LISTEN, so a setting changed in the dashboard takes effect immediately without polling.
  • AI: a Groq-hosted model (gpt-oss-120b) powers ticket triage and the dashboard assistant.
  • Infra: Nginx, Certbot SSL, Cloudflare (R2 for image storage, email routing), and Paddle and Cryptomus for payments.

Challenges I ran into

  • Keeping 164 tables clean. Resisting JSONB was slower up front, but queries, migrations and dashboard forms are far easier to reason about now.
  • AutoMod and Discord state drifting apart. Rules weren't created in Discord unless an action was selected, and disabling a config in the dashboard didn't delete the Discord rule. I had to treat Discord as a second source of truth and reconcile both directions.
  • Bot and dashboard consistency. Two processes editing the same config needed a reliable sync path, which is why I went with pg_notify.
  • Datacenter IP blocking in music. YouTube bot-detection broke artist avatar fetching, so I moved that to the YouTube Data API v3.
  • Discord's newer features. Components v2, guild tags, Linked Roles and user-installable apps all changed how interactions are built.
  • Building solo. Design, backend, frontend, infrastructure and support were all on me.

Accomplishments that I'm proud of

  • Reaching 171 servers and 260k+ users as a solo developer.
  • A dashboard that edits live bot behavior in real time.
  • A production-grade moderation and ticket system, not a demo.
  • A clean relational schema at the scale of 164 tables.
  • A custom permissions and cooldown layer that every command shares.

What I learned

  • Design the schema first. Everything downstream gets easier when the data model is honest.
  • A permissions and cooldown layer built once, centrally, saves you from repeating checks in every command.
  • Real-time sync is more about picking one source of truth than about the transport.
  • Stability beats new features once real servers depend on you.

What's next for Flamey

  • Finishing the welcomer module and its card designs.
  • Moving the landing page to Next.js for better SEO and Discord link previews.
  • The mascot-led brand and launch video.
  • More dashboard-configurable modules and further AI features.
  • Continued focus on stability, plus the Discord privileged intent verification.

Double-check the numbers and drop any module that isn't live before you submit.

Built With

Share this project:

Updates