Task Workspace — quản lý task ngay trong Discord

Tớ xây dựng một tool quản lý task sync 2 chiều với Discord và Telegram. Đây là lý do và cách nó hoạt động.

Mọi team nhỏ đều bắt đầu quản lý công việc trên Discord hoặc Telegram. Nhanh, tiện, ai cũng dùng. Nhưng sau vài tuần, tin nhắn trôi, task thất lạc, không ai nhớ deadline.

Giải pháp thường thấy là chuyển sang Jira, Trello, hay Linear. Nhưng vấn đề là — team vẫn chat trên Discord. Giờ phải nhảy qua nhảy lại giữa 2 app. Adoption rate gần như zero.

Ý tưởng

Thay vì bắt team rời Discord, tớ mang task management vào Discord.

Task Workspace sync 2 chiều real-time — tạo task trên web, nó xuất hiện trên Discord channel dưới dạng rich embed. Reply trên Discord, nó tự map thành comment trên web. Gõ /done TASK-42, task tự cập nhật cả hai nơi. Zero friction.

Cách hoạt động

  1. Tạo Workspace cho team, mời members qua email — system tự generate invite link với role assignment
  2. Kết nối Discord bot hoặc Telegram bot — OAuth flow, channel binding, permission sync
  3. Dùng slash commands — /create, /list, /done, /assign — full CRUD từ chat
  4. Dashboard web cho bird’s-eye view — Kanban, filters, analytics. Mọi thay đổi sync instant.

Behind the scenes

  • Bi-directional sync engine — event-driven architecture, mỗi action trên web emit event → Discord/Telegram adapter transform và push. Ngược lại, mỗi bot command parse → validate → execute → emit ngược về web via WebSocket
  • Loop prevention — bài toán kinh điển của 2-way sync. Mỗi message carry externalProvider flag. Adapter check flag trước khi forward — nếu message originated từ chính nó thì skip. Simple nhưng bulletproof.
  • Atomic auto-numbering — mỗi workspace có counter riêng trên Redis. INCR workspace:{id}:counter trả về number mới trong O(1), thread-safe, zero collision. Task ID format: TASK-1, TASK-2
  • Custom status machine — mỗi workspace define flow riêng. Default: TODO → IN_PROGRESS → TESTING → DONE. Nhưng team có thể thêm/xóa/reorder status tùy workflow.
  • Presigned upload — file không đi qua server. Client request presigned URL từ Cloudflare R2 → upload trực tiếp từ browser → save reference. Server không bao giờ touch file content, tiết kiệm bandwidth và latency.

Tech stack deep dive

Frontend monolith: Next.js 16 với App Router + React 19 concurrent features. UI layer dựng trên Radix UI primitives, wrapped bằng shadcn/ui cho consistency. Form management bằng React Hook Form + Zod schema validation — type-safe từ form đến API call.

Backend DDD: Express.js structured theo Domain-Driven Design — mỗi domain (Task, Workspace, Comment, Integration) là một module độc lập với Controller → Service → Repository pattern. TSOA auto-generate OpenAPI specs từ TypeScript decorators — API docs luôn sync với code.

Data layer: PostgreSQL 16 cho relational data (tasks, users, workspaces) với Prisma ORM type-safe queries. Redis 7 cho caching, rate limiting, pub/sub events, và atomic counters. Cloudflare R2 cho file storage — S3-compatible nhưng zero egress fee.

Auth pipeline: JWT access token (15 min) + refresh token rotation. Firebase Admin SDK handle Google OAuth flow. Email OTP verification cho registration. Stateless auth — horizontally scalable.

Thử tại workspace.thomas-labs.com.