Moritz · Case study
Redesigning a law firm's front door
Moritz is an AI-native law firm. A client describes their matter, an agent drafts a first pass, and a lawyer finishes it. Intake is the only part clients drive themselves, and too many came out of it unsure what had just happened. I redesigned it end to end and built it as a working prototype inside the firm's own codebase.
- Role
- Product design · Design engineering · UX writing
- Client
- Moritz, an AI-native law firm
- Timeline
- 3 days · September 2026
- Delivered
- A working TypeScript prototype in the firm's codebase, behind a design switch
The customer
Moritz is a law firm where you talk to an agent before you meet a lawyer.
Its clients run businesses. They arrive with a contract dispute, an employment question, a supplier who wants out, and no legal team of their own. They type what happened, an agent builds the case notes, and one of the firm’s lawyers takes it from there. Intake is the first thing a client ever does with Moritz, and the only part they do alone.

The problem
Clients finished intake and still didn't know what had happened.
The flow worked. People got through it. But the feedback coming back from real clients kept landing on the same four things:
- 01I'm not sure my case was actually submitted.
- 02I don't know which step I'm on, or how many are left.
- 03I can't find where to upload my documents.
- 04It feels sterile. Like a form, not a firm.
Two goals, pulling against each other. Make submitting a case as clear as possible. Make it feel like a premium firm, not a web form. Most fixes for one make the other worse. That tension was the design problem.
The approach
Show people where they are, at every step, with real people in it.
All four complaints are one complaint. The client can’t see the process. So the redesign puts the process on screen everywhere the client looks: a story before they start, a receipt after every answer, a track after they submit, a lawyer’s face at each of those moments. Here’s what changed, moment by moment.
| Moment | Before | After |
|---|---|---|
| Starting a case | A 'Start a case' button, a few clicks deep | One composer under the greeting, on every visit |
| Knowing you've submitted | Nothing on screen said so | A case number, a card that says Case submitted, a track that shows what's next |
| Knowing where you are | A side panel you had to open | A receipt in the thread after every answer, and a count in the brief |
| Uploading | An attach control people couldn't find | In the placeholder, in Moritz's first message, in the brief panel, at any step |
| Waiting | A promised time nobody could keep | Three narrated steps, then 'your notes are with the lawyers' |
| Who's behind it | Faces on the confirmation only | Real lawyers on home, in the brief, on the card, on every tile |
The story, in three beats
Before you type anything, the journey plays once: talk, quote, lawyers.
A brand-new client lands on an empty home screen. Instead of a button, they get a six-second story: talk to Moritz, receive a quote and pay, our lawyers take on your case. It ends on three real faces, and the composer slides in underneath.


This one animation answers all four complaints at once. You see the steps before you take them. You see there is a submit, a quote, a person at the end. And it feels like being welcomed, not being processed. It never repeats, so it never becomes noise.
One mark, everywhere
One small dot tells you what's done, what's next, and what you skipped.
The step dot and its rail were drawn six different ways across the app. I made one foundation component and gave it five states, then used it everywhere a client asks “where am I?”: in the brief panel, in the receipts in the thread, on the track of the submitted card, and on the case tiles at home.
Filled
Green, with a check. This step is done.
Current
A ring with a pip and a soft halo. You are here.
Dashed
A dashed ring. You skipped it, and that still counts.
Outline
An empty ring. Still to come.
Ghost
Just the glyph, no ring. A note, not a step.
The rail
The hairline between two marks. It turns green once the run above it is done.



Starting
One typed message, and the case exists.
The composer sits under the greeting on every visit. You type what happened, and the conversation opens with your words already at the top and the brief panel already filling in.

Where am I
Every answer gets a receipt in the conversation.
Each answer leaves a one-line receipt in the thread, and the count in the brief moves. Skip a step and it still counts. You chose, so it’s done.


The receipts aren’t a new capability. The agent already knew what it had saved. It just never said so.
Transparency
When Moritz fills something in for you, it says so.
A long first message often answers three questions at once. Moritz takes them, names which ones it took, and leaves them editable. Anything it filled in is yours to correct.


Uploading
The upload button is now the first thing you read.
It’s in the placeholder, in Moritz’s first message, and in the brief panel at every step. A file is accepted at any point, not only at the documents step.



For contract matters, the document is the very first question. A contract usually already exists, and asking for it late means re-asking everything it would have answered.
Submitting
Submitted. A case number, a track, and the lawyers it's heading to.
Submitting used to end in a page that looked like the one before it. Now it ends in a card: a check, a number, a four-step track, and the three people your case is going to.


Waiting
While the agent works, the wait is narrated, not promised.
After submit, the agent needs a few minutes. Instead of a spinner, Moritz says what it’s doing, step by step, and tells you that you don’t need to stay.

Coming back
Back home, every case shows its stage and its lawyer.
A case tile changes shape as the case moves: a track before a lawyer is assigned, a name and a face after. Every tile shows when it last moved, so there’s no wondering where a case is.


Human
A real person at every step, and never a promise of one before it's true.
A lawyer’s face shows up on home, in the brief panel, on the submitted card, on every case tile, and on every case you come back to. The same three faces follow a case from the card to the tile, so they never shuffle.



One thing I refused: a named lawyer on the brief before one is assigned. It would have promised a person the firm hadn’t given you yet. So the track ends in the three lawyers the case is heading toward, and a name appears only when it’s real.
Voice
Moritz sounds like a firm, not a form.
Most of what Moritz says is scripted by hand, and the model only fills in what it pulled from your message. A few of the lines:
Your brief fills in as you talk.
Two left: documents, then review.
I took the timeline and other side from your message. Change anything I’ve got wrong.
Quote first, then we assign your lawyer.
We’re getting your case ready for the lawyers. It takes a few minutes and you don’t need to stay.
Anything to add or change? Tell me here.
What I'd do next
Five things, in order.
Watch strangers use it
Start with a Maze or UX Army run, then make small changes from what people actually do.
Give the canvas some depth
The app is white on white right now. A light grey ground and a tighter token map would help.
One primary action per screen
Redo the nav and the screens so the black button is the one thing to do, and everything else drops to secondary.
Email at every milestone
One at each milestone: submitted, quote ready, lawyer assigned.
Give Moritz a voice
Prompt the model for a slightly formal, conversational tone, cut the em dashes, and sharpen the extraction.