This is a submission for the GitHub Finish-Up-A-Thon Challenge
What I Built
I built the Closiq Discord Agent, a full-stack modular monolith engineered to transform a Discord channel into an automated, AI-driven customer support inbox and lead management system.
When a customer messages your Discord support channel, the backend captures the conversation, handles data persistence, and fetches highly relevant context from a self-hosted Qdrant vector database (which indexes knowledge base documents stored in MinIO). It then leverages OpenRouter or OpenAI-compatible models to dynamically draft and deliver accurate, context-aware responses right back to the customer via a Discord bot.
Demo
- GitHub Repository: ErOr-0/closiq-discord-bot
-
Local Web Dashboard:
http://localhost:5173
(Tip: Insert a GIF or a couple of screenshots here showing off your React dashboard interface, your MongoDB message log view, or the Discord bot replying live in a channel!)
Tech Stack At A Glance
- Frontend: React + Vite
- Backend: Node.js + Express + TypeScript
- Databases & Storage: MongoDB (Metadata), Qdrant (Vector Embeddings), and MinIO (Object Storage)
- Integrations:
discord.js& OpenRouter / OpenAI SDK
The Comeback Story
This project started as an ambitious idea but quickly stalled out. Before dusting it off for this challenge, it was just a loose collection of database models, basic tools, and a primitive, unoptimized LangChain loop sitting in a graveyard of unfinished local folders. It completely lacked a front-end management layer, and the architecture was fragile.
To bring this project to life and cross the finish line, I focused heavily on stability, user experience, and structural boundaries:
-
Modular Monolith Refactoring: Reorganized the entire Express backend into strict, clean module boundaries (
messages,knowledgebase,agent,infrastructure) to make the codebase highly maintainable. - Built the Web Dashboard: Created a comprehensive React interface from scratch so users can visually monitor incoming customer messages and manage knowledge base files without touching terminal commands.
- Fixed Edge Cases & UI: Fixed broken message handling logic loops in the AI generation workflow and completely updated the Channel Message UI components for smoother interactions.
- Cascading Deletion Sync: Implemented robust file lifecycle management. Now, deleting a knowledge document triggers a clean, sequential purge across the entire stack: removing the object from MinIO, unindexing the vector from Qdrant, and dropping the metadata from MongoDB.
My Experience with GitHub Copilot
GitHub Copilot acted as an invaluable pair-programmer during this sprint, especially when it came to tying multiple disjointed storage microservices together.
-
Docker Scaffold Speed: Copilot instantly generated the local environment infrastructure configurations inside the
docker-compose.yml, getting MongoDB, Qdrant, and MinIO talking to each other effortlessly. - Handling Streams and Upload Boilerplate: Writing multipart file upload endpoints that simultaneously stream files to MinIO and pass text data to vector embeddings involves writing a lot of repetitive error-handling code. Copilot predicted the stream-piping logic accurately, saving me hours of debugging.
-
Maintaining Architecture Boundaries: Because Copilot quickly grasped the modular monolith layout, it suggested accurate imports across different domain workspaces (like pulling from
shared/errorsorconfig/logging) without muddying up the structural boundaries I put in place.
Top comments (0)