← Back to projects

Gotem · Launching

Hunting pirated copies across the web

Scans search engines, websites and Telegram for copies of digital products, comparing both text and images.

Preview of the Gotem landing page
Architecture
Google · websites · Telegram
Scheduled scans on a queue
Text and image comparison
Per-customer evidence
Creator dashboard

Context

Creators of digital courses lose revenue to copies of their products sold or shared for free. Finding them by hand doesn’t scale. Gotem scans the web for them.

Constraints

  • Heterogeneous sources: search engines, websites and Telegram channels.
  • Copies are rarely identical: renamed titles, cropped covers, rewritten descriptions.
  • Each customer’s data must stay isolated.

Decisions and trade-offs

  • Scans on a task queue. Long, failure-prone searches run in the background with retries, without blocking the API.
  • Text and image comparison. Two independent pieces of evidence reduce false positives when a copy is disguised.
  • Isolation enforced in the database. Customer isolation uses Postgres Row Level Security and is proven by automated tests, not just by the application.

Result

Product launching, with a public landing page at usegotem.com.

What I’d do differently

Log every “copy / not a copy” decision confirmed by customers from the first day, to later train an in-house classifier on that history.

Stack

  • Python 3.12
  • FastAPI
  • Postgres + RLS
  • Task queue
  • pytest

See product ↗