This case study is under NDA

Enter the passcode to view it. Reach out if you don't have it.

Incorrect passcode. Try again.

← Back to home
Product design · Internal tools

Admin Tool

Before this, only engineers could manage which customers had access to which AI features, usually by hand, in code. We built an admin UI so anyone on the team could manage customers, feature access, and the API connections tying it all together.

Shipped 2 weeks to MVP Product Designer + Engineer B2B SaaS · Real Estate Title Figma, Claude Code
Admin
Customers
Partners
Reports

Customers

Active
Active
Disabled
Active
API connections · Development
ConnectedPrimary database5ms
ConnectedAI Assistant API120ms
TL;DR
Problem

Managing which customers had access to which AI features meant engineers making the change directly in code. Slow, and it didn't scale as the customer base grew.

Approach

Built an admin UI for managing customers, toggling AI feature access per environment, and testing the API connections between each customer's AI Assistant and the legacy platform.

Outcome

Support tickets dropped 70%, since role-based permissions let customers safely self-serve their own settings instead of filing a ticket.

2wks From concept to shipped MVP
3 Environments (Development, Test, Production), managed independently per customer
70% Fewer support tickets, from customer self-serve

Problem

Admin Tool didn't start as its own idea. It came out of watching AI Assistant mature: as more customers came on board and depended on it daily, both our internal team and the customers themselves needed a real place to manage AI features and the connections tying it all together, instead of that living nowhere. Before this, creating a new customer account or changing anything on an existing one (turning on a feature, adjusting access) meant the customer filing a support ticket and waiting on an engineer to make the change by hand. As the number of customers connected to the AI Assistant grew, that pattern grew right along with it. That someone was always an engineer.

01

Feature access required engineering: turning an AI feature on or off for a customer meant changing it directly in code.

02

No visibility into connection health: nothing showed whether a customer's AI Assistant and the legacy platform were actually talking to each other.

03

Didn't scale: as the customer list grew, routine account changes turned into a steady stream of engineering requests.

Research

We aligned with our PM early on the business case (fewer support tickets, faster onboarding) and with engineers on what could safely be exposed to customers without a security risk. Self-serve account management is standard across SaaS: customers manage their own users and settings without ever picking up the phone. There was no real reason feature access here had to work any differently.

Early in research, we worked to identify who the actual audiences would be and what each one expected to see and do. That's how we landed on three different groups: our system admins who manage every customer, engineers who think in terms of environments and API connections, and customers themselves, who just want to manage their own company. Once we understood what each group actually expected, the design had to work for all three without feeling like three tools stitched together.

Decision 01

Role-based permissions, not one-size-fits-all

What each audience expected to see and do made it clear one-size-fits-all access wouldn't work. Our system admin sees every company, while each company's own admin only sees their own users and controls: enough access to self-serve, not enough to reach into someone else's account.

Decision 02

Environment-aware, not just customer-aware

Feature flags and API status are shown per environment (Development, Test, Production), since rollouts happen gradually, not all at once.

Decision 03

Make connection health visible and testable

A one-click test for every integration, so a broken connection shows up before it becomes a support ticket.

Design

Features · Mt Pleasant

On
Off
On

We scoped this in two passes. Customer and user management came first: the foundational piece of knowing who exists and what they're allowed to do, before anything built on top of it would make sense. API and feature-flag management followed once that was solid, layered in per company so customers could manage their own AI features and connections directly. Building on the Design System already established for Resware meant every one of these screens could reuse existing components instead of starting from scratch, which is part of why this shipped in two weeks.

The tool covers three things. A searchable list of every customer company, with status and quick actions. A per-customer configuration and features view, where flipping a toggle turns an AI feature on or off for that company, in a specific environment. And a live API management view, showing every connection (database, payment gateway, messaging queue, cache, storage, email) with its status, latency, and a one-click test, per environment. Every screen here is built from the same shared Design System components as Resware's other products, so it looks and behaves consistently rather than like a bolted-on internal tool.

Underneath all of it is role-based permission control. Our system admin (our own internal team) has full oversight across every company. Each company's own admin only sees their own users and controls: enough access to self-serve, not enough to reach into someone else's account. That's what let a broken connection between a customer's AI Assistant and the legacy platform become something anyone could spot and test, not just an engineer with database access.

Outcome

Support tickets related to account and feature-access changes dropped by 70%, once customers could make those changes themselves instead of filing a request. Role-based permissions were what made that safe: customers could self-serve within their own company without ever seeing or touching anyone else's.

What we learned

The real win here wasn't just moving work off engineers' plates. It was giving customers enough visibility and control to solve their own problems, without giving them access to anything that wasn't theirs. Getting that permission boundary right mattered more to the outcome than any single screen in the tool.

The same role-based foundation also opens the door to analytics down the road (usage and adoption per customer, and in aggregate across the whole platform) without having to rethink who's allowed to see what.

Stepping back, Admin Tool turned into more than an internal fix. The same permission model and the same screens serve our own team managing the whole platform and a customer managing just their own company, which makes it the connective layer between the user-facing product and the back office, not a tool bolted on behind it.

Want to discuss this project?

Get in touch