Client engagement, under NDA · 2026

The right game on every screen

A small box running our algorithm changes the channels over the network. Setup your sports preferences, and the right game is always on without anyone grabbing for a remote.

3k → 1.9kTeams a bar waded through while searching for their favorites
146 → 1Rows a bar gets searching for "cardinals" by filtering down by selected leagues
5 screensQuestions removed, three of them unanswerable
A tablet propped on a bar, showing a screen headed How much does each one matter, with leagues sorted across three columns from first pick to last.

Every screen picks its own game

A venue can run thirty screens off one remote nobody can find. This product changes every channel over the network, so the right game is always on and nobody goes looking for it.

The onboarding let the owner choose which sports and teams are preferred.

I designed and built a working prototype using live API data. This allowed me to rapid prototype and get sign-off in a fraction of the time.

Confirm your venuePick, orleave itWhich sports matter mostPut leagues in orderWhich teamsWhich teams to avoidWhat plays between gamesReviewWe chooseLEAVE IT TO USSKIPS FOUR SCREENSThe addressarrives with theorder. Theyconfirm it.Confirm your venuePick, orleave itWe chooseWhich sports mattermostPut leagues in orderWhich teamsWhich teams to avoidWhat plays betweengamesReviewLEAVESKIPSThe address arrives with theorder. They confirm it.

A wrong answer nobody could catch

A bar manager knows which TV package the building carries about as well as they know their phone plan by name. The worse problem is what a guess does.

A receiver reports a channel the venue does not pay for as though it were fine, so nothing catches it and the schedule fills with games that land on a subscription screen. It had already happened at a real venue.

A decision that opened a new process

I was asked to shorten the list of packages. I removed the question altogether.

Probe the TV, don't ask the bar

What answers the question now is a probe the technician runs on site. They pick a TV off the plan they have just drawn and walk to it. The tiers stack, so it is three checks at most. The receiver will not admit a channel is missing, but it always fails the same way, A screen shows whether or not we have that channel, and based on the channel shown, we know what package they have.

A tablet screen headed Which channels does this venue get, marked check one of three at most, tuning one named TV to channel 208 and showing what an unavailable channel looks like, with Yes and No answers beneath.
The same screen once the tier is found, the one above it struck through and the two below it marked as included, beside a panel listing what the tier carries and how many add-ons are still to check.
A summary headed Here is what you get, listing thirteen screens in nine groups, the base package, and the add-ons split into what comes with the tier, what the venue subscribes to and what is not carried.
The original sports screen asking "What sports do your customers enjoy the most?" above thirteen chips that are mostly leagues, including NFL, NCAA Football, NBA and NCAA Basketball, with a View More link beneath.

Asked for sports, listed leagues

The old screen asked which sports a venue’s customers enjoy, then offered NFL, NCAA Football, NBA and NCAA Basketball. Those are leagues, not sports, and the distinction is not pedantic: a bar across the road from a college wants the college game and not the professional one. So I split sports into two levels, with their leagues one tap behind.

Two levels instead of one long list

Tapping a sport opens the leagues inside it, and each sport reads back which of its leagues are on, so a venue can check its answer without opening anything. I grouped teams under the league they play in, because that is what stops a search for one city returning four rows that read the same. The last screen plays the whole thing back in plain sentences.

The rebuilt sports screen, nine sport chips each carrying a subtitle naming the leagues chosen inside it, such as Football with NFL and NCAA D-I.
The team screen after adding, showing eight numbered league rows with the chosen teams inside each and an Add control pinned outside the scrolling strip.
The review screen playing back the venue, the eight leagues in order, six backed teams with their leagues listed, the empty avoid list, and the between-games ranking, each with a Change link.
The same floor plan doing its nightly job, every screen carrying the channel and the game it is showing, two colored rank badges marking the screens tied together, one screen flagged as changed by hand, and one marked as not reachable.

The bar already had a tablet

The first install answered a question we had not asked. Both venues already ran everything off one shared tablet behind the counter: table availability, the HVAC, and the TVs. One of them drove its screens from a wall system with its own iPad front end. Nobody was going to keep two tablets behind a bar, so the product had to absorb the one already there.

A floor plan headed Place your TVs, with thirteen numbered screen markers each carrying a facing arrow, arranged across a main room and a patio and labeled with the names the venue already uses for those spots.

One object, two moments

The map a venue builds during setup is the screen its staff use every night, so I designed the nightly view first and the builder second. The old one showed where each TV was and nothing about what was on it. A room encloses and a group tags, so a group is worn on the TV as a colored rank rather than drawn as a region.

The original team screen asking "Any team affiliations?" with an empty search field and three plain chips reading Detroit Lions, University of Michigan and Michigan State, carrying no league, sport or location.

Prototyped on the real data

The old team screen offered three guesses based on the venue’s city, so I went and got the real list: 38,266 teams, 3,557 competitions, 119 sports, pulled from the licensed feed the product already runs on. I found 5,584 apparent duplicates that turned out to be a men’s and a women’s team sharing a name, so I labeled them rather than merging them.

I cut five screens from the onboarding flow

The onboarding process was becoming a user experience issue. I cut the venue type because I checked what read it downstream and nothing did, while the screen itself claimed to shape the programming.

A promise the product does not keep is worse than no question. I kept the address and stopped asking for it, because it was already typed at checkout. I cut the other two because they asked again for what the venue had already given at purchase.

Nine annotated Figma frames of one receiver-configuration screen, covering the default state, four identically named receivers, inline renaming, multi-selection, the state after mirroring, two identify dialogs, and naming a mirrored set.

Ported the screens back into Figma

I built the prototype out of the library’s own components, because a prototype the client can click is worth little to the engineers if the design system does not know about it. I found 23 of the 35 components those screens needed already existed, and I had the tool propose each swap for review rather than apply it, because a silent match is how a library drifts.

A dark Figma board headed New Components, laying out twelve receiver components: a receiver row unselected and selected, each carrying its channel and the game on it beside Find this TV and Rename controls; a mirrored-set card grouping two TVs onto one game; the mirroring rail in three states, empty, two selected, and holding a named set with an Undo; an inline naming field offering the venue's own room names as chips; a warning that a missing receiver is probably unpowered; a section header reading We found 5 receivers; a pinned bar carrying Search again and Continue; and three dialogs covering finding one TV, opening the guide on it, and naming a mirrored pair.

I Vibe-Figma twelve new components

I don’t know what to call it, but using Claude and the Figma MCP Bridge, I built the remaining twelve as components, with auto layout throughout, and 225 bindings to the existing design system’s own color, type, and spacing variables. All matched. Fully automatic.

Every one of the 69 text layers on a shared text style. I made three of them sets, carrying seven variants between them, and drew nine states of one screen once to reuse 525 times.

render

3D and industrial design

Setup asks somebody to tell one receiver from another, and a person can only identify hardware they recognize. So I modeled the devices themselves and exported them into the app, rather than describing a black box in words and hoping the right one was found. I put each render on the screen that asks about it. (Branding Removed)

I left the venue less to answer

The Cable section is gone: five screens, three asking a bar manager what no bar manager knows. A probe answers it instead of a person. Teams to wade through fell 3,401 to 1,927, because the leagues a venue picked did the filtering.

These count the pool the design exposes, not shipped behavior, since the engagement is active. The interface got simpler because I understood the system underneath it.

Next

Somny · A character that actually looks like you

View project details: A character that actually looks like you