BlogProjects

How not to build a website

July 19, 2025 • Sam Wilson

Image: Just a simple website

After shipping Bookmark, Sam and I decided to put together a simple website for blogs and showcasing our projects.

After several months of programming in React Native, we wanted to mix it up and use some different technologies. In particular, I was keen to avoid the highly functional, but often boresome Next.js, Node, Vercel, Postgres stack and build something a little more stripped down.

After all, we only wanted a very simple website.

Looking back, it's truly baffling then why we (well me) decided that our stack would be Bun, Elysia, HTMX and SQLite. In particular, the use of HTMX was so laughably trivial that there was no good reason not to just serve HTML and CSS only. We didn't even really need to write any Javascript.

Elysia was fine, although in retrospect - was another completely unnecessary technology to introduce for how simple the use case was. We would have been completely okay using vanilla Bun to serve requests.

Whilst SQLite is a really cool library, we also didn't need it here and it added yet another pointless dependency.

By the time the excitement of the new shiny tech had worn off, we had a hideously over-complicated web app. Worse still, it had taken a lot longer to write because of the learning curve associated with the frameworks we hadn't used before (namely Elysia and Bun).

When it came time to host, well we then realised that most serverless providers didn't have a Bun runtime (arrrghhhh) and so we needed to containerise the app using Docker (yay another technology) and host it that way.

Of course just serving content via a CDN was now also far less convenient because rather than serve everything via files, we had decided to serve the blog summary data from a local SQLite instance that needed querying. It meant that almost every query would need to interact with the Bun runtime to execute a query.

Unless this paragraph says otherwise, you're reading this blog on that same janky codebase packed full of technologies we didn't need to use.

Do I regret it? Well, yes, but also... no?

You see, when you get things as badly wrong as this, you can't help but learn some things. You start to understand what HTMX is actually good for, where Elysia could have some speed - why Bun is pretty cool for providing some really sophisticated tools in Javascript - and that Docker is kind of the ultimate saving grace when all else fails.

This project was not a masterpiece in choosing the right tools for the job, but it gave me some newfound appreciation for some of these technologies and some real perspective on when they could actually be useful.

Also, probably should have just used Next.js, Postgres and Vercel.