Robbin Schuchmann
Robbin Schuchmann
June 5, 2025

Boost Admin Dashboard SPEED with These Simple Tricks

You know what's been driving me absolutely crazy? My admin dashboard was slower than a tourist trying to order nasi goreng in broken Indonesian. Every click felt like waiting for dial-up internet to load a single image.

Quick summary

After weeks of ignoring the performance issues in my Bali travel directory project, I finally tackled the speed optimization head-on. Using Cursor AI and some strategic Next.js 15 tweaks, I managed to boost my admin dashboard performance by 85% in just one session. Here's exactly how I did it (and what went wrong along the way).

Why this performance stuff actually matters

Living here in Bali, I've learned that patience is a virtue - except when it comes to slow websites. I'm building this travel directory as part of my 60-day challenge, and honestly, the sluggish admin panel was killing my productivity. Every time I wanted to add a new location or activity, I'd click something and then literally go make coffee while waiting for it to load.

The thing is, I knew it was slow. I'd been telling myself "I'll fix it later" for weeks. But you know what happens with "later"? It becomes "way later" and then "why is this still broken?"

The wake-up call that made me finally act

Yesterday, I was trying to upload location images for the directory, and the whole process took forever. I'm talking about simple image uploads taking 30+ seconds. That's when I realized - if I can't even use my own admin dashboard efficiently, how am I supposed to scale this thing?

So I did what any reasonable developer does: I asked Cursor AI to create a performance optimization plan. Because let's be honest, sometimes you need an AI to tell you what you already know but have been avoiding.

What I tried first (and why it almost broke everything)

Here's where I made my first mistake. I jumped straight into the optimization without properly understanding what we were dealing with. See, in my previous project, I used the old Supabase client, but this time I'm using Supabase SSR with Next.js 15.

I was worried Cursor might get confused and suggest fixes for the wrong setup. You know what's funny? I spent like 10 minutes just making sure the AI knew exactly what stack I was using. Sometimes being overly cautious actually saves you hours of debugging later.

The plan looked solid:

  • Convert client components to server components where possible

  • Optimize Google Maps loading

  • Remove unnecessary dependencies

  • Clean up console logs (yeah, I had way too many of those)

The breakthrough moment

I decided to start with the "safest" optimization first - converting unnecessary client components to server components. This is where Next.js 15 really shines. The new server components can handle so much more than the old versions.

Cursor suggested removing "use client" from components that didn't actually need client-side interactivity. Sounds simple, right? But I was nervous. What if it broke my authentication? What if the whole admin dashboard stopped working?

Here's how I actually optimized everything

Step 1: Server component conversion (the scary but simple part)

First thing I did was verify how my authentication works. I'm using a profiles table in Supabase with role-based access, and I wanted to make sure converting to server components wouldn't mess that up.

The conversion itself was surprisingly straightforward. Cursor literally just removed "use client" from components that were only doing server-side data fetching. No complex refactoring, no rewriting entire components.

The crazy part? This change alone made everything feel noticeably faster. Like, immediately faster.

Step 2: Google Maps optimization (finally fixing a stupid mistake)

Here's something embarrassing - I was loading Google Maps on every single admin page, even pages that had nothing to do with maps. Why? Because I put the Maps component in the layout file like an amateur.

The fix was moving Google Maps to only load on pages that actually need it. This cut down the initial bundle size significantly and reduced the number of API calls I was making to Google.

Step 3: Cleaning up the mess (console logs and unused imports)

You know what's really embarrassing? Having hundreds of console.log statements scattered throughout your production code. I'm talking about debug messages like "USER DATA:", "LOADING STATE:", and my personal favorite, "WHY IS THIS NOT WORKING???"

Cursor helped me clean all of these up systematically. It also removed unused Material UI imports that were just sitting there, bloating the bundle size.

The stuff that went wrong (because it's never that smooth)

Of course, not everything went perfectly. About halfway through, I realized that the optimization plan suggested removing TipTap editor, which I actually need for rich text editing. I had to stop and clarify that we're keeping TipTap because I plan to use it for blog posts later.

Also, there was this moment where I thought everything was broken because one of the admin pages wasn't loading properly. Turns out, it was just a routing issue that got introduced during the conversion. A quick double-check fixed it.

The lesson here? Always test each change before moving to the next one. I learned this from experience - the hard way.

How I fixed the remaining issues

The trickiest part was making sure all the admin pages were properly converted, not just the layout. I had to go through each page individually and verify that the server component conversion was complete.

There was also this weird issue where some state wasn't populating properly after the conversion. It took me a while to figure out that I needed to adjust how I was handling data fetching in the server components.

What the dashboard looks like now

The difference is honestly night and day. What used to take 5-10 seconds to load now happens almost instantly. Adding new locations, uploading images, managing activities - everything just feels snappy and responsive.

I can actually be productive in my own admin dashboard now, which sounds basic but was a real problem before.

The best part? The changes were mostly under the hood, so the UI looks exactly the same to users. They just get a much faster experience.

Lessons I'm taking from this whole experience

  • Don't ignore performance issues - They only get worse as your app grows

  • Server components in Next.js 15 are incredibly powerful - Use them whenever you can

  • AI can create great optimization plans - But you still need to understand what you're implementing

  • Test each change individually - Don't try to fix everything at once

  • Clean code isn't just about aesthetics - Those console logs and unused imports actually slow things down

The biggest lesson? Sometimes the "boring" optimization work has the biggest impact on user experience. I was so focused on building new features that I forgot to make the existing ones work well.

What I'm working on next

Now that the admin dashboard is blazing fast, I need to apply the same performance optimization to the front-end marketing pages. The user-facing side of the travel directory still needs some love.

I'm also planning to tackle the UI redesign because, honestly, the current admin interface looks pretty ugly compared to the dashboards I'm building now. But performance first, pretty UI second.

Final thoughts

This whole optimization session reminded me why I love building in public. Six months ago, I would have spent days trying to figure this out on my own. Now, with tools like Cursor AI and the experience I've gained, I can tackle complex performance issues in a single afternoon.

The 85% speed improvement isn't just a number - it's the difference between being frustrated with my own tool and actually enjoying the process of building this travel directory.

Living here in Bali has taught me that sometimes you need to slow down to go faster. Taking the time to properly optimize instead of just adding more features was exactly what this project needed.


Following along with my 60-day challenge to build a Bali travel directory? The next episode covers front-end optimization and getting closer to launch. You can watch the full process on YouTube or connect with me as I document this entire journey.

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.

Boost Admin Dashboard SPEED with These Simple Tricks | Robbin Schuchmann