Make the meme before the moment passes.
The group chat has a half-life of about ninety seconds. By the time you've found a meme site, closed three cookie banners, dismissed a newsletter popup, made an account, and exported a JPEG with a watermark the size of a postage stamp, the conversation has moved on to someone's cousin's wedding. MakeMe exists so that doesn't happen.
Live → https://makeme-app.vercel.app
Pick a template. Type the words. Drag the words to where the words should go. Download. That's the whole product. There is no step five.
- ~100 templates, always current. Pulled live from Imgflip, so the list updates itself. No hand-curated folder of formats that peaked in 2016.
- Search that isn't picky. Type
buttons twoand it finds Two Buttons. Typedrakeand you get Drake first, not the fourteen memes with "drake" buried in the description. - Or bring your own image. Drag it onto the canvas. Your dog is a valid meme template. Your dog is arguably the best meme template.
- Drag the captions. Top and bottom text, three fonts, five colours, and an outline setting whose thickest option is called Thicc. This is not negotiable.
- Full-res PNG, no watermark, no account. Download and post it and act like you thought of it hours ago.
- Nothing leaves your browser. Every pixel is drawn on a canvas on your own machine. Your cursed drafts stay cursed and local. We could not sell your memes if we wanted to, and we don't want to.
You'll need Node.js 18 or newer. Check with node -v. If
that command errors, that's the thing to fix first.
npm install
npm run devBrowser opens at localhost:5173. Edit a file, watch it change, feel powerful.
Ctrl + C when you're done.
The other three commands, in case you need them:
npm run build # production build into dist/
npm run preview # look at the built version before shipping it
npm run lint # tells you what's wrong, politely
npm run fetch:memes # downloads the landing page templates into public/That last one runs automatically before every build. It grabs the landing page's templates so they're served from your own domain instead of Imgflip's, which is the difference between "loads instantly" and "loads eventually". If it can't reach the network it shrugs and the app falls back to the Imgflip URLs. Commit what it downloads and it never has to run again.
It's a static site, so hosting it is genuinely a non-event.
- Push to GitHub.
- Import the repo at vercel.com/new.
- Set the project name to
makeme-app— that field decides your URL. - Deploy. Everything else is already configured in
vercel.json.
Every push to main redeploys on its own after that. No environment variables,
no secrets, no database. There is nothing to leak.
React, Vite, React Router, and an HTML canvas doing all the actual work. Templates come from the free Imgflip API. No backend, because there is nothing for a backend to do.
If it made you laugh once, that's a better return than most software gives you. A star costs nothing and makes my day slightly better.
Built by Kundan. Memes are your responsibility.