Trademark protection platform

Markatzy

A trademark watch platform for Ecuador. Every month the national IP office publishes around 1,800 new applications, and owners have 30 days to oppose a conflicting one. Markatzy reads each gazette, compares every application with the brands it watches on four dimensions, and drafts the opposition letter when a conflict warrants it.

Role
Founder; sole designer and developer
Period
2023 - present
Stack
Next.js, tRPC, Prisma, PostgreSQL with pgvector, pg-boss, Claude and Cohere on AWS Bedrock, Tesseract, Railway
markatzy.com
3,000+commits in twelve months
858automated tests
127klines of TypeScript
4similarity dimensions

From gazette to opposition letter

  1. 01Gazette pagesThe monthly gazette arrives as scanned pages, about 900 an issue, stored in S3.
  2. 02OCR and parsingColumns, logos and fields are detected per page; entries are parsed and scored for confidence.
  3. 03Human reviewA reviewer confirms the layout and clears the least certain entries first before import.
  4. 04MonitoringA background job compares every watched brand with the new issue on four dimensions.
  5. 05Opposition letterClaude drafts the letter from the legal knowledge base, each citation linked to its article.

The problem

Under the Andean Community's Decision 486, anyone with a legitimate interest can oppose a trademark application within 30 days of its publication. In Ecuador the IP office (SENADI) publishes applications in a monthly gazette of roughly 1,000 to 2,300 entries, as scanned pages. A firm watching 100 brands has to weigh about 170,000 pairs every month, and the conflicts that matter are often phonetic or visual, not identical spelling.

I met this problem as a trademark attorney, filing and opposing applications before SENADI, and wrote my first comparison scripts for it then. Markatzy is that work turned into a product.

Four ways two marks can collide

Each application is scored against each watched brand on four dimensions. The overall score is the highest of the four, with the dimension that produced it, because a single strong resemblance is enough to confuse the public. Each organization sets its own thresholds, and the overlap of Nice classes is shown as context, not folded into the score.

  • Phonetic: brand words are transcribed into the International Phonetic Alphabet in Spanish and in English (eSpeak NG); digits are read both as words and as letters, and the best of up to 16 variant pairs counts
  • Typographic: edit distance, plus checks for one mark contained in the other and for the best matching word
  • Semantic: Cohere text embeddings compare meaning, so translations and synonyms surface
  • Visual: the logo image and the published mark share one embedding space, so a logo is compared with every mark in the registry without embedding each registry logo

Search in two steps

Scoring every pair fully would be slow, so search runs in two steps. A cheap prefilter keeps candidates whose Double Metaphone code or trigram profile is close, capped at 2,000; only those get the phonetic, typographic, semantic and visual scoring. Trigram matching was added to the prefilter after Metaphone alone missed marks with an added suffix, such as flete against fletex.

Reading the gazette

The OCR pipeline works on page images. Gazette text is printed in pure grey, so any colour on the page marks a logo; columns are found from the density of ink down the page, and Tesseract reads each column. Entries are split on the gazette's numbered field codes, stitched across page breaks and given a confidence score over ten fields.

A person stays in the loop: a reviewer confirms each page layout before detection runs and works through the entries lowest confidence first. Automatic repairs, such as removing text that leaked in from a neighbouring entry, run only when the fix is unambiguous.

Opposition letters with their sources

When a conflict warrants action, Claude drafts the opposition letter. The mandatory articles of Decision 486 are always in its context, and it can look up further articles in a legal knowledge base through search tools: vector search plus a small graph of which articles cite which. Every citation in the letter is linked to its source article in an audit trail the attorney can check, and the letter renders as a PDF ready for review.

The knowledge base itself is a folder of 82 plain-text notes in git that an attorney can edit, synchronized one way into the database. A graph database was considered and rejected as more than a corpus this size needs.

Security and data protection

Built for several firms on one system, with data protection under Ecuador's LOPDP from the start.

  • Every query on firm data is scoped to the firm's organization, enforced in the API layer
  • Tiered rate limits on registry, search and letter endpoints, against scraping and runaway costs; IP addresses are hashed before use
  • Payment webhooks verified by signature and processed once, whatever the number of retries
  • Audit trails for case activity, registry corrections and the references behind each letter
  • Versioned privacy policy and terms, with each user's accepted version recorded
  • All AI models run on AWS Bedrock, so no model API keys exist to leak

Engineering practice

More than 3,000 commits in twelve months, written to a project constitution and specifications first. 858 automated tests, and a continuous integration pipeline that runs type checks, linting, migrations against a real PostgreSQL with pgvector, and a SonarQube quality gate that fails the build. The application and its background workers run on Railway from one image; the batch worker scales to zero and wakes for the monthly gazette.

Screenshots

The brands a firm watches, with their monitoring switches.
Searching the latest gazette, with adjustable sensitivity.
Conflicts, each scored on the four dimensions.
Two marks side by side, with goods, classes and applicants.
A drafted opposition letter, ready for the attorney's review.

Markatzy is in production in Ecuador with a free tier. Figures from the repository as of July 2026; screenshots use public gazette data.