Aperture: pick a mood, not a genre

Aperture is a streaming home screen I designed and built that starts from how you want tonight to feel, not from a genre. It tells you why each film fits, and it’s honest about what everything costs. It runs on TV, web and phone, and every screen works.

Aperture on a TV: the Tonight bar under a large preview of Past Lives, with a row of slow-burning films
The TV home screen. Pick a mood, set how much time you have and who’s watching, and the whole screen follows.

The idea

For five years I’ve written a version of one sentence for @erfesh almost every day: here’s why this one, for you, tonight. That habit taught me something streaming apps still miss. People don’t choose by genre. They choose by mood: how much attention they have left, who’s on the couch, whether tonight can take a sad ending.

So Aperture swaps genre rows for mood rows. You tell it you want something slow-burning, something to cry over, something you can half-watch, something safe for a first date or something made for a big screen, and the whole screen changes with you. Every title gets one short, specific reason in place of a star rating, the kind of line a friend would text you.

  • slow-burning
  • to cry over
  • I can half-watch
  • for a first date
  • made for a big screen

The reasons are written by hand on purpose. They show the voice an AI step should match before anyone wires one up, which is the part I think product teams skip.

What streaming apps get wrong, and the fix

I started from four complaints I hear about every big streaming app, then designed one answer for each.

  • Too much choiceEndless rows make deciding harder, not easier.

    The Tonight bar asks the three things people settle first: mood, how much time, and who’s watching. Pick for me narrows it to three films with their reasons, and “show me three others” walks to the next best three.

  • Hidden pricesIncluded titles, rentals and add-ons sit in the same rows.

    Anything that costs extra is tagged on the card. Watch now hides whatever you’d have to pay for. Checkout is one step: the price, how long you get it, and how to cancel. Canceling Aperture+ is as easy as starting it.

  • A cluttered Continue watchingHalf-finished shows you’ll never go back to.

    Every title shows how much is left, and one tap (or the back key on a remote) clears it.

  • Dead-end searchNo results, and nowhere to go.

    Search understands moods and limits like “sad”, “short” or “kids”. When nothing matches, it says so and offers what fits your mood instead of an empty page.

Pick for me on TV: three films for tonight, each with a one-line reason
Pick for me: three choices, not three hundred.
One step rental checkout for Dune: Part Two showing the price, the viewing window and the payment card
Checkout says the price, the window and how to cancel before you pay.
My stuff on TV: profile, Continue watching with an I'm done with this button, and My list
My stuff: everything that’s yours, and one tap to clear what you’re done with.
Search for sad on the web, suggesting the to cry over mood above the results
Type “sad” and search suggests a mood, not just matching titles.

Built for every screen

One product, three surfaces, each designed for how people actually hold it. Every page works on all three: Tonight, Browse, Search and My stuff.

  • TV. Fully navigable with a remote. Arrows move focus, Enter selects, Back returns. Home rows are endless carousels that never show anything to the left on first view. The other pages use spatial navigation, so focus jumps to the nearest item in the direction you press, the way TV operating systems behave. Search has an on-screen keyboard.
  • Web. Hover a title to preview it in the pinned hero, click to open it. Arrows page through each row.
  • Phone. Shown upright and sideways at the same time. Swipeable rows, bottom tabs, and sheets that slide up for details and checkout. Your profile, favorites and plan all live under My stuff.
Aperture in a web browser with a pinned preview of Past Lives and a row of posters
On the web, hovering a title previews it in the pinned area up top.
Aperture on a phone, upright and sideways, both showing Arrival
Phone, upright and sideways.
Aperture on a phone showing My stuff upright and Browse by mood sideways
My stuff and Browse, running side by side.
Browse on the web: mood tiles on top and every title below with sort options
Browse starts with moods, then every title with simple sorts.

How it’s built

Aperture is React 18 written in JSX and compiled ahead of time with esbuild. No other libraries, and no transpiler running in the browser.

  • One component tree for three devices. Each surface renders at a fixed size (1280×720 for TV, 1280×760 for web, 390×844 for phone) and scales to fit its mockup, so layouts stay pixel exact at any window size.
  • A real async layer with no server. The reasons are hand written, but the client treats them like an API: abortable requests, a cache, a short debounce while focus moves fast, skeleton states, and a word by word reveal like a streamed model response.
  • Bias lighting. A blurred copy of what’s on screen glows behind the device in its own shape, the way LED strips behind a TV throw the picture’s colors onto the wall. The page also samples each film’s key art to tint the room.
  • Endless carousels without seams. Rows render several copies of their titles and quietly re-center after each move. Rows too short to fill the screen don’t loop at all.
  • Motion with restraint. Spring easing, crossfades between titles, a slow drift on the hero, and a camera iris logo that closes and opens when the mood changes. All of it respects reduced motion settings.

What I’d do next

The obvious next step is to put a model behind the reasons, prompted with the hand written ones as the style guide, and test whether people decide faster with them than with ratings. After that, I’d watch where people abandon Pick for me and tune the three questions.

Aperture is a non-commercial design prototype. Film titles and artwork belong to their studios. Prices, the Aperture+ add-on and checkout are fictional; runtimes, directors and ratings are real.

Leave a comment

Your email won’t be published.