UNFRY — THE TOOL

Unfry

Role
Product & direction, solo
Built with
Replit Agent 4 · Gemini
Scope
Single page, stateless
Context
Agent 4 Content Challenge
Year
2026

The internet deep-fried your memes.


Memes are how the internet argues. Not just jokes, but argument and persuasion, compressed into an image and passed around until the point sticks. The format carries the meaning. The caption is the part you swap.

Which is the problem. Every share, screenshot and repost degrades the image, so the formats people most want to reuse are the ones in the worst condition. And the words are baked into the pixels, so you cannot rewrite them without leaving a smear where the old text was.

Unfry takes a crusty meme, strips the text out of the image, restores the template underneath, and hands it back with the words as editable layers. One page, no account, upload and rewrite and download. It was called MemeForge for about a day, until the name started promising a platform the product had deliberately stopped being.

In short

A hackathon build with Replit Agent 4 and Google Gemini that turned into a real pipeline argument: the order you do things in was the product.

It shipped, got rate-limited before it got promoted, and its own demo images keep their flaws on display.

The challenge

The value of a meme is not the image. It is the template.

Richard Dawkins coined “meme” in 1976 for a unit of culture that replicates, mutates and spreads. He was describing evolution by other means. The definition turned out to fit image macros better than he could have planned for: a format is a container that carries meaning across contexts, and every remix is a unit of culture adapting to a new environment.

A format is recognisable by its structure, its expression and its context, not by the specific words sitting on it. Swap the caption and it is still the same meme. That is the whole point.

Here is the cruel part. The more a format succeeds, the worse it looks. It becomes recognisable because it has been through the cycle, and the cycle is what destroys it. Compressed, rescreenshotted, watermarked by three different sites, cropped by whoever posted it last. By the time a template is famous enough to be worth reusing, it is a ruin. And the text is part of the ruin, sitting in the pixels rather than on a layer, so editing it means covering it over and hoping.

This is not a niche complaint. The same behaviour runs from a stranger's keep-going folder to embassy accounts mid-crisis, and the missing tool is the same at every stop.

  • Marc Andreessen's spring 2026 run: 100K to 400K views per image
  • The Herzog penguin, remixed by brands, a coin and the White House
  • Jack Friks' saved-memes folder: 4.2M views on one post
  • Embassy accounts posting image macros during the US and Iran tensions
A deep-fried meme: colour-cast, compressed, text baked in

BEFORE

The same meme restored, carrying a different caption

AFTER

The template survives, the caption changes, the quality goes up rather than down
A bell-curve meme as it circulated

BEFORE

The same bell curve restored and relabelled

AFTER

Restored and relabelled. The boxed axis numbers are the over-detection flaw, left in
A washed-out meme with redaction boxes

BEFORE

The same meme with colour and background detail recovered

AFTER

Colour and background detail recovered from a flattened original

The decisions.

01

Detect the text before you remove it

Context

Early versions came back with doubled text. The original caption was still sitting in the restored image, with the new editable layer on top of it, overlapping and unreadable. It looked like a rendering bug.

Options considered

  • Fix the overlay positioning and the render order (rejected)
  • Reorder the pipeline so the text is captured, then destroyed, then replaced

The call

Three steps, in this order. Detect: a model reads the upload and extracts every text element, its content, its position as percentage coordinates, its approximate size and colour, before anything is altered. Remove: the image goes to Gemini with an instruction to erase all text, inpaint the backgrounds naturally, and return a sharp version containing no words at all. Reapply: the stored text goes back onto the clean image as live canvas layers at the original coordinates.

Evidence

Percentage coordinates are what hold it together. The server never learns the canvas size, so anything positional stays proportional until it crosses into the client. The output looks identical to the input, and every word on it is now editable, on a template that is genuinely clean underneath.

Outcome

One source of truth for the text. What presented as a visual bug was a sequencing error, and fixing the rendering would have patched the symptom while leaving two copies of the same caption in the file.

02

Cut the platform down to one page

Context

It started bigger. Template galleries, browsing, share links, saved creations, accounts. All the things a product is supposed to have.

Options considered

  • A meme platform with a template library and saved work (rejected)
  • One page that does one thing

The call

Upload, restore, edit, download. No accounts, no login, no database, nothing persists. The upload zone is the landing page.

Evidence

Meme creation is reactive rather than deliberate. Nobody bookmarks a meme tool and comes back on Sunday to browse. You see something in your feed, you want a clean version of it now, you want your own words on it, and you want to post before the moment passes. Every feature that added a step worked against the only job the tool has.

Outcome

The whole interaction fits inside the window where the joke is still live.

03

Rate limit before you distribute

Context

Every restore is two billed model calls. A post that lands well and a tool with no ceiling is a bill, not a success.

Options considered

  • Ship it open and watch what happens (rejected)
  • Cap it, cheapen it, and stagger the launch

The call

Five restores per IP per hour, a 20 MB payload ceiling, a swap to a cheaper model for the restore step, and posting staggered across platforms instead of everywhere at once.

Outcome

The launch could not turn into a credit fire in an afternoon.

The results

Product and direction:
Theodore Rogers
Implementation:
Replit Agent 4
Restoration:
Google Gemini
Built for:
Agent 4 Content Challenge

Want outcomes like this?

Get in touch
3Steps in the pipeline
1Page, no accounts, no database
[ METRIC — PENDING VERIFICATION ] Replit Agent 4 Content Challenge

Reflection

The code was never the hard part.

Splitting it honestly: I did the product concept, the scope cuts, the name, the design direction and the quality judgement on every output. I also did the one piece of engineering that mattered, which was diagnosing that the doubled text was a sequencing problem and specifying the detect, remove, reapply order. Agent 4 did the frontend, the backend routes, the Gemini integration, the canvas text system, the comparison slider and the responsive layout.

None of it is magic, and it is not automation either: it is a much shorter cycle between judgement and result. Describe the thing, watch it get built, see where it breaks, adjust, go again. The loop that used to take a week takes an afternoon, which moves the constraint off implementation and onto knowing what good looks like.

There is a joke buried in the timing. The discourse that made the problem visible was an argument about action beating overthinking, and the response was to build the thing rather than write a document about building the thing.

What is still rough: the system cannot tell structural text from content text, so it offers you the axis labels on a bell curve as though you might want to rewrite them. Detection drops characters and does not flag when it is unsure. Text rotation and several editor features were specified and never finished. The tool works and it shipped, and that is the whole claim.

[ Keep scrolling — next case ]

Val Weds Fatie