
ROLE
Senior Product Designer
COLLABORATORS
Tonia Hong
Jennifer Lin
Maggie Song
TIMELINE
1 year (expected)
Sept. '25 - Present
Shipping spring '27
TOOLS
Figma Design
FigJam
Notion
OVERVIEW
A fully-custom platform, built 0 to 1, for LA’s 70,000 unhoused.
Around 25% of shelter beds in Los Angeles sit empty, unable to be seen due to software fragmentation. UW Blueprint was contracted to build LA's first centralized shelter management platform from scratch, replacing legacy tools and spreadsheets.
I owned the reservation system, connecting case managers to beds, handling thousands of placements monthly.
70,000
homeless in LA
~25%
of beds go unused
1000s
of clients handled monthly

These designs are expected to ship spring 2027!
THE PROBLEM
The beds are there. The system isn't.
Case managers placing someone today call shelters, check spreadsheets, and hope the information is current. What they don’t know is that a quarter of beds go unoccupied. Not because they're unavailable, but because they aren’t surfaced in software.
How might we streamline reservations to accurately depict remaining beds for those with specific needs?
There's a lack of real-time info!
This UI is sooo outdated, no
way we’ll adopt it
And there's no centralized tool
Which makes it harder to find and
book beds efficiently
THE SOLUTION
Part One / Reservation Flow
Once a client is entered into the system, the case manager is met with a filter modal over the shelter list. Everything gets set here all at once, from demographics to location, shelter type, special situation restrictions and more.

During input, the confirm button updates live as filters are applied. "Show 52 Shelters" may become "Show 11 Shelters" as criteria narrow. This eliminates the submit-error loop. Users don’t have to fill out a multi-page form only to hit a dead end since they know what's available as specifics are inputted.

Confirming filters closes the modal and populates a list with matched shelters according to the criteria.

Selecting a shelter then reveals beds and/or rooms that additionally meet those same criteria. The filter modal is always accessible to revisit and refine.

Key UX Decisions / Reservation Flow
Originally, I designed the flow as a large form for picking a shelter, with the next two pages being more forms to further filter by room and bed. Only after did it either display a list or show an error. With the new modal design, we eliminate the need to click through multiple pages to refine search as filtering happens in one place with the list updating behind, keeping case managers grounded.


redesign
initial design
Feels disconnected from flow
No immediate feedback
Confusing structure
Multiple steps
Keeps users grounded
Live input feedback
Single-step
For shelters with numerous tags, overflow is handled with a "+X" bubble. Clicking expands the full list downward rather than truncating or requiring horizontal scroll.

Part Two / Reservation Queue
The queue lives on the Reservations tab of a shelter’s dashboard, giving managers an overview of all clients' respective statuses. Additional clients show up in bubbles that can be clicked into, reducing visual clutter.

Reservation modifications happen in one streamlined process, where selecting a list element brings up another modal. Inside, managers can edit the check-in date and change the client’s status via a dropdown. Keeping everything in modals means case managers can move quickly between clients without navigating away and losing context on the list.



Key UX Decisions / Reservation Queue
One unexpected constraint was the search bar. Every other page in the platform has search anchored top-left in its own subheader, along with filters on the right. Copying that pattern on this page would mean the breadcrumbs, header, tabs, search, and table row titles together consume a massive amount of vertical space.


redesign
initial design
Large amounts of white space
Confusing hierarchy
Multiple headers
Preserved vertical space
More list in view
Compact
Making use of progressive disclosure, I designed a search bar that starts collapsed on the right side of the header, in a familiar spot where the filters have always been. Clicking expands it over other elements, and hitting enter contracts it back to show the shortened query. Hovering over that contracted state re-expands it to show the full text. The information is always there, just not taking up space when it doesn't need to.

Another issue was showing additional clients. An extra column would have cluttered the table and compressed everything horizontally, so I stayed consistent with the same design I used for multiple tags. The bubble keeps the core design unchanged and turns yellow on row hover as an affordance that something's there, while clicking into it reveals the remaining clients.


redesign
initial design
Horizontally squished on smaller screens
Limited space for additionals
Wasted space with N/A
More horizontal breathing room
Consistent with tag design
Less cognitive load
THE DESIGN SYSTEM
70+ components, from scratch
Better Angels gave our team full control over components and colours, giving us a rare opportunity to create everything from scratch. That’s exactly what we did, making use of no external components for complete customization.
70+
components & counting
40
colour styles
16
text styles
Dropdown / I created many essential parts of the design system. One of which is the often-used dropdown, being fully modular and containing numerous nested component layers ensuring full consistency. Search, the buttons, checkmarks, and icons can all be toggled.


The dropdown also allows for a unique “other” property, adding a new field for input, with tags in the input bar able to be removed after an X is revealed on hover.

Sort / Built on the same sheet component as the dropdown & allows for bidirectional sorting.
Profile / One button for profile & settings. Clicking opens a quick actions menu for what's used most.
Filter / Once applied, button gains count badge so users know how many are in use.
Booleans / 3-way toggle instead of radio buttons which add visual weight & use up horizontal space.




FINAL THOUGHTS
So… what have I learnt so far?
Even though this project is still ongoing, these are a few key things I've learnt.
1
The impact is real.
This platform is built to scale across 25,000 beds in LA County, directly affecting how quickly thousands experiencing homelessness get placed, monthly. Design decisions here carry lots of weight.
2
Dev communication is important.
For example, a custom design system means nothing is assumed. To ensure alignment, I once had a call with the developer on the dropdown component specifically to clarify state logic, and annotated every flow carefully. Gaps in handoff can translate to gaps in the product!
3
Check in often with PMs and the client.
Scope and requirements shifted throughout. Staying in sync with the PMs and participating in client meetings ensured changes didn’t come as too much of a surprise, and design didn't get too far ahead of decisions that were still being made.
4
Create an environment you want to work in.
Becoming friends with your fellow designers makes working on the project that much more fun! It’s important to remember to take breaks and connect outside of the workplace :)


Working for Better Angels at UW Blueprint has been incredibly fun and rewarding, and I hope to bring these skills to whatever comes next!