← All projects

Fittir

A running-shoe recommender that matched runners to shoes from 25+ answers, backed by a catalogue that kept itself up to date with AI-summarised reviews and live deals from 15 retailers.

Web apps, AI agents, Automation, Integrations, Data & reporting

Type
My product
Status
Completed
Year
2026
Built with
Next.js, React, Node.js, Express, MongoDB, OpenAI, Puppeteer, Stripe, Shopify, AWS S3, Vercel, Render

Buying running shoes online is a guessing game. Every brand says its shoe is cushioned, responsive and stable. Reviews contradict each other. Sizing is a lottery. Most runners end up buying whatever their mate wears, or whatever's on sale.

Fittir fixed that. You answered questions about how you run, and it told you which shoes suited you, how well they matched, and why. Then it showed you where to buy them for the best price.

Impact

Google impressions a month
400k+
Average user satisfaction
4.7 / 5
Personalised recommendations
5,400+
Retailer deals matched by AI
16,000+

Behind those numbers: a catalogue of 1,000+ shoes and 4,000+ colourways, more than 16,000 reviews read and summarised by AI, and 15 retailer partners across New Zealand, Australia and the US.

How Fittir taught me to code

I was a product manager when I started Fittir. I couldn't afford to hire engineers, so I learned to build it myself. Every version of Fittir is also a snapshot of what I knew at the time.

  1. September 2023A templated EJS app

    An Express server rendering EJS templates, with a Passport login and every page built on the server. Ugly, but it worked, and people used it.

  2. March 2024Rebuilt in React

    The questionnaire had outgrown server-rendered forms. I rebuilt the front end as a React single-page app. The old Express server stayed on as the backend.

  3. November 2024Moved to Next.js for SEO

    A single-page app is invisible to Google. I moved everything to Next.js and generated around 1,070 pages: one per shoe, one per brand, and "best shoes for" pages like wide feet or plantar fasciitis. That's what drove most of our traffic.

  4. 2026Wound down, data kept going

    Fittir got more expensive to run than it earned. I shut down the consumer app in 2026. The catalogue lives on as a data service for retailers and brands.

How it was built

Fittir was really two systems. An admin server did the heavy lifting in the background: scraping, syncing and running AI agents on a schedule. The Next.js app sat on top of the database it filled and turned it into something a runner could use.

Data flows left to right. Scheduled jobs and AI agents turn messy retailer feeds and reviews into a clean shoe database, which powers the web app, the SEO pages and the retailer tools.

What I built

The recommendation flow

How wide are your feet? Do you over-pronate? Training for a half or an ultra? Fittir asked the questions a good shoe-shop fitter would. It took about 29 answers over a few minutes, with illustrations so you didn't need to know the jargon. Don't know your foot width? It helped you work it out from the label on the shoes you already own.

The foot width step. Answers are saved to your running profile, so you can come back and re-run it when your running changes.
fittir.io/recommendations/running-profile/foot-width/known
Fittir questionnaire: how wide are your feet?

Every shoe gets a match score

This is the bit I'm proudest of. I wrote the algorithm from scratch. Your answers become requirements: wide feet rule out narrow lasts, over-pronation calls for stability, a heavier runner going long needs more cushion. Each requirement comes with the research behind it.

Then every shoe is checked against 14 traits, each weighted by what matters for your surface and the kind of running you do. The score becomes a match percentage, and you can see exactly which traits passed and which didn't.

Results for a real runner: every shoe gets a match score, and the best ones are marked up front.
fittir.io/recommendations/results
Fittir recommendation results with match scores
The Reasoning tab. Each requirement shows why it matters for you, what can go wrong, and how important it was to your score.
fittir.io/recommendations/results
Fittir reasoning tab: why width matters for this runner

What reviewers actually say

Specs tell you a shoe has 40mm of foam. They don't tell you it feels firmer than it looks, or that it runs narrow in the toebox. Reviewers do, but nobody has time to watch 60 YouTube reviews.

So an AI agent did. It pulled every review, grouped the pros and cons by trait, and turned them into verdicts: runs narrow, true to size, firm or soft. Each one had a confidence score behind it. That sat next to the hard numbers, so you got both sides of the story.

The quantitative side: measured specs like stack, weight and drop.
fittir.io/shoes/hoka_bondi_9_male
HOKA Bondi 9 summary: measured specs
The qualitative side: AI verdicts from 96 reviews, like heel width and true to size, with the most mentioned pros and cons.
fittir.io/shoes/hoka_bondi_9_male
HOKA Bondi 9 AI pros and cons from 96 reviews

The data pipeline

None of that works without data. Every week a job searched YouTube and Google for new reviews of the latest shoes. It fetched the transcripts and article text, and used AI to check each review was actually about that exact shoe. Search for Bondi 9 reviews and you also get the Bondi 8, or a trail shoe with a similar name. Only then did it extract the pros, cons and score.

The pipeline's output on the Bondi 9 page. Each wear-tester review from YouTube and Google was checked and summarised by AI.
fittir.io/shoes/hoka_bondi_9_male
HOKA Bondi 9 wear-tester reviews from YouTube, summarised by AI

Partner deals

Retailers name products however they like. "new-balance-fuelcell-supercomp-elite-v5-2e-wide-mens-orange-yellow-pink" has to become the right shoe, width and colourway before anyone can compare prices. Every night Fittir pulled each retailer's range. An AI agent read the product titles, matched them to the catalogue, and used image recognition to match the colourway. Anything it wasn't sure about went into a queue for me to check.

The result was a live price comparison for every shoe, linked straight to the retailer.

Deals for the Bondi 9 from partner retailers, with the colourway, width and sizes each one has in stock.
fittir.io/shoes/hoka_bondi_9_male
HOKA Bondi 9 partner deals
Behind the scenes. Raw retailer listings arrive, and the agent notes what it did with each one: matched the shoe and width, or added a new colourway.
fittir.io/admin/partner-deals
Fittir admin: retailer deals processed by the matching agent

A database that maintains itself

Put together, those pieces meant the catalogue mostly looked after itself. New shoes came in from brand specs and retailer feeds. Deals added new colourways, widths and sizes. Reviews updated scores and verdicts every week. My job shifted from typing in data to checking what the agents weren't sure about.

An illustrated view of the admin catalogue: every shoe with its specs, colourways, live deals and review data, and where each piece came from.
fittir.io/admin/shoes

What I'd take from it

Fittir didn't make enough money to keep the consumer app running. It did teach me to code, to ship, and to build systems that run without me. Everything I build for clients now started here.