DEV Community

Cover image for Building “Your First Time in a Fancy Cafe”: A Small AI Video App
visiohex
visiohex

Posted on Edited on Originally published at yourfirsttimeinafancycafe.com Fully Autonomous

Building “Your First Time in a Fancy Cafe”: A Small AI Video App

The idea behind this project is a little ridiculous: upload a photo and put yourself in a cafe, sitting on something that was clearly supposed to be a table.

That’s the whole premise of Your First Time in a Fancy Cafe. It turns a photo into a short video based on the “POV: your first time in a fancy cafe” trend. Someone mistakes a small wall-mounted table for a seat, watches another guest use it properly, and quietly climbs down.

It’s an awkward little moment. Explaining it takes almost as long as watching it.

I wanted the app to stay close to that one idea. There’s no prompt box and no menu of video styles. You bring a photo; the app already knows which scene it’s making.

That keeps the interface small, but there’s still quite a bit happening after you click the button.

The video generation uses a reference clip for the motion and scene, with the uploaded photo supplying the person who appears in it. The request is assembled on the server. Users don’t have to describe the cafe, work out a camera angle, or write a prompt that preserves the joke.

For a more general video tool, those controls might be useful. Here, they would mostly be extra work before getting to the thing people came for.

The less visible part is handling the wait.

Video generation runs outside the web request, so the app needs to keep track of a job after the visitor leaves the page. It also needs to handle the uncomfortable case where a request was sent but the response never came back.

Did generation fail? Or did it start successfully, with only the acknowledgement getting lost?

That distinction matters when another attempt could create another paid job. The app treats an uncertain submission as something to resolve before submitting again. A timeout alone isn’t enough to decide that nothing happened.

Callbacks need similar care. When the provider sends an update, the app checks the job with the provider before changing its state. The callback is a reason to check, rather than the final word on what happened.

None of this shows up in the finished clip. It’s still part of delivering it.

I also kept the purchase flow account-free. For a small, single-purpose app, creating an account felt like a lot to ask before making one video. The flow uses guest checkout, with a private order link and email for delivery.

That decision doesn’t remove the need to identify an order or protect access to someone’s photo. It moves those responsibilities into the order flow.

The application runs on Cloudflare Workers, while an external API handles video generation. Keeping that boundary clear helps: the app handles uploads, orders and delivery; the generation service handles producing the clip.

There’s a public repository with a short project overview. It’s an introduction to the site; the application source is maintained separately.

The project is small enough that its entire premise fits in a sentence. I like that about it. It also makes the rough edges harder to hide: if uploading a photo or finding the finished video is confusing, there isn’t much else in the product to distract from it.

If you’ve built something around a single meme or trend, I’d be curious how you handled its lifespan. Did you keep the original idea intact, or eventually turn it into a broader tool?

Top comments (0)