Robbin Schuchmann
Robbin Schuchmann
June 6, 2025

Speeding Up My Site Before Launch (It Was BAD)

So here's the thing - yesterday I spent hours optimizing the backend of my travel directory, and wow, the difference was incredible. Like, I've been clicking around the admin dashboard and it's actually way faster now. But then I realized something pretty obvious: what's the point of having a lightning-fast admin panel if the actual website that users see is still slow?

Quick summary

I'm in day whatever of my 60-day challenge to build a travel directory here in Bali, and I just hit a major milestone - optimizing the frontend performance of my marketing pages. Plus I had to fix some annoying bugs that popped up after recent changes. It's messy, it's real, and I'm sharing exactly what went wrong and how I fixed it.

Why frontend speed actually matters (more than I thought)

Living here in Bali, I've noticed how much internet speeds vary depending on where you are. Some cafes have blazing fast wifi, others... well, let's just say you're lucky if a page loads at all. This made me realize that if my site is slow, I'm basically excluding a huge chunk of potential users.

The marketing pages are everything public-facing - the stays, dining options, experiences, all the informational stuff that actual travelers will see. If these pages are slow, people will just bounce to Airbnb or Booking.com instead. Not exactly the outcome I'm going for.

The optimization plan (thanks Cursor AI)

I opened up Cursor and basically said: "Hey, can we optimize our marketing pages? Check what can be done, come up with a plan, and let's solve this step by step. Just don't break anything."

Without me even asking, it immediately started implementing changes. Sometimes I love AI, sometimes it scares me a little.

Here's what it recommended:

Step 1: Convert main pages to server-side rendering

The stays page and dining page were the biggest culprits. Cursor suggested converting them to SSR (server-side rendering) which basically means the server does more work upfront so the user gets a faster experience.

It also enhanced the stays page with proper pagination - now it shows "X of Y stays" instead of trying to load everything at once. Much better user experience.

Step 2: Optimize client-side components

The next phase was all about client-side filtering, debounced search, and virtual scrolling. I'm actually going to tackle this later because I want to make some changes to the search functionality first. No point in optimizing something I'm about to redesign, right?

The bug that almost broke everything

Okay, so this is where things got interesting (and by interesting, I mean frustrating). After making these changes, I noticed that clicking on any stay was throwing errors. Two specific errors that made the whole page crash.

The culprit? A component called "get similar stays" that shows other listings when you're viewing a specific stay. Sounds simple enough, but here's what went wrong:

Since I hadn't set featured images for some listings (just uploaded random images), the component couldn't parse the image properly. When someone tried to navigate to a stay page, it would attempt to load the image, fail, and crash the entire app.

Plot twist: the URL logic was also wrong. I had recently changed single stays to use /stay/ instead of /stays/ in the URL structure, but forgot to update this component. So it was still trying to link to the old URLs.

How I fixed the image parsing issue

The fix was actually pretty straightforward once I identified the problem:

  1. Set proper featured images: Made sure every listing has a designated featured image

  2. Add error handling: Updated the component to gracefully handle missing images

  3. Fix URL structure: Updated all internal links to use the new /stay/ format

I also asked my VA to add placeholder images for listings that don't have proper photos yet. Sometimes the simplest solutions are the best ones.

The UI reality check

I'm not gonna lie - after all these technical improvements, I looked at the actual design and thought "I don't like this UI anymore." Everything we built, the whole interface... it just feels off now.

But here's the thing: I need to decide if I want to redesign everything before launch or after. The sooner I can go live, the faster I can get some traction and start generating either revenue or more invitations to stays. Sometimes good enough is better than perfect.

What's still loading slowly (and why)

Even after the optimizations, some components are still loading slower than I'd like. The similar stays section, for example, now has lazy loading but it's still not as snappy as I want it to be.

I think part of the issue is that I'm making separate queries for each room type and image set. It works, but it's not the most efficient approach. This is definitely something I'll optimize in the next iteration.

Current results and what works

The good news? The core functionality is solid:

  • Stay pages load properly: No more crashes when viewing individual listings

  • Affiliate links work: The "Book Now" buttons correctly redirect to Airbnb, Booking.com, or the property's own website

  • Location filtering works: When you click on "Hotels in Bali" it actually filters by location now

  • Room components hide properly: If a stay doesn't have room data, the rooms section doesn't show up

Lessons I'm taking from this

  • Test everything after major changes: Those bugs only appeared after I made the speed optimizations

  • Images matter more than you think: A missing featured image can crash your entire component

  • URL consistency is crucial: One wrong link structure can break the user experience

  • Sometimes AI moves too fast: Cursor started implementing before I finished explaining what I wanted

Git commits are your lifeline

Okay, I'm going to emphasize this again because I see too many people on Twitter losing their entire codebase: use GitHub. Every time you make changes, commit them. Use GitHub Desktop or push directly through Cursor, I don't care which method you choose.

I literally do this after every feature or optimization. "Speed optimization marketing pages" - commit and push. Don't lose weeks of work because you forgot to save your progress.

What I'm tackling next

Next episode, I'm doing a complete walkthrough of the platform. I want to see what we can change, what we should add, what we're missing. Then I'll add everything to a proper todo list.

In the meantime, I have my VA and Grace adding more listings and restaurants so we have a complete directory. I also need to sit down with Grace to create a proper review template. Right now everything is just AI-generated content, which isn't adding real value for travelers.

The goal is to create templates that we can use for every stay while actually providing useful insights for readers.

Final thoughts

Building in public means showing the messy parts too. Today was a mix of genuine progress (faster pages!) and frustrating bugs (crashed components!). But that's exactly what building something real looks like.

The site is getting closer to launch-ready every day. Not perfect, but functional and fast enough for real users. Sometimes that's exactly what you need to move forward.


Following along with my 60-day challenge? I'm documenting everything as I build this travel directory from scratch here in Bali. The good, the bad, and the bugs that make me question my life choices

Robbin Schuchmann

Robbin Schuchmann

Entrepreneur and founder of multiple companies in the global employment space. Passionate about simplifying global hiring and connecting talent across borders.

Speeding Up My Site Before Launch (It Was BAD) | Robbin Schuchmann