The Site
Is hosted on Cloudflare, mostly. There are a few things that are more effecient to host on my own server, but that will be a different post.
Original Plan
I had seen Svelte mentioned as a well-supported option with Cloudflare Pages, where it would support advanced features that weren’t supported by other frameworks. Stuff like prerendering, which would make the site load faster for complex pages when the user was coming from a search engine or a different site.
I started building the site with Svelte and Svelte Kit, and it was going about as well as I expected. It was new technology, so I had to learn what their words meant. UI component libraries were thin on the ground, I wasn’t finding much and what I found were not as good as Vue or React libraries. I tried several (Flowbite, AgnosticUI, Carbon Components, SvelteUI), I wouldn’t recommend any of them. Perhaps Carbon is fine if you’re building an enterprise app, but that wasn’t what I wanted here. I do stuff like that for work, I know it doesn’t look right on a site like this. I didn’t try the Material Design libraries, they may be better.
Then I was trying to build a few pages, and that went very poorly. The pre-rendering was not well documented, and I couldn’t figure out how to make it not look weird with logged in users. I spent a good while trying to figure it out, but all I could find was people who had the same problem and no answers, just “go read this documentation”. I read the documentation, it was awful and didn’t explain shit. Finally, I threw away several days of work and decided to go back to something I knew, Vue.
The New Plan
But not Vue 2 and BootstrapVue/Vuetify, oh no, I’m going to do something new: Vue 3 and Typescript and Composition API. I tried a few different UI libraries, but eventually broke down and chose PrimeVue. Then I threw down the money for PrimeBlocks and PrimeVue Designer. Not cheap, but I think I got my money back from the time I saved from each.
You don’t actually have to pay anything for PrimeVue. It’s completely free, but they’ve carved out certain things to monetize. Instead of a mediocre theme builder, you get a good theme builder that costs money. Then, they built a bunch of niche components that you don’t find in most UI libraries plus a bunch of example page designs and packaged them into PrimeBlocks.
PrimeBlocks gives you a bunch of example pages or components, so you can just copy and paste them into your site and tweak them to your liking. PrimeVue Designer lets you make themes for your site, so I went through a few versions before I settled on the current one. I’ll probably continue to tweak it over time.
But the Contributing and Blog sub-sites aren’t using PrimeVue. Contributing is using PetiteVue and is basically a couple of static pages. Nothing much there. The Blog is a completely static Hugo site.
Where’s the Backend?
Oh yeah, that was another thing that changed a bunch. I thought about a bunch of different backend options, but I decided on using Cloudflare Workers. Then I didn’t use them, and swapped to Pages Functions. Which are basically just a Worker with a builtin router. Plus, the database is stored in Cloudflare KV. Which is what it is.
Oh, I bet you’re wondering how I can run all the series and volume data through KV? Well, they aren’t in KV. The data is in R2, while search is one of the things that is running on my own server (another blog post).