MenuPriceToday 30,000 Server-Rendered Fast-Food Price Pages Across 22 Countries

A live fast-food price tracker across 22 countries — one data-engineering pipeline turned into 30,000+ server-rendered, schema-rich programmatic-SEO pages on a single Laravel + Next.js codebase, tuned for Core Web Vitals.

TYPE · SAASYEAR · 2026View project website
menupricetoday.com
MenuPriceToday — 30,000 Server-Rendered Fast-Food Price Pages Across 22 Countries — screen 1
STACKLaravel 12PHP 8.2FilamentLaravel Scheduler + cronNext.js 16 App RouterReact 19TypeScriptTailwind v4MySQLAnthropic ClaudeCloudflareLiteSpeedIndexNowGoogle Indexing APIGA4 + Search ConsoleSpatie (permissions/activity-log/media)

Project overview

MenuPriceToday tracks fast-food menu prices across 22 markets and turns one scraping-and-scheduler pipeline into 30,000+ country-first pages — every brand, city and branch, server-rendered (SSR) with real prices, hreflang and full Product/Restaurant schema. I built per-brand and delivery-marketplace collectors behind a single source registry, wired price-history with change detection, and scheduled the whole refresh on Laravel's scheduler and a system cron — no third-party automation tool. On top of that I engineered the frontend for Core Web Vitals, cutting homepage LCP from 4.6s to 3.0s and mobile Total Blocking Time from 660ms to 30ms with CLS held at 0. It's the same web-scraping + Claude + programmatic-SEO architecture I build for clients, run with the operating discipline behind FlowMaticX, my AI SaaS that real businesses use.

CLIENT
MenuPriceToday (my own product)
INDUSTRY
Food Data / Price Intelligence

Results

22
Countries on one codebase
30,000+
Programmatic pages generated
4.6s → 3.0s
Homepage LCP (mobile)
660ms → 30ms
Mobile Total Blocking Time

The challenge

Fast-food prices change constantly and differently in every country, and there's no single place to see what a McDonald's, KFC or Burger King item actually costs today across markets. The source data isn't built to be queried at scale, and a manual approach is stale within days. The hard part wasn't scraping one menu — it was turning one scheduled pipeline into tens of thousands of pages (a page per brand, per city, per branch, per country) that are each individually accurate, server-rendered for search engines, correctly localized with hreflang, and still fast on a phone. I built MenuPriceToday to prove I can run a data pipeline and programmatic SEO at real scale without a team copying menus by hand — the same architecture and operating discipline behind FlowMaticX, my AI SaaS that real businesses run on. If you need a data or SEO pipeline built and running unattended at scale, book a free call.

What I built

Built per-brand PHP collectors for major chains (McDonald's, KFC, Burger King, Jollibee, Subway) plus delivery-marketplace collectors, all behind a single source registry that maps each brand + country to its collector and refresh schedule
Made every collection run self-reporting — items collected, price changes detected, branches found and run duration are recorded per job — so the pipeline is auditable, not a black box
Scheduled the whole refresh on Laravel's native scheduler driven by a system cron: per-brand weekly runs, an hourly 'due' checker, and monthly store-discovery — no third-party automation tool in the loop
Engineered price-history with change detection (a scheduled price snapshot) so every price move is captured with a timestamp
Designed a country-first URL architecture (country → brand → menu, cities, branches and item pages) that generates 30,000+ pages from one dataset, with a data-gated XML sitemap that excludes thin and zero-price URLs so only real pages get crawled
Server-rendered all the money content — prices, H1s and JSON-LD — so crawlers get real HTML instead of a client skeleton, then layered ISR + Cloudflare edge caching for fast warm TTFB
Built the full structured-data graph: Product + Offer + Brand on item pages, Restaurant + GeoCoordinates + PostalAddress on city pages, and FAQPage + BreadcrumbList + Organization/WebSite sitewide, with hreflang and self-referencing canonicals across all 22 markets
Engineered Core Web Vitals down: cut homepage LCP 4.6s → 3.0s and mobile TBT 660ms → 30ms (removed a main-thread count-up animation, SSR-seeded the stat strip, added content-visibility, right-sized oversized logos) with CLS held at 0
Integrated an Anthropic Claude price assistant (a Laravel client service + chat API, with prompts managed from the admin) that answers menu-price questions in plain language
Ran a Filament admin (Spatie permissions/activity-log/media) for brands, items, prices, countries and sources, plus an IndexNow + Google Indexing API submission pipeline and a GA4 + Search Console toolkit for daily organic and index-coverage monitoring

Key features

22-COUNTRY PRICE TRACKING30,000+ PROGRAMMATIC-SEO PAGESPER-BRAND + DELIVERY-MARKETPLACE COLLECTORSLARAVEL SCHEDULER + CRON (WEEKLY REFRESH)PRICE-HISTORY + CHANGE DETECTIONCOUNTRY-FIRST URLS + HREFLANGPRODUCT/OFFER + RESTAURANT SCHEMASSR MONEY CONTENT + ISR + EDGE CACHEAI PRICE ASSISTANT (CLAUDE)FILAMENT ADMIN + INDEXNOW / INDEXING API

Anyone can build one price page. The hard part was making 30,000 of them — one per brand, city and country — each server-rendered with real prices and correct schema, and keeping them fast on a phone. The collectors run on a plain cron and Laravel's scheduler, nothing fancy, and that boring reliability at scale is the part I'm proudest of.

Waqas Ahmed Waseer, builder of MenuPriceToday

Discuss this project

Want the same stack on your site? Fill this out to get started.

The same stack is what I install for clients — live on your site in 14 days.