← Case studies

One Tool ·
Paralegal AI

AI sorts immigration case documents and paralegals review its work. I designed how they navigate, read status and trust what the AI did.

One Tool master layout: case header, tabs, document table and side panels.

Paralegals had to open every document to know what was going on.

What hurt

  • Confusing states. You had to open each document to see what was going on.
  • No record of what had already been processed.
  • No sign of what the AI had touched.
  • Navigation that didn’t scale with the volume.

The context

An internal product for a U.S. immigration firm. Documents arrive by scanned mail, email and the client portal. An AI sorts them, finds who each one belongs to, splits merged PDFs and cleans up the hard-to-read ones.

Each case has a huge number of documents, and the old tool wasn’t built for that.

What I did

  • Navigation and master layout
  • The document status system and its logic
  • Flows, modals, empty states and microcopy
  • Interactive HTML wireframes to validate
  • A working prototype in Lovable with real tokens
  • Handoff documentation in Figma

What the team did

  • The PO ran research with real users on a low-res prototype
  • The business set the rules and priorities

Four decisions that mattered most.

A · Navigation

Navigation that scales

Problem
The navigation couldn’t keep up with the number of documents per case.
Decision
A left sidebar that changes with each tab and filters by status, plus a global right sidebar. Only the table scrolls.
Why
The context stays in view. In the rejected flow I also removed an intermediate table, one step less.
  1. Left sidebar: the list changes with each tab and filters by status
  2. Global right sidebar, the same on every tab
  3. Only the document area scrolls; header and tabs stay fixed

B · States

States as diagnosis

Problem
States were confusing, so people opened every document to understand it.
Decision
Six states with visual semantics: urgent yellow, informative blue, non-intrusive red. Each one defines the panel, the header actions and the main data.
Why
In the review queue I went from 8+ inherited tags to 5, plus a Reason column. The tag says the exact problem without opening the file.
  1. Status pills with visual semantics
  2. Urgent in yellow: what needs review now
  3. Progress per applicant, at a glance

C · AI trust

Trust in the AI

Problem
There was no way to know what the AI had touched.
Decision
One "AI-processed" marker instead of an icon per process, a Processing status, and alerts per document and per case.
Why
It avoids visual debt later, and nobody acts on a document the AI is still processing.
  1. Alerts per document and per case, each with its own empty state
  2. One marker for anything the AI processed
  3. Run AI Audit on demand

I also specified how to compare the original and the enhanced version, with a "Back to original" option. It wasn’t designed before I left.

D · Traceability

Actions on clean data

Problem
There was no record of what had already been processed.
Decision
Replace and Restore cover three scenarios, including all slots full. Destructive actions ask for a reason. Active queue and history, with "Return to queue".
Why
Every change leaves a record, so the queue always shows what really happened.
  1. Restore, with a mandatory reason
  2. Why it was rejected, without opening the document
  3. Queue of rejected documents

Lovable prototype

Client timeline

The case history year by year, with the points that need review flagged. Built as a working prototype with the real Design System tokens.

View live demo
Client timeline prototype: case events by year, with review points flagged.

How I got there

  1. 01

    Understand the real operation

    Sessions with the person who knew the old tool best, to find business logic nobody had documented.

  2. 02

    Research from the PO

    The PO tested a low-res prototype with real users; several features came from there.

  3. 03

    Interactive HTML wireframes

    Clickable flows with live tables, filters and empty states, validated before the final Figma.

  4. 04

    Iterate against reality

    Assignment moved from people to CRM cases when the operating model changed.

What changed

Review queue

8+ → 5

inherited tags became 5, plus a Reason column. The tag says the problem without opening the file.

Rejected flow

−1 step

I removed an intermediate table.

Document status

In the table

Before, you had to open each document to know its state.

What I’d measure next

Time to know a document’s status. My estimate: from 30–40 seconds (open, read, close) to about 5 seconds from the table. Not validated with users yet.

  • Design for trust in AI: people need to see what the machine touched and be able to undo it.
  • Undocumented business logic counts as research. Sessions with the person who knew the old tool drove the main decisions.

Next case · 02

Leads & Opportunities

View case study