As you might have noticed, this blog looks quite different from what it used to be! We recently set out to modernise the blogs for our companies, starting with the Nimble Ape blog. While we’ve been posting new content (more or less) regularly, it’s been a while since we showed some love to the blog itself. This felt like the right time for a redesign.
And it wasn’t simply a new lick of paint! Over the past few weeks, we’ve been hard at work completely rebuilding the blog website from the ground up: new site building technology, new UI, new CMS. Here’s how we did it.
A complete rebuild? Why?
But first of all, why rebuild the site from scratch, when the old one is working perfectly fine?
The main reason is that Nimble Ape has come a long way since we first released the old blog, and we’re not only a team of developers anymore. We need anyone in the team to be able to contribute to content independently, not just devs. The old blog was a Jekyll static site that uses Markdown files to build the post pages. Nothing new, except that if you’re not a developer, your workflow to publish a new blog post looks something like this:
- Write the post in Google Docs, formatting it the way you want it to look;
- Send the doc to the dev, who will convert it to a
.md
file, often manually; - Send them the picture files separately;
- Wait for the dev to send you a link to the preview build;
- Realise that the preview doesn’t look quite like you wanted it, because the website’s design and components are quite different from Google Docs;
- Accept there’s little you can do about it;
- Wait for the dev to merge to production and make the blog post live.
As you create more and more content, this back-and-forth is just too inefficient. We needed something that would let anyone create and publish the content independently. Yes, we needed a CMS.
On top of that, the rebuild would be a chance for us to modernise the dated look of the blog, and a chance for us to keep up to date with and to leverage the latest technologies to provide a faster, better and more accessible user experience.
The new blog
CMS
Once again, we went for Builder.io, as we’ve had quite a lot of experience using it this year. It offers a Visual Editor where you can drag-and-drop your custom components into a WYSIWYG page that shows exactly what the final build will look like. Developers write the code for the components and the layout, and then anyone can build pages and sections within pages.
I wrote about using Builder.io for the Broadcast Bridge landing page a few months ago, and we also used it for the CommCon 2024 website, so using it again was the obvious choice for us. We still believe it’s not perfect (more on that later), but for now it’s the solution that ticks the most of our requirement boxes.
Static site
When we previously worked with Builder.io, we used Qwik as our framework. We really liked its performance, the “resumability” feature for server components, and its ease of use (reactive state variables!). Qwik was developed by the team behind Builder.io, so it integrates well with their CMS.
Despite all this, we decided to go another way this time. Looking at the medium to long term, we don’t know that we’ll keep using the same CMS forever. Qwik is still a very new framework and not as widely supported as its bigger counterparts, and we wanted a framework that we could plug into a new CMS fairly easily.
Therefore, it wasn’t long before we decided for the universally-supported Next.js. We’d read about the latest advancements in server components introduced by Next 14 with the app router, and it was time for us to get on it too.
So how did it go? Very well so far! Integrating with Builder.io was a breeze, and I found the app router easier to work with than the old page router. The way client side vs. server side is handled just makes more sense to me: Just like Qwik, a component is server rendered by default, unless you specify.
As for the UI (none of us are designers), we went for Tailwind using the pre-built Preline components, with some light customisations where needed.
The static site is deployed and built on Cloudflare Pages. Pro tip: Save yourself some pain and use next-on-pages as your build command 🙂.
On Builder.io, we set up a webhook that triggers a new Cloudflare build whenever new content is published or updated. This enables whoever creates the content to make a blog post go live without the need to have access to Cloudflare.
All the blogs
While setting up the work of building a new blog website, we decided to go the extra mile and make the new site a basic structure that we could reuse to deploy the blogs of our sister companies, which are also due for an update fairly soon.
The code for the blog websites is a scaffold that lives in only one repo, which can be deployed to different Cloudflare pages. During the build, we use environment variables to specify what brand we’re building for, which Builder.io space to use for content, and what branding theme we need to apply. We make sure that all the content, including logos, headers and footers, lives only on the CMS.
Here’s an example of how we use the Next.js app router to specify the site’s metadata and favicon: