Case Studies


Nuxt/Node Progressive Web App


A little history…

We built to scratch our own itch. We wanted a dashboard of all the latest news too keep on top of the latest tech trends.

ReadSpike v1-3

Versions 1-3 were written in PHP and simply ran a CRON job to cache a list of RSS feeds, then converted them into columns of links. It ran flawlessly for years.

Each version brought design tweaks and gradual improvements. The initial commit was on 2012-09-31, and you can still see the original

Screenshots of
Readspike V1, V2, V3 and Spike.News V5, 2012-2022

Spike.News – Nuxt & Node

In 2017, got noticed. It appeared at the top of Hacker News, and mega-blog posted a glowing review:

The best yet in its class, beautiful and simple, with a good taste in sources. It might be too beautiful, if you see what I mean? The next step here, though, would surely be the ability to pick your sources. Rob Beschizza, Editor,

It was clear users needed it to be customisable.

By 2019, we’d fallen in love with Vue.js and were getting pretty good with it. We’d made a few custom APIs with Node & Express, and we’d enjoyed using Google’s Firebase as a no-sql database.

Nuxt, the Vue.js Single Page App (SPA) framework was starting to get some traction when it reached v2, and we found it amazing to work with, just the right amount of batteries included – file based routing, shared state with Vuex (now Pinia), API routes and server-side data hydration.

Screenshot of in a light theme
Light theme, left-handed mode

V4 → V5

We started coding up v4, and got it working, but as it was our first attempt, we made a few poor architecture decisions that left it brittle and not stable enough for public use.

We took the learnings and the good parts of v4, and rolled them in to what you see today - a customisable, privacy first, fast, accessible and reliable SPA.

We also rolled in light mode, left handed mode, RTL mode, large type, auto-favicons and JSON import / export, leaving all the user data to the user.

Of course, not everybody likes change, so we left v3 up and running at, and launched the new version at the catchy new domain,