Replacing Trello, then making it worth trusting
MUV
An internal work board replacing Trello — and the far more important work of making it solid enough for a whole team to depend on.
The problem
Trello's licence cost was rising, and the team needed things it couldn't give them: separation between functions, and notifications people could opt into. Building the replacement was the easy part. The hard part arrived after the team actually moved in.
The user journey
- A team member signs in with their work account and sees only their organisation's boards.
- Cards move, gather comments, labels and due dates, with an activity history you can trace.
- Cards on different boards can be linked, so one piece of work crossing several teams stays followable from any side.
- Due dates and assignments go to Telegram, because that's where the team actually reads notifications.
What was built
Next.js with Prisma on PostgreSQL, entirely in Docker. The schema grew to 67 models — this is not a simple sticky-note board.
Architecture
The hard part
Once a team genuinely depends on it, the question changes from “does it have the feature” to “will this hurt us in six months”. That's a much heavier question, and the answer isn't new features.
The outcome
- CPU and memory limits added, because until then this container could monopolise a server shared with dozens of other projects.
- A weak database password turned out to be committed to git and running in production — rotated with no downtime.
- Schema changes moved onto recorded migrations, replacing the old approach of pushing schema directly with no trail.
- Backups genuinely tested: a dump pulled from Drive, restored into a separate throwaway database, and row counts compared against production until they matched.
- A bug causing sessions to drop was traced to its root: middleware processing the auth routes twice and overwriting its own session cookie.
Commit record
| commits | 340 |
|---|---|
| active working days | 29 |
| since | 2026-06-10 |
What isn't finished
Cards on one specialised board type still can't be deleted through the interface, because of a guard I added myself. That's recorded and not yet fixed.
My role
Product, implementation, and all of the infrastructure work above.
- Recorded by
- Ihsan Nugraha
- Checked
- 6 Aug 2026, 17:17 WIB
- How to verify
- Click any URL on this page
- Recorded by