Anton Kopylov

Reverse Image Search Anywhere: Idea to Web Store in Four Days

Four days ago this project did not exist. There was no repo, no name, just an itch: reverse image search is genuinely useful, and every tool I reached for was either clumsy or quietly broken on the sites I actually wanted to use it on.

The first commit landed on a Friday afternoon. By the following Tuesday the extension was zipped, the marketing site was live, and the whole thing was sitting in the Chrome Web Store review queue. Ninety-one commits, one working extension, one Rails backend, one deployed site.

This post is about what I built, why, and what “four days” actually looked like.

Update: it’s live. Reverse Image Search Anywhere is now published in the Chrome Web Store — install it here. It’s free, works on Chrome and Edge, and I’d genuinely love your feedback.

The itch

Reverse image search should be a boring, solved problem. In practice, two things annoy me every time.

First, you check one engine at a time. Google Lens is good. Yandex is better for people. TinEye is the only one that reliably tells you where an image first appeared. So a real search means right-clicking, copying the image address, and pasting it into three or four different sites by hand.

Second, the “search by image URL” trick silently fails on exactly the sites you care about. Instagram, Pinterest, Facebook, anything drawn on a <canvas>, anything served as a blob: or data: URL — none of them hand you a plain image URL a search engine can fetch. So the one-click tools just don’t work there, and you’re back to screenshotting and uploading manually.

I wanted one right-click that hit every engine at once and worked everywhere, including the hard cases.

What it does

The extension is deliberately a thin router. It does not try to build image matching — Google and TinEye have a decade of infrastructure for that. It captures the image you point at and hands it to the engines that already do this well.

Every engine in one click. Right-click any image and search Google Lens, Yandex, Bing Visual, and TinEye at once — or pick a single engine. No more opening four tabs by hand.

Works where URLs fail. For images with no fetchable URL — Instagram, Pinterest, a canvas, a CSS background — the extension grabs the image bytes and uploads them to a private S3 bucket, then hands each engine a temporary link. The upload only happens when you ask for it, auto-deletes within about an hour, and is never sold or used to train anything. Plain searches never touch my servers at all.

Paste and region capture. Paste an image you copied (Ctrl/Cmd+V), or drag a rectangle to search just part of a page.

Search a face. There’s a dedicated “Search this face” flow powered by Yandex, which is the best engine for finding people — verifying a profile, checking a source, spotting a fake. Crop to just the face for a better match. It’s built for responsible use: verifying authenticity, not stalking or harassment.

How it’s built

Two moving parts:

  • The extensionWXT + TypeScript, Manifest V3, so the same codebase targets Chrome and Edge now and Firefox/Safari later.
  • The backend — a small Rails app that serves the marketing site and privacy policy, hands out presigned S3 upload URLs, and proxies the paid APIs. Deployed with Kamal.

The interesting engineering is the upload workaround. When a page won’t give up a usable image URL, the extension fetches the image’s bytes in the page context, requests a presigned URL from the backend, uploads directly to a private bucket, and passes that temporary object URL to each engine. The bucket is locked down — size caps, IP rate limiting, scoped IAM, and a lifecycle rule that deletes objects within the hour. The default path, where a normal image URL exists, skips all of that and stays fully client-side.

What “four days” actually looked like

The timeline is the part I want to be honest about, because “shipped in four days” can sound like magic and it wasn’t.

Day one was a spec, not code. Before writing the extension I wrote down the positioning, the engines, the phased build order, and the failure modes. That document did most of the heavy lifting — every day after was just working down a list I already trusted.

Then I built in phases, each one shippable on its own:

  1. Multi-engine right-click redirect
  2. Clipboard paste + region capture
  3. Private S3 upload search (plus the restricted-site byte-grab)
  4. “Search this face” with crop assist

The last stretch had nothing to do with code. Publishing a browser extension means a privacy policy, a live domain, permission justifications for review, store screenshots, and promo tiles. That’s a real chunk of the four days, and it’s the part first-timers underestimate.

The lesson, again: a good spec up front is what makes a fast build possible. Speed came from knowing what to build, not from typing quickly.

Try it

It’s live, free, and runs on Chrome and Edge:

Install Reverse Image Search Anywhere from the Chrome Web Store

There’s also a full guide, a demo, and the privacy policy at reverseimage.app.

If the idea is useful to you, install it, run a few searches — especially on the sites that normally break — and tell me what works and what doesn’t. A rating on the store helps more than you’d think for a brand-new extension.

← Blog