One dashboard, four audiences
The work at a glance
- My role
- Product designer
- Scope
- One dashboard · admin and learner tools apart
- Built with
- Claude Code, end to end
How it came together
-
01
Took a shared idea from Claude to a written plan.
-
02
Made the design decisions in code, not Figma.
-
03
Pushed past the default and split admin from learner tools.
-
04
Handed off with Figma as the export step.
I made the design decisions in code
Take on the frontend, give threads an ending, then split the screen by role.
A Slack-style dashboard for students, instructors and TAs, with no engineering capacity in the launch window. My co-designer built the backend, I built the frontend. Beyond a text box and a send button, nothing came unasked.
Claude left every channel open forever, so students could message TAs long after a thread ended. Threads now close with their mentor.
But the screen still offers a reply box, so the refusal lands as silence, which I found only by using the app.
Admin and learner views, because running a channel needs different tools than joining one. It tells developers what stays common and what must differ.
Where the feature set landed. Formatting, attachments, emoji and mentions working, with the last three built but switched off.
The gap itself. The server has closed this thread and refuses the reply, but the box still invites one.
The same channel, both roles. The admin can rename it and add or remove people; the learner can only see who is in it. The manage control is not greyed out, it is simply not there.
Captured from a local build, so the channel list still holds test channels and stray debug messages.
Four accounts in one room
A build that works for one signed-in user is not a discussion platform. The test was four people posting at once, and the table underneath.
Four accounts in one channel is the only way to see whether a message posted on one screen arrives on the other three, and whether membership changes made by an admin land for everyone else.
The table is the same session from underneath. Every message carries its channel, sender and server sequence, so message ordering could be checked rather than assumed. The schema also holds the mentions, reactions, edits and read state the interface leans on.
What this entry was testing
How far past a first draft can careful prompting push a model?
Depth was never the default. Every feature past the basics had to be asked for by name.
What does it cost to learn the tools while shipping with them?
Every architectural call was one I was making for the first time.
Can you design who is allowed to do what before any of it has a screen?
Partly. The split is real and enforced, but flagging and archiving work underneath with no controls yet.
Where do the server and the screen stop agreeing?
Closed threads and archived channels are both enforced by the server and invisible on screen. That is the handover note.