Inspiration

Most creator platforms work the same way. You pay a monthly subscription and then you get access to everything. The problem with that is it asks a lot from someone who's just curious. They have to commit real money to a creator they don't really know yet, and the creator has a hard time turning that curiosity into a sale because there's a paywall sitting in front of all of it.

We wanted to see what happens if you let people pay for just a piece. A piece of the image, where you blur only the interesting parts and leave enough visible to make someone want the rest, with each blurred area having its own price you can tap to reveal. And a piece of time, where a voice call with a creator is billed by the second instead of sold as some bundle. The idea was that small, low-commitment payments would get a lot more people to actually spend something.

What it does

Unveil is a mobile-first web app. The feed is full of posts that are partially blurred, and when you tap a blurred area, a small stablecoin payment goes through on-chain in under a second with no gas fee, and the blur fades away. The actual unblurred image never gets sent to your phone until the server has confirmed the payment, so the blur isn't something you can just bypass in the browser. On top of the unlocks, creators can also do paid voice calls that get billed by the second.

How we built it

It's a Next.js 16 app with React 19, Postgres with Drizzle, and Clerk for sign-in. The media sits in private storage and only gets handed out through signed URLs that expire quickly.

Payments run on Tempo. Every user gets a custodial wallet on the server that backs their balance, and when they unlock something the payment settles in stablecoin on the server side. We sponsor the fees, so there's no gas and nobody has to approve a wallet popup every time they tap. The calls use ElevenLabs voice over WebRTC. Billing only starts once the call actually connects, money is held in escrow in small batches while you talk, and when the call ends the server settles the exact number of seconds once.

The auto-blur runs on hosted models through Replicate so we don't have to run any GPUs ourselves. A creator uploads once, we detect the regions that should be hidden, render the blurred version, and then make the creator review and approve it before it ever goes public. Images go through detection, then masking, then compositing. Video adds tracking on top so the blur follows the region as it moves.

Challenges we ran into

Almost all of the hard parts were in the blur. We went in assuming there'd be a single model that could just blur the explicit parts of a video for us, and there isn't one. We ended up stitching it together from an open-vocabulary detector, a segmentation model, and a separate tracker for video, and then figuring out that some of those return masks rather than a finished blurred clip, so we had to do the compositing ourselves.

Getting the blur to move was the worst of it. The video model wants click points instead of boxes, running detection on every frame got expensive and made the blur flicker, and we kept getting bitten by small things like having to expand the mask so the edges don't leak and re-adding the audio that ffmpeg quietly drops when you blur. The payment side had its own version of this. Custodial wallets, gasless settlement, and per-second billing for calls all had to settle exactly once, even when a call drops or someone closes the tab mid-conversation.

What we learned

There's no off-the-shelf model that just blurs the interesting part of a video, so most of the real work is in connecting smaller models and handling the messy parts in between. And once a payment can be a couple of cents that clears instantly with no gas, it changes what the product can be, not just the price. You can charge for one region or one second, and that's something a subscription just can't do.

Built With

Share this project:

Updates

Submission history