Skip to main content
HB
Hiram BarskyProduct Designer + AI
All work

Case Study

Recast

Record it once, send a link. A screen recorder that runs as a real app on your Mac and your phone, because a browser tab was never going to be good enough.

  • Product Design
  • Cross-Platform
  • Native + Web
  • Solo Build
Role
Lead UX Designer & Developer
The front door, in light mode. Record it once, send a link. The product is that sentence.

01

Thirty Seconds of Me Talking Over My Screen

Half the messages I write would be better as thirty seconds of me talking over my screen. The tools that do that either want a login before the other person can watch, or they put a watermark on it, or they cap you at five minutes and then ask for a card.

So the product is one sentence: record it once, send a link. Whoever you send it to presses play. No account, no app, no meeting.

02

I Deleted the Best-Looking Part

The first version recorded in the browser. It worked, it demoed well, and I killed it. Twenty-one files: the capture engine, the compositor, the camera bubble, the crop selector. All of it.

Two reasons. Browser capture is worse: you get a tab or a throttled screen, not your actual machine at full quality. And there is a hall-of-mirrors problem where recording your browser from inside your browser shows the recorder recording itself.

What replaced it is a boundary I now hold to: the apps record, the website stores and shares. The Record button on the site is a launcher. It opens the native app and falls back to a download if you don't have it yet. There is no browser-capture fallback and there won't be one.

What the Record button does now. It hands you off to the app, or takes a file. It never opens a capture tab.
The other half of the boundary: the site holds everything, and never records.

03

Stop Should Mean Watch

The rule I set: you press stop, the video plays immediately from the file on your device, and the upload happens behind it. Playback never waits for the network. If you're on a plane it still works.

I broke my own rule in the Mac app without noticing. The function that queued a finished recording was async and awaited the entire upload before it opened the player window. On a good connection you'd never catch it. Offline, you pressed stop and stared at nothing until the request timed out.

It returns in a millisecond or two now and uploads in a detached task. I also found the first upload after launch was eating five to eight seconds of framework setup, so the app warms that up when it starts instead of paying for it the moment you press stop.

Where the upload rule actually lives: in the app, on the device doing the recording. The website is the destination, never the controller.

04

Android Argued With the Documentation

Google's own media projection guide numbers the steps: get the projection, then start the foreground service. On Android 14 that order throws. The service has to already be running or the system refuses you outright.

The other thing I couldn't design away: Android will not let you authorise screen capture once and reuse it. Consent is single-use, so the system dialog appears on every recording. I wanted it gone and it isn't mine to remove, so the flow is built to make it feel like one deliberate step rather than an interruption.

I also caught the build asking for permission to draw over other apps, which I never wanted. It comes in from a dependency rather than from my code. It's blocked in release builds, and I check the actual APK after every upgrade instead of trusting that it stayed blocked.

05

I Found a Leak by Signing Up as a Stranger

I made a brand-new account to see what a first-time user sees. The empty library wasn't empty. It had somebody else's recording in it, and fifty-seven megabytes already counted against a quota I had never used.

The database rule that lets a share link work was written to allow reading any recording marked shareable. It was never narrowed to the one link being opened, so it applied to everyone at once.

Nothing ownership-sensitive trusts that rule any more. Every query that returns your library or counts your storage filters by your user id explicitly. I found it by making an account and looking, which is the only way I would have found it.

The door I went back through as a stranger. Everything on the other side of it was supposed to be empty.

06

Three Apps, One Identity

At one point Recast had three different looks at once: a warm editorial share page, a purple Material web library, and a third thing on Android. Every screen had been reviewed on its own and passed. Nobody had put them side by side.

I found it because I opened the app and the website next to each other and they didn't look related. Now a change isn't finished until it exists on both.

07

The Design System

The tokens are the reason the Mac app and the website still look related. Every contrast pair in here was measured rather than eyeballed, and light and dark are both declared so the app follows your OS.

One token file, mirrored into the mobile app value for value. Copying it literally is the only thing that stops two surfaces of one product drifting apart.

08

Where It Is Now

Live at recastvid.com, with a Mac app and an Android app, both built and shipping. Recording is native on both. The website handles the library, playback, sharing and downloads.

It sells storage, not features: a free tier and paid plans above it. Entitlement lives in a database that only the payment webhook can write to, so no client can hand itself a plan. The thing you pay for is the thing that costs me money.

The Mac app, over whatever happens to be on screen. Recording is native on both platforms; the website never captures anything.
The thinking behind itI Just Wanted to Send Someone a VideoRecording your screen is free. Sending it is what everyone charges for — watermarks, five-minute caps, a sign-in wall for your viewer.Read the post

Want something like this built?

I design and ship products end to end. Tell me what you're working on, or grab a time and we'll talk it through.