Case study
BookModels: a 2 month rebuild that 5x’d search clicks and lifted daily revenue 715%
We took an unmaintained PHP site off GoDaddy and rebuilt all of it, the marketing site, the model and advertiser app, and the admin, on Vercel, Supabase, Astro, and Next.js. Search traffic, page speed, and revenue all moved in the same direction at the same time.
Visit BookModels// results: bookmodels.com
Avg daily revenue
+715%
Search clicks
~5x 6x trough to peak
Search impressions
786K
Core Web Vitals, mobile
50s → 99/100
Lighthouse perf + SEO
100/100
Rebuild time
2 mo
01 A fast enough idea on a stack that could not keep up
BookModels is a two sided marketplace. Models list profiles on one side, advertisers book them on the other, for events, shoots, conventions, brand work, and product demos. The product worked, in the narrow sense that it was online. Everything underneath it was a problem.
It ran on PHP and MySQL inside a GoDaddy cPanel account, and it had not been touched in a long time. Pages were slow. On mobile, most of the site scored in the low 50s for Core Web Vitals, and the pages people actually convert on, login, hire, the article hub, dropped into the 40s and the 30s.
The business model had the same shape as the codebase. One lifetime offer. A model paid once and was listed forever. A lifetime price feels generous to the customer and looks clever on a landing page. It is also a slow way to run out of money on the people who like your product the most, because the relationship turns into pure cost the day after they pay.
So the brief was not a fresh coat of paint. It was a full rebuild, with the search rankings kept intact, and a revenue model that grows instead of caps.
02 A full rebuild in two months
The marketing site, the model and advertiser app, and the admin that runs it, all rebuilt.
The marketing site runs on Astro. It is static and fast, and the home page ships almost no JavaScript to the browser, which is most of why it loads the way it does. The app runs on Next.js. Data, auth, and storage sit on Supabase. The whole thing is hosted on Vercel, with Cloudflare handling DNS and image storage. None of that stack is exotic. The point of naming it is that boring, well chosen infrastructure is what lets a two person job hold up under 50,000 profile pages.
Before

After

03 We kept the rankings, then grew them
A migration that did not cost traffic
The accepted wisdom on a site migration is that you brace for a traffic drop and claw it back over the next three months. We did not want to spend a quarter recovering ground the old site already held.
So we kept every URL slug that was already ranking, exactly as it was, and set 301 redirects only where the structure genuinely changed (the old cities path now canonicalizes to /locations). Search engines saw the same addresses pointing at faster, better pages, not a new site they had to relearn.
Clicks went up after launch instead of down. You can see the line.

The programmatic surface is the engine
The growth is not one or two hero pages. It is a large, genuinely useful long tail built from real data:
- profile pages for 40,000+ models and 10,000+ advertisers
- 92 city pages
- 104 model type pages
- the combinations of the two, so a query like Los Angeles print models lands on its own page (live: /models?city=los-angeles&type=print)
That is tens of thousands of pages, and they are organized so search engines can crawl them without choking. The index is split across a primary sitemap plus content, profile, and photo sub sitemaps, with a robots file that points at the right places. Big surface, clean structure.
Before

After

Speed people can feel
Mobile Core Web Vitals went from the low 50s to 99 and 100 across the site. The home page passes Core Web Vitals on real Chrome user data, on both mobile and desktop, with Lighthouse Performance and SEO each at 100.
Mobile

Desktop

// core web vitals: mobile lighthouse, best of two passes
A couple pages were already light on the old site and scored well. The pages that mattered most for converting visitors were not, and those are the ones that moved the furthest.
Ready for AI search, not just Google
PageSpeed now scores the site 2 of 2 on agentic browsing. That is a 2026 way of saying AI crawlers and assistants can read the pages and act on them. As AI search starts sending real referral traffic, a site that is already legible to it keeps compounding while everyone else scrambles to retrofit.
04 Knowing which side of the marketplace pays
A two sided marketplace has two funnels: getting models to list, and getting advertisers to book. You cannot run paid acquisition or lifecycle email against either one if you cannot see which actions matter. The old site could not. There was no usable measurement on it at all.
We wired the same event model we run on our own products. Every event belongs to exactly one of three categories, and the category decides where it fires from.
Server only
Subscription renewals, finished syncs. These fire from the server, where the data is authoritative.
Through the server
A booking message, a token purchase, a new subscription. GA4 fires from the browser on purpose, so Google Ads attribution survives. The lifecycle email fires from the server, where we can trust what actually happened.
Browser only
Hitting a limit, opening a modal. These fire client side, with a beacon for the cases where the visitor is about to navigate away and a normal request would get killed mid flight.
On top of that taxonomy: GA4 for product analytics, Google Ads for paid attribution that ties back to revenue rather than to clicks, and Microsoft Clarity for session replay and heatmaps, so we can watch where real people get stuck instead of guessing.
All of it runs behind a consent gate that handles the EU (opt in), the US (opt out), and a worldwide default, so analytics and ads only fire on the legal basis each visitor allows. Compliance and measurement are not at odds when the consent logic is built in from the start rather than bolted on.
05 From one payment to revenue that grows
The lifetime offer is gone. In its place, recurring revenue on the model side and consumable tokens on both sides.
Models
Pay a subscription to keep an active, ranked profile, and can buy ranking boost tokens to climb the rankings board for a window when it matters to them.
Advertisers
Spend tokens to unlock a model’s social handles and to message them to book.
The profile

The rankings board

Here is the part that pays for itself. A lifetime price collects once, and after that the most engaged users on the platform are the most expensive ones to keep serving. Recurring revenue plus usage based tokens flips that: the more value a model gets from being seen and the more an advertiser gets from booking, the more the platform earns, every month, from both sides at once.
Average daily revenue rose 715% after the change.
06 The product talks back
Most feedback dies in an inbox. We put a Feedback button in the corner of every dashboard, and what a user types there does not drop into a support queue nobody reads. It opens a ticket on the dev team’s Jira board, tagged by type, in the same To Do, In Progress, Done flow the engineers already work from.


Then the loop closes, which is the part most products skip. When a suggestion is acknowledged, when a bug is fixed, when a requested feature ships, the person who asked for it hears back, through in product messaging plus email or Telegram, whichever they have connected.
A roadmap built from what users actually ask for beats one built from what a team assumes they want, and telling someone you shipped their idea is some of the cheapest retention there is. The board fills with the real stuff: preview a profile before it goes live, see who you rank against in a category, fix a city that got assigned wrong. Some of it is just praise. All of it reaches the people who can act on it.
06 The brand caught up too
The old site read like a directory from 2014, right down to a blog post titled “Top 10 Butt Models.” The new one is editorial. Real typography, a clear position as the inclusive modeling platform, and photography that looks like a brand instead of a stock library.
Before

After

Before

After

You cannot put a single clean number on brand lift. You can see it in the before and after, and you can see it in who replies to a booking request now versus who did before.
07 Two months, three things moving at once
- Average daily revenue rose 715%
- Search clicks climbed roughly 5x at the peak, against 786K impressions over the window
- Mobile Core Web Vitals went from the low 50s to 99/100, with the home page passing on real user data
- Lighthouse Performance and SEO both hit 100
- The site reads cleanly for AI crawlers, scoring 2/2 on agentic browsing
The change is night and day! Whenever you work with somebody, you always wonder if it will pan out. The work Niche Nudge did was great, and well communicated the whole time. Highly Recommend.
Owner, BookModels
Work with us
We rebuild marketing sites, and the businesses attached to them.
And we keep the rankings while we do it. If that is the spot you are in, let’s talk.
Start a conversation// see it live: bookmodels.com →