jp ferreira
← All projects
In use since 2024

Medium Marketing

An internal AI-powered SEO audit tool built for the director of a marketing agency. Audits any public website on demand and produces structured guidance on content, keywords, metadata, descriptions, and internal linking - turning a manual hours-long task into a minutes-long workflow.

Role
Sole Builder
Period
2024

// 01

Problem

Medium Marketing is a marketing agency whose director needed a faster, more consistent way to audit client websites for SEO. The existing process was manual and time-consuming: open the site, read pages, eyeball the metadata, check headings, sample the keyword usage, look at internal linking, write up findings, and translate all of that into actionable recommendations for the client. Done well, it took hours per site. Done quickly, it missed things.

The goal was not to replace SEO expertise but to compress it. The director knew what good looked like; what was missing was a tool that could capture a site's current state, run it through a structured set of SEO checks, and produce an opinionated, useful starting report in minutes rather than hours. That report could then be reviewed, edited, and delivered with the director's own judgement layered on top.

This was a freelance engagement and a genuine internal product - built for one user, deployed for real day-to-day use, and shaped by direct feedback from the person using it.

// 02

Technical Approach

The tool was built as a Next.js application in TypeScript, chosen for fast iteration, a clean React component model, and straightforward deployment. The frontend gave the director a simple workflow: paste a URL, choose what to audit, and receive a structured report back.

Under the hood, the application fetched and parsed the target website's public content - page text, headings, metadata, descriptions, internal link structure - and built a structured representation of the site's current SEO posture. That representation was then passed to the OpenAI API alongside carefully designed prompts that instructed the model to evaluate the site against established SEO principles: keyword targeting and density, metadata quality, heading hierarchy, content depth and relevance, internal linking patterns, and opportunities for improvement.

The output was an actionable report grouped by category, with both observations and specific recommendations. Rather than asking the AI for a freeform opinion, prompts were structured to produce consistent, scannable results that the director could quickly review and refine.

This project began as a quick prototype to validate the idea. It worked well enough on real client sites that it transitioned from experiment to real working tool, and was extended over time with additional audit dimensions and refinements based on how it was actually being used. It is an internal-only tool with no public URL.

// 03

Interesting Hard Bits

The interesting work here was not the surface UI - it was prompt design and output reliability. Asking an LLM to 'audit this site for SEO' produces vague, generic advice. Asking it to evaluate specific dimensions of a structured input, in a defined output shape, against specific criteria, produces something a working professional can actually use. A meaningful chunk of the project was iterating on prompts, evaluating outputs against real sites, and tightening the instructions until the results were consistently useful.

The second interesting challenge was handling messy real-world web content. Pages have inconsistent markup, missing metadata, redirects, slow responses, and edge cases that don't appear on tidy demo sites. Building a fetching and parsing layer that degraded gracefully - and still produced a useful report when parts of the site were imperfect - was more involved than the simple version suggested.

What I'm most proud of with this project is that it succeeded at its real test: someone used it, every day, to do their actual job better. It wasn't a portfolio demo. It started as a prototype, earned its place by being useful, and kept being used because it kept being useful. That feedback loop - building something small for one real user and watching it become part of their workflow - is some of the most satisfying engineering work I've done.

Tech Stack

Frontend

Next.jsReactTypeScriptTailwind CSS

AI

OpenAI

Highlights

Engineering approach

  • Prompt design and iteration against real client sites
  • Structured output extraction with consistent report shape
  • Web content fetching and parsing with graceful degradation
  • Solo build, end to end

Product context

  • Internal-only tool, no public URL
  • AI-assisted SEO auditing workflow
  • Compresses hours-long manual audit into minutes