​John
banner
sheek.org
​John
@sheek.org
Most online communities are just rented space.

I'm building something different: a real home for your people, on your server. Honest, simple, and yours forever. No landlords allowed.
Took a short break because life is too short 😛

Back to work 🍿

I fleshed out app settings a bit more. I added default values, you can now cancel changes, reset, and if you save a change, it's saved directly to the db. Much better 😙

#javascript #dev #webdev #buildinpublic #UX #community
November 6, 2025 at 3:41 PM
This took a surprising amount of time to get right, but I added app settings ⚙️

The idea is simple. You do the vast majority of config in an admin interface.

#javascript #dev #buildinpublic #webdev #UI #admin
October 6, 2025 at 6:56 PM
More fun with on the fly image processing ✨

Doing it programmatically means there's a "general" max width for display images (based on user's screen dimensions * DPR). This avoids useless bandwidth

Plus, there's UI elements that have known dimensions

#dev #buildinpublic #javascript #performance
October 2, 2025 at 10:50 PM
Did some work on images 📸

You're probably seen this pattern before. Resize and transform images on the fly with query params

Watch a 700KB image shrink to 20KB when we pass the right params we need (for its place in the UI) to the image server

#javascript #dev #buildinpublic #performance
October 2, 2025 at 9:10 PM
Worked on a first pass for the #chat page 👷

Wired up some db collections and some UI

It was much easier to get into because the design patterns from the forum page translate well here. I've always been a fan of emerging patterns in place of extensive planning

#javascript #dev #buildinpublic #ui
October 2, 2025 at 6:28 PM
I'm going to stop the first (rough) forum thread list work here

I feel like I got a lot of the ideas down. More importantly, the shell is there to continue when I get back to it.

I'm moving on to chat next

#dev #ui #javascript #forum #buildinpublic #webdev
October 2, 2025 at 12:18 PM
Spent some time thinking about the thread list

What info is actually useful once you do all the filtering?

I mostly care about three things

The title
When it was last active (relative to my time)
and how many people replied to it

the rest is... noise

#forum #UX #dev #javascript #buildinpublic
October 1, 2025 at 8:46 PM
"The UI as the URL editor" is a nice mental model 👷

You have all kinds of inputs to add let the user control the URL, then you show a single list that incorporates that URL

The URL is shareable and the list is live because you sub with the same filters

#javascript #UI #buildinpublic #dev #forum
October 1, 2025 at 11:30 AM
Made some more progress on the forum drill-down 🎨

There's still a lot of stuff to iron out, but I'm really liking how everything is locked to the URL.

#community #forum #dev #javascript #buildinpublic #webdev #UI
October 1, 2025 at 9:14 AM
Worked on UI layouts for the different types of content 🖌️

It's mostly drill-down because I think this is the most efficient way to explore content.

#buildinpublic #community #javascript #webdev #UI
September 30, 2025 at 7:07 PM
I added the Node app server back, but in a much better way 🦄

It's now a very direct way to call functions on the server. Always returns JSON and the functions are "mostly" pure.

It's integrated with the main db. ctx.user is the read user from the db.

#javascript #dev #fullstack #buildinpublic
September 29, 2025 at 5:15 PM
systemd auto restarts with delays and max retries is such a good pattern

random fatal errors become more like minor hiccups unless there's something fundamentally broken

#javascript #dev #buildinpublic #backend #devops #webdev
September 29, 2025 at 1:07 PM
The scope of the project is increasing a bit and I now have a bunch of services I need to manage🏃

I added an install script that will offload all of that to systemd

This means we get auto-restarts and all kinds of systemd magic 🏋️

Npm no longer runs anything

#javascript #dev #buildinpublic #infra
September 29, 2025 at 12:17 PM
I removed the main Node server in favor of smaller stateless processes

A new dev-only process runs a persistent esbuild build. This detects changes and has it's own SSE endpoint for live reload

Another dumb process will be for on off server functions - JSON

#javascript #buildinpublic #dev #webdev
September 28, 2025 at 9:38 PM
Doing some exploration for uploads 🕵️

I want to anchor uploads to content (no orphaned uploads)

I tried Quil as the "blessed" editor and it works really well with pocketbase

Quil handles most of the UI, pocketbase handles file storage and permissions

#javascript #dev #buildinpublic #webdev #dx
September 26, 2025 at 1:32 PM
I integrated OAuth for social logins 💁

You get your client id and secret from some provider (like google or github) and add them in an .env file

That's all you need to do 🦄

Everything else is wired up. Pocketbase does most of the heavy work 🏋️

#javascript #dev #buildinpublic #webdev #UX #oauth
September 25, 2025 at 3:06 PM
The latest work on real-time subscriptions 🏃

You no longer need any server routes. All the subscription stuff can be client-side.

This is mostly thanks to pocketbase apis

In other words, a component can be fully isolated, data and all.

#javascript #dev #buildinpublic #pubsub #webdev #dx
September 24, 2025 at 11:38 PM
I added Mailpit as a dev mail server 📬

mail.localhost will give you a place to catch emails sent locally in dev

This will ship with project templates. One less thing you need to worry about configuring. Plus Mailpit is a single binary 🔥

#javascript #dev #buildinpublic #webdev #dx
September 24, 2025 at 7:13 PM
I got a first pass of work done integrating Caddy 👀

The immediate impact:

removed all static file handling and all the compression logic from the node app 🔥

enabling zstd (gzip fallback) is literally one word 🦄

#javascript #dev #buildinpublic #webdev #performance
September 22, 2025 at 3:34 PM
I've been shopping around for a reverse proxy / file server and Caddy is the best fit. I'll be working on that next

Single executable binary, automatic certs, easy to configure, and tons of other features

esbuild, pocketbase, caddy... I'm noticing a pattern...

#javascript #dev #webdev #golang
September 22, 2025 at 12:17 PM
I can't think of anything to caption this with, so here it is 💁

Real, live, performant db search in the content field of posts. The thing on the left is the entire thing.

the war on boilerplate continues 🤸

#javascript #dev #buildinpublic #performance #dx #webdev
September 21, 2025 at 11:56 PM
Playing around with Pocketbase 👀

What an amazing piece of software ❤️

There's no need for app-level endpoints

The official SDK is designed to be run in the browser. It talks directly to the db server (single Golang binary)

This is all client code

#javascript #dev #buildinpublic #webdev
September 21, 2025 at 7:20 PM
I revisited this with a fresh pair of eyes after working on the SSR component and I managed to cut down boilerplate a bit with an #SSE component 👻

Essentially, you give it an endpoint, a render function, and a method (replace or the default "append") for what to do

#javascript #dev #buildinpublic
September 20, 2025 at 7:35 PM
Another example of "static islands" 👀

This time with "live search"

everything is CSR except but it responds to client URL which is modified with a CSR input

The product cards are essentially static links, so, skip the middle JSON part and just SSR them

#javascript #dev #buildinpublic
September 20, 2025 at 5:56 PM
I spent a bit more time on this 🍿

I see a path forward with this pattern.
September 20, 2025 at 3:43 PM