Case Studies

How I rebuilt a restaurant site from WordPress to Astro

5 min read
How I rebuilt a restaurant site from WordPress to Astro

I rebuilt Bubbeleh, a Middle Eastern street food spot in Pinheiros, São Paulo, from WordPress to Astro. Same brand, same menu, a new foundation under it. The rebuilt site scores 100 on mobile PageSpeed, holds an A+ security grade, and picked up its first visits from ChatGPT this month.

This is a record of that project: what the site is, the numbers it hits, and how I moved it. For the longer argument on why I build on Astro instead of WordPress or React, I wrote that up on its own and linked it at the end.

The site

Bubbeleh sells falafel, shawarma, sabich, and bureka in Pinheiros. The site has one job: take a hungry visitor to the menu, then to an order on iFood or a walk-in.

So the design stays out of the way. The menu runs in three languages, Portuguese, Hebrew, and English. There's a short story about the place and the people behind it, and every page ends at one clear action.

The Bubbeleh homepage menu: Nossa jornada gastronomica, cards for falafel, shawarma, and gyros with photos and prices.1 / 7
The homepage menu, Nossa jornada gastronomica, in Portuguese, Hebrew, and English.

And here it is on a phone, where most hungry visitors actually land. It's built mobile-first, so every screen is one tap from an order.

The Bubbeleh home page on a phone: Bem-vindo ao Bubbeleh over a photo of the food, with order and menu buttons.1 / 7
Home on a phone, one tap from an order.

The numbers

On a throttled 4G phone, the site paints its main content in 1.7 seconds and scores 100 on performance, 96 on accessibility, 100 on best practices, and 100 on SEO in PageSpeed Insights, with a Cumulative Layout Shift of 0.

Google PageSpeed Insights mobile report for Bubbeleh: 100 performance, 96 accessibility, 100 best practices, 100 SEO, and a Cumulative Layout Shift of 0.
Bubbeleh on mobile PageSpeed Insights: 100 performance, 100 SEO, LCP 1.7s, CLS 0.

Security cleared the same bar before launch. Bubbeleh gets an A+ on securityheaders.com and 115 on Mozilla's HTTP Observatory, 10 tests out of 10.

Mozilla HTTP Observatory report for bubbeleh.com.br: score 115 out of 100, grade A+, 10 of 10 tests passed.
bubbeleh.com.br on Mozilla HTTP Observatory: A+, 115/100, 10/10 tests passed.

The number I watch most is small and recent. The site picked up its first visits from ChatGPT this month, up from 0. First AI-search visits on a site I built tell me more than any projection.

How I moved it

The migration was quicker than people expect, because the site is small and I knew the target.

Content came out of WordPress first. WordPress has a built-in export, and open tools turn that export into clean Markdown. For a menu-and-story site, that's a couple of hours of exporting and tidying.

Then I rebuilt the templates by hand in Astro: the homepage, the menu, the story, the layout. Building fresh means the HTML is mine, clean and light, instead of dragging a page builder's markup across.

Redirects came next, and they're the step that protects your rankings. Every old WordPress URL with traffic or a link got a 301 to its new home. I kept the URL structure where it made sense, resubmitted the sitemap, and watched Search Console for a week. A migration done this way holds its rankings instead of resetting them.

Deploy is a Git push. Cloudflare Pages builds the site and serves it from its edge, and a change ships in under a minute. There's no server to patch, and no plugin update breaking the front page at 2am.

I built the whole thing with Claude Code driving the work. I steer the content, the design direction, and the standard the site holds to, and it writes the features and flags what's missing. On a flat Astro project that loop is fast, and the pillar-and-cluster structure that AI search rewards came together in a fraction of the time it used to take.

Why Astro

Three things settled it. The site is fast, because Astro ships static HTML and almost no JavaScript. It's mine to control end to end, since I develop it and I maintain it. And it's genuinely good to build on, which keeps the work quick.

That's the short version. I put the full case, Astro against WordPress, React, and plain static HTML, in a separate piece: why I build on Astro now.

Want this for your site?

If your site is slow, stuck on WordPress, or just heavier than it needs to be, tell me about it. Tell me about your project and I'll give you a straight answer on the right stack for it: Astro, headless, or leaving it where it is.

FAQ

Can you migrate from WordPress to Astro without losing SEO?

Yes, if you handle redirects. Add a 301 from every old WordPress URL that had traffic or a link, keep the URL structure where it makes sense, and resubmit your sitemap. Done that way, a migration holds its rankings instead of resetting them.

How long does it take to migrate a WordPress site to Astro?

For a small site it is days, not weeks. Content exports from WordPress into Markdown in a couple of hours, the templates get rebuilt by hand in Astro, and deploy is a Git push. A large site with many custom plugins takes longer.

Can a non-technical owner still edit an Astro site?

Yes. Put a headless CMS in front, Payload or WordPress running headless, and the owner logs in, edits a price, and the site rebuilds and ships in about a minute. The public site stays static and fast.

How much does it cost to host an Astro site?

Almost nothing for a small site. Astro builds to static files that run on a free tier like Cloudflare Pages, with no server to rent and no premium plugin renewals. The running cost rounds down to the price of the domain.