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
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.
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.
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.
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.
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.
Web app: Next.js on Vercel, magic-link auth with NextAuth, Stripe for credits and lifetime plans.
Admin and jobs: Express on Render with node-cron, running scrapers and AI agents on a schedule.
Data: MongoDB, with shoe photos processed and stored in S3.
AI: OpenAI for extraction, matching, review summaries and the shoe Q&A. Replicate and EdenAI to cut shoes out of retailer photos.
Scraping: Puppeteer, Serper for Google search, and YouTube search with transcript fetching.
Retailers: Shopify, Magento and affiliate feeds from Commission Factory and Rakuten.
What I built
The recommendation flow: a questionnaire covering 25+ things about how you run, saved to your account.
The matching algorithm: built from scratch. It scores every shoe against your profile and explains the result.
The AI review agent: it read YouTube and Google reviews for every shoe and summarised what reviewers actually thought.
The scrapers: they kept reviews, specs and stock flowing in without me touching them.
Partner deals: live prices from 15 retailers, matched to the right shoe and colourway by an AI agent.
A self-maintaining shoe database: 1,000+ shoes built from partner data, scrapers and AI, kept current automatically.
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.
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.The Reasoning tab. Each requirement shows why it matters for you, what can go wrong, and how important it was to your score.
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.The qualitative side: AI verdicts from 96 reviews, like heel width and true to size, with the most mentioned pros and cons.
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.
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.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.
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.
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.