UX CASE STUDY · LEGAL TECH · May to July 2026

People sign contracts they don't understand. This one reads it back, with the law attached.

ClauseGuard checks rental and employment contracts against BC and Ontario law. Every flagged clause carries the statute, what it could cost you in dollars, and one sentence you can send to push back. A UX case study that became a working product.

SPEC · CG001
Role
Solo Designer & Developer
Timeline
May to July 2026
Stack
Next.js 16 · React 19 · Claude
Constraint
EDUCATIONAL, NOT LEGAL ADVICE
AFTER vs BEFORE →
MY ROLE002

Solo build. A dated decision log from day one, 18 ADR-style entries, one six-pillar audit, one aesthetic pass. Built for renters and new hires under time pressure, looking at a document the other side wrote.

Team
Solo (1 person)
Stakeholders
Renters and new hires, BC + ON
FIG. 01May to July 2026
PROBLEM → SOLUTION003

The Problem vs. The Solution

Most people in Canada sign rental and employment contracts without knowing which clauses hold up. The other side wrote it, you have a day to sign it, and no way to tell which parts would survive a dispute.

BEFORE003.A

Signing blind

P-01
Unenforceable terms get signed anywayNo-pet clauses void under the BC RTA. Overtime waivers the ESA does not allow. Nothing flags them at signing time.
P-02
The law lives somewhere elseGovernment resources are real but generic. None point at clause 7 of your lease.
P-03
Advice costs more than the depositA lawyer review can cost more than the damage deposit the clause is about. So most people skip it.
AFTER003.B

The document becomes the interface

S-01
Traffic-light analysis with receiptsGreen, amber or red per clause. Every red flag cites the Act, the section, and links the official source.
S-02
One answer first, then the detailA health score and a summary at the top. Five tabs carry you from analysis to rights, filing, help and a checklist.
S-03
Stakes and a scriptEach flagged clause states its cost, in dollars where that is honest, and offers one sentence you could actually send.
THE IMPACT004

The Impact

A design-led MVP, so the numbers are about integrity. The public demo runs on four example contracts, and every screen says educational tool, not legal advice.

Province and type combos
0 of 4
Every selection returns its own real dataset. No silent swaps.
Clauses anchored verbatim
0 / 46
Every flagged clause locates itself in the document pane, checked before build.
Decisions in the log
0
Dated, ADR-style, with the rejected options written down.
THE JOURNEY005

From a Document to a Decision

Two dropdowns in, one answer out, then the detail on the document itself. The reader leaves with one of three moves: sign, send the push-back line, or file with the deadline in hand.

FIG. 02The journey, drawn in FigJam. Demo and live share one path after the mode fork.
KEY DECISIONS006

Key Design Decisions

Five calls from the 18-file log shaped the product most. Each is dated, with the rejected options written down.

DEC-01
Demo mode covers all four combos

Two sample datasets shipped first; ask for BC employment and you silently got the wrong one. The fix was authoring the two missing datasets, not a banner explaining the swap.

Why

A disclosure next to a lie is still a lie, just a labelled one.

DEC-02
The input stopped pretending

The paste box never drove anything; the dropdowns did. It is read-only now and previews the exact sample your selection loads. The one working action is the biggest thing on the page.

Why

Selection is the input, so the UI says so.

DEC-03
The contract became the interface

The results screen used to discard the contract after analyzing it. Now the Analysis tab is a split pane: contract left, tinted by severity, findings right, a rail between them, and detail opening in place.

Why

The document is the thing people are anxious about. The analysis only makes sense on it.

DEC-04
Stakes in dollars, then a script

What’s at Stake names the consequence per clause, in dollars only where the contract itself supplies the figure. If You Want to Push Back is one copyable sentence citing the section.

Why

A sentence you could send beats a paragraph of advice.

DEC-05
Anchoring is exact-string matching

Every flagged clause locates itself verbatim in the document pane; all 46 anchor, checked before build. A clause that failed would render unhighlighted, never mis-pointed.

Why

The severity rail only earns trust if it never points at the wrong paragraph.

STANDARDS ALIGNMENT007

Audited, Then Dressed

A six-pillar UI audit ran against the working build with a Playwright walker, then one craft pass re-skinned the layout without moving it.

SIX-PILLAR AUDIT007.A

Fixed at the root, not bannered over

All four combos, five tabs each, mobile, clause detail, every external link. Zero console errors. What it found got fixed and logged.

B1fixed
Clause cards were mouse-only

The core action was a div with an onClick. Keyboard and screen-reader users could not open any clause. Now real buttons.

B2fixed
Demo silently overrode your selection

The data-integrity blocker that started the honesty thread. Resolved by authoring all four datasets.

M1fixed
Five trusted-resource links were dead

The 404s were replaced; the remaining 403s were re-probed in real Chromium and confirmed as anti-bot blocks.

All four combos re-verified on desktop and mobile before anything shipped.
SOLICITOR’S DESK007.B

One pass, no layout changes

FIG. 03Stock skin.
FIG. 04Solicitor’s desk.
T-01type
The document pane reads like a document

Newsreader, an optical-size serif, for headings and the contract text. Public Sans for UI. Mono only on spec labels.

T-02access
Accessibility is not aesthetic budget

Focus rings stay loud and the navbar carries an A- A A+ text-size control, for the person reading a contract at 11pm.

The entry screen carries the whole gesture: a document sheet takes its red and amber strokes, the wordmark sets, the file opens. Once per session, skipped for reduced motion.
BEFORE / AFTER008

One missing viewport meta tag

The whole mobile @media block was dead until decision 007 added the viewport meta. Drag to compare 390px before and after.

After
Before
UNDER THE HOOD009

Inner Workings

What is on the page, how two dropdowns become a report, how a finding stays glued to its clause, and the states the app and each clause move through.

FIG. 05Information architecture. One page, one column per screen.
FIG. 06Two dropdowns to a report. Demo and live, one route.
FIG. 07App and clause states.
FIG. 08How a finding stays glued to its clause.
LIVE PROTOTYPE010

Try it

The production build, embedded. Pick a province and contract type, run the example, hover the findings and watch the document answer back.

clauseguard-eosin-ten.vercel.app clauseguard-eosin-ten.vercel.app ↗
SINCE THE CASE STUDY012

What shipped after the first cut

A review of the overnight prototype lane showed every deadline-pressure tool ending with an export, because that is what the person came for. ClauseGuard ended with a closed tab. Four additions in a day: a report to carry out, an honest fingerprint on it, a reader’s own marks per finding, and the statutes named before the reader commits.

FIG. 15A session now ends with something to carry: every finding in document order, the stake, the push-back line, the legislation, on letter paper.
FIG. 16The fingerprint says one thing: this report matches this session’s analysis. Not a signature, not advice.
FIG. 17The reader marks each finding for themselves. The words are theirs; nothing is called cleared or resolved.
FIG. 18Before analysis runs, the provisions it reads against, by province and contract type, drawn from the same records the findings cite.

Confidence now reads as a glyph, a label and one sentence. The repo gained its first test runner on the way: 45 tests. The line from decision 002 holds; every new word is the reader’s note or a statement of what is checked, never a determination.

DESIGN PROCESS013

Design Process

The decision log is the process. Moodboard first, then the build, then an audit that found the blockers, then one aesthetic pass that dressed the layout it had earned.

MOODBOARD, AUDIT, SKIN013.A
01 Discover · moodboard · paper, ink, cream, teal, amberthe palette that stayed
Moodboard: colour study one Moodboard: colour study two Moodboard: colour study three, cream and amber Moodboard: design reference one Moodboard: design reference two
02 Audit · six pillars, Playwright walker, 33 capturesone meta tag away
Homepage before the viewport meta fix, mobile layout dead Homepage after the viewport meta fix
03 Skin · solicitor’s desk, one pass, no layout changesdecision 017
Results screen after the solicitor’s desk pass

01 Discover. Blind signing framed as the problem; scope cut to BC and Ontario, rental and employment; educational, never legal advice.
02 Define. Traffic-light tiers, amber for warnings, red only for unenforceable; every red flag cites the Act.
03 Design. Gauge and summary lead; the document map; stakes and push-back lines.
04 Verify. Six-pillar audit, blockers fixed at the root, four combos re-verified.

REFLECTION014
The demo stopped pretending, and the product got more convincing

The most useful review note came from watching the demo lie. The paste box implied it read your contract. It never did. Fixing that meant deleting an affordance people liked, then authoring two whole datasets so no selection could return the wrong answer. None of that shows on a feature list. All of it shows in how the product feels.

Available for Work

Let's build something impactful.

I'm currently open to new opportunities in UX/UI Design, Product Design, and GovTech transformation roles.