Homework Central
A community platform for people to collaborate on each other’s education, built to replace a 16,000-member Discord. I owned the architecture: API, frontend, permissions, moderation, and the one-command local stack.
- 16,000
- Discord members the platform replaced
- 56
- Merged pull requests
- 35,600+
- Trainable weights in the moderation network
- 18
- Commits on main since the July rebase
Production application architecture
A C#/.NET, React, and PostgreSQL platform that replaced a 16,000-member Discord — bitmask authorization, an ML-assisted moderation pipeline, and dozens of merged pull requests since June 2026.
Why it exists
Homework Central grew out of a 16,000-member study community that had outgrown manual moderation. With no staff reliably online, rule violations went untracked, tutoring requests and staff applications sat unresolved, and students often couldn't get the academic help they needed. The platform exists to automate what manual moderation couldn't keep up with — moderation queues, tutoring matches, and staff applications — so the community keeps running between the hours a volunteer staff can cover.
Running it
The stack runs end to end: the ASP.NET Core API on .NET 10 against PostgreSQL, the
React frontend on top of it, and SignalR between them. Below is the General public room
after signing in through /devlogin as one of the seeded personas: a plain
chat message, a second message with real Markdown and LaTeX rendered by KaTeX, and a
reply from a second, distinct account with an @mention in it.
d3e7878. Every message
shown was written for this capture, not organic chat content: MarieCurie posted the
first two, and DevAdmin posted the third. The accounts are the repository’s own
development seed data, not real members. Each developer persona provisions its own
tenant database, which is the isolation this page describes.
That @mention is a real, resolved one, not just styled text. It went
through the API, matched a recipient, and created a notification MarieCurie can read in
her own inbox below. Getting there surfaced a real edge of the isolation above: two
ordinary personas can only notify each other inside the same tenant database, and each
persona here is the sole user of its own. Only DevAdmin (the developer-tools admin
account, a real login rather than a persona, which the notify policy lets reach every
tenant) could actually ping her.
d3e7878, 16 Sep 2026. This is the notification the
message above created, read from MarieCurie’s own inbox.
Read the technical write-up
What it is
The public README describes a React + Vite frontend, an ASP.NET Core API on .NET 10,
and PostgreSQL, started by scripts/run-dev with Docker for Postgres and
FCaptcha. That is the skeleton. The git record shows a Discord-shaped product grown
in public: login, roles, rooms, mentions, tickets, media, a tutor path, and a neural
monitor that trains on moderation concepts.
I spent four years tutoring in the same community. The migration was not a greenfield social app; it was a permissioned workplace for homework help, with staff tools that Discord never gave us.
Architecture that the history forced
Bitmask authorization. PR #4 (28 Jun 2026) implemented the MVP after a conventional RBAC login (#3). Roles and room rights are packed into masks so a check is a bitwise test, not a join-heavy policy walk. Later PRs (#25–#26) had to fix custom role masks, category merge, and infrastructure permissions. That is evidence the model was in live use, not a sketch.
Tenant isolation for developers. #7 added /devlogin;
#9 gave each developer a tenant database. That is how a 16k-member production shape
can be hacked on locally without sharing one dirty Postgres volume.
Rooms as resources. #12 introduced a visibility primitive and chat-room access. Custom channels, public-to-private updates (#27), and the later water-theme chrome (#40–#47) sit on that primitive rather than a hard-coded channel list.
Moderation as a pipeline. #50 (16 Jul) brought tickets, media, votes, Trial Tutor, and assessments. The next week reverted TorchSharp, restored dual CPU ChatMonitor models, and added a tutor subject processor (aliases, case-fold, spell-check) shared with ticket preface checks. Training then moved to fewer LLM round-trips, a 2D neural mesh with a Kubernetes split, and a live audit/weight UI (August).
Where it stood
Main’s first 15 commits stopped at the 15 Jul UI rebase, but the PR train continued: neural-net work through August, DevOps documentation and training-pause in early September, and branches for memory optimization (Rust LRU with C# fallback) and a safer Postgres reset that must not wipe Ollama, uploads, or MinIO. The migration completed in September 2026. Below is that neural-net branch actually running: a two-stage cascade (a small context router feeding a much larger evidence-and-category model) that scores chat messages for moderation and tutoring, visualized as the architecture really is, node for node and edge for edge.
59e153d on the unmerged
cursor/training-speed-c7b9 branch, signed in as DevAdmin, the only
account with the ManageServerInfrastructure permission this page
requires. This shows the real, initialized architecture, not a trained result:
generating training examples calls a local Ollama model this environment doesn’t
have, so no training pass was run here. The database is seeded but otherwise empty:
12 approved examples, 0 pending feedback, which is what a fresh install of this
branch actually looks like.
Homework-Central on GitHub — the full commit and pull request history.