studytrack
A Discord study tracker rebuilt as a realtime web app, built around the difference between what people planned and what actually happened.
- TanStack Start
- Convex
- Clerk
- discord.js
In 2020 I built a Discord bot that tracked time spent in study voice channels. Around twenty people used it daily, and they taught me something I did not expect: the feature I was proud of went unused, while the parts that made study visible and slightly competitive carried the product.
The redesign existed as UX/UI work in 2023 and was never built. In October 2026 I started again, this time as a realtime web application.
The domain decision
The bot recorded sessions. A planner needs to distinguish two things that look similar in a database and are completely different in a product:
- a work session: what a voice channel actually recorded, evidence of time spent;
- a plan block: what a member intended to do, which never becomes evidence.
Keeping them separate is what lets the app answer "what did I plan versus what did I do" without pretending an intention is a fact. That distinction is written down in the repo's glossary and its architecture decision records.
The build
- TanStack Start with React 19 for the web app, file routes and SSR.
- Convex as the backend, database and realtime layer, shared by the web app and the bot.
- Clerk for authentication, wired to Convex with Discord sign-in.
- discord.js gateway bot that joins voice channels and reports events to Convex.
- Tailwind v4 + shadcn for the interface, Vitest for tests.
The repository carries a glossary, an adr/ directory and a written decisions
handoff, more process than most side projects, and the part I would keep if I
had to cut everything else.
Status
Running on my own NixOS server. Use is beginning and I am the main user, so this is a product in progress rather than a product with traction.
The honest version: it took three attempts across six years, and the thing that made the third one possible was having both the engineering experience and enough capacity to build the version I had designed.
NEXT CASE STUDY