For a few months I did something a lot of indie hackers do: every time an AI video meme blew up on TikTok, I bought a domain, cloned my last project, swapped the copy and shipped a one-page "make your own X video" site.
It works — for about two weeks. Then the meme dies, the domain renews, and I'm maintaining five near-identical codebases with five Stripe setups, five Google OAuth clients and five databases.
So I rebuilt it as one site where a trend is just a config entry plus a few media files: AI Trend Video . Upload one or two photos, pick a trend, get a short video of you doing it. This post is about how it's wired, and the few things that bit me.
The core idea: a trend is data, not a site
Every trend is a template: a short, silent reference clip, a prompt, and some rules. The user's photo replaces the person (or car, or product) in the clip.
export type Trend = { id : TrendId ; path : string ; // landing page, e.g.…