showcase_

Lawfty 2.0

tools used

react, typescript, vite, vitest, graphql, apollo, tailwind, shadcn, storybook, ruby on rails

year

2025

front-end, ui/ux, back-end

View Project

available for freelance work

social_

twitter / instagram / facebook

Lawfty ad image

Frontend Development

I initiated the front-end development from scratch using modern tools and frameworks:

React & Typescript

Vite: For fast and efficient project setup and bundling. GraphQL & Apollo Client: To manage API communication and real-time subscriptions.

Vitest: To establish a solid foundation for testing, ensuring the application’s stability.

Shadcn & Tailwind: To deliver a sleek, accessible, and consistent user interface

Storybook: Design system


Challenges & Solutions

Legacy Modernization: Migrated the legacy Ruby on Rails MVC app into a modern Single Page Application (SPA), introducing a component-driven architecture with React.

Design System: Built a scalable design system from scratch with a grid-based layout, TailwindCSS, WCAG-compliant components, and unit tests to ensure long-term maintainability and accessibility.

Real-Time Functionality: Designed subscription handling for live updates without performance degradation.

State Management: Developed a scalable architecture for managing complex states and relationships between inquiries and their secondary counterparts.

Results

The Lawfty Intake Manager significantly reduced response times for intake specialists, streamlined inquiry processing, and improved collaboration among team members. The application laid the groundwork for future enhancements, with a strong focus on scalability and usability.

Lawfty website image Lawfty website image Lawfty website image

Design system

I built a design system with Tailwind CSS, focusing on accessibility (WCAG compliance) and pixel-perfect React components ready for production use.

Lawfty design system Lawfty design system

It now sits at 48 components, from the small pieces like Button, Input and Badge up to Table, MultiSelect, DatePicker, Modal and a WYSIWYG input. Each sits on a Radix primitive, so keyboard handling and screen reader behaviour come from a tested base and I am not reimplementing focus traps by hand. Variants are handled by class-variance-authority. There are 55 Storybook stories and 51 test files covering them, and Chromatic catches visual regressions on the way in.

What's in the dashboard

The app has grown into 23 feature areas. The ones that took the most work:

  • Inquiry routing. Rulesets that decide which firm an inquiry goes to, with their own draft and publish flow so routing changes can be staged and reviewed before they go live.
  • Campaigns and numbers. Campaigns, ad campaigns, an ad scheduler, campaign and operations phone numbers, plus a banned numbers list.
  • Experiments. Where A/B experiments are created and named. The CMS reads this list over the API, so an editor picking a variant in Sanity is choosing from experiments defined here.
  • Page preview. Queries Sanity directly from the dashboard, so the team can preview a CMS page without leaving admin.
  • Firms, sources, distribution lists, users and the SOL report.

Forms were the other big piece. Most use react-hook-form with Zod schemas, but the ones whose shape comes from the backend are rendered with react-jsonschema-form instead, so a new field in the API shows up in the UI without a frontend change. Tables run on TanStack Table and rich text on TipTap.

Real-time and feature flags

Subscriptions go over Rails ActionCable, wired into Apollo with graphql-ruby-client's ActionCableLink. That let me keep the existing Rails backend and still push live updates into the SPA, which mattered because the migration happened one page at a time. GraphQL Codegen generates types straight from the schema, so a change on the Rails side breaks the build instead of breaking quietly in production.

Feature flags run through LaunchDarkly, which is what made the incremental migration safe. A new React page could be turned on for a few internal users, checked, then rolled out.


View website | View Lawfty CMS case study | Contact Me

work

Case study incoming

Flatmately project image, click to view more details.

Flatmately

js, html, tailwind, figma

Flatmately is a flatmate finder app, built for New Zealand and Australian market. I was tasked to design and develop their website, and also helped with branding and marketing.

Case study incoming

NxtStep project image, click to view more details.

NxtStep

js, html, bootstrap, sketch, ai, psd

NxtStep is a job board for students and graduates. I was tasked to design and develop their website, and also helped with branding and marketing.

Case study incoming

Yoga With Kassandra project image, click to view more details.

Yoga With Kassandra

js, html, sass, wordpress, ai, psd

Yoga With Kassandra is a yoga teacher and content creator. I was tasked to design and develop her website and courses platform while I was working at VidApp.

Case study incoming

Tourism New Zealand project image, click to view more details.

Tourism New Zealand

js, html5, css3, sass, bootstrap, sketch

Tourism New Zealand is a website I've built to showcase my skills utilising JavaScript, HTML5, CSS3, SASS, Bootstrap, Sketch. I was tasked to design and develop their website.

Case study incoming

Renkon project image, click to view more details.

Renkon

js, html5, css3, sass, bootstrap, handlebars, sketch

Renkon is a Japanese restaurant, I've pitched the new website and design for the ordering app. I used JavaScript, HTML5, CSS3, SASS, Handlebars and Bootstrap to build the website.

Case study incoming

DotaPopQuiz project image, click to view more details.

DotaPopQuiz

js, html5, css3, sass, php, bootstrap, sketch

DotaPopQuiz is a quiz app built with JavaScript, HTML5, SASS, PHP. It was built as a fun project to make a game to increase brand awareness and to learn more about JavaScript and PHP.

Case study incoming

VidApp project image, click to view more details.

VidApp

wordpress, js, html, sass, ai, psd

VidApp is a video streaming platform. I was tasked to design and develop their website and the platform where users would publish their customised app for iOS and Android.