Hooray, another month in the bank!
Looking back, on the surface there isn't much to shout about as it's all been mostly invisible work. I've focused on making the site dependable. Even if I've got low traffic, I won't accept that as a reason for flaky foundations.
What I worked on
- Upgraded to Next.js 16
Keeping the framework current reduces future maintenance pain. At a larger mission-critical site, there's a strong case for staying slightly behind the latest release, but I'm happy to run the latest and greatest here. - Open Graph images (in progress)
I started building an Open Graph image generator so shared links get the smart previews most people have come to accept on the web.
I also aim to use an algorithm to generate a clean thumbnail without manually designing one each time. This is still underway, but the foundations are there. - Fixed structured data and rich meta issues
I tightened up schema output and cleaned up a few metadata problems. - Switched from Supabase to Convex
Supabase kept turning the database off due to low usage on the hobby plan. I reactivated it a few times, but it became a recurring distraction.
That's fine for a demo app. But it's not fine for a public site that needs to be available whenever someone arrives (even if it's only used for counting Claps on these blog posts), and I get it from the Supabase side of things too but this wasn't the right fit for me.
So, I explored and discovered Convex. So far it's been smoother, and it also set me up for realtime updates (with websockets). That's useful for things (like Claps!) or other interactions I may introduce where the UI should update without a refresh. - Performance tweaks
I tweaked the quick links to post headings on blog articles. The anchor was updating the URL as you scroll down, and I'd notice things become janky. Fixing that was small, but worth doing. I want the site to feel fluid and responsive.
Data Snapshot
Metric | Month 1 Baseline | Month 2 | Notes |
|---|---|---|---|
Visitors | 55 | 21 | |
Sessions | 94 | 57 | |
Bounce rate | 46 % | 35% | |
Channels | 89 % Direct · 9 % Referral · 2 % Search | 60 % Direct · 22 % Referral · 18 % Search | |
Device split | 84 % Desktop · 16 % Mobile | 90 % Desktop · 10 % Mobile | |
Top countries | 🇺🇸 US (36) · 🇦🇺 AU (15) | 🇺🇸 US (13) · 🇦🇺 AU (6) | |
Indexed pages | ~3 avg over 28 days | 8 pages | Great! |
Crawl errors | 1 total | 0 | |
Outbound clicks | 1 (LinkedIn) | 0 | |
LinkedIn followers | 397 | 397 | Holding |
X followers | 1 924 | 1919 | No posts, but surprised to see it's gone backwards |
What I learned
I can see a lot of debate about what should be priorities in these early stages. We're nearly out of the organic phase and I'm interested to see what develops once more content and socials work kicks off.
It's really tempting to ignore the plumbing when the site is small too, but doing that is how you end up with a site that only works when you're watching it. I'm trying to build something that quietly holds up on its own.
