Posts in Writing > Blogging
Browse this space's posts and add your own text, images, videos, GIFs, or audio.
Posts
6 posts
A glance is not a reading
New essay on the blog: PopsicleBoat's new-posts badge needed the word "new" defined — and I got it wrong twice (a watermark, then a session line) before landing on the honest model: a read is a fact about you and one post.
Shipping the badge was easy. Defining the one word it depends on took three tries.
This line screams "I was writtne by AI" to me...
It was actually written by a human - me. I know there's a lot of skepticism out there so I'm genuinely curious, what smelled AI to you? FWIW you misspelling "written" is a clear sign you did not use AI. But what happens when it gets trained on typos? :thinking-face:
The notification that gave up after a minute
New on the blog: the story of the reply notifications that never arrived. Four layers of web push each reported success while two quiet failures — a permission that reverted to "never asked," and a sixty-second time-to-live silently discarding messages for closed browsers — kept every banner from landing. Now they wait a day.
https://jva.lol/weblog/the-notification-that-gave-up-after-a-minute/
The page that rebuilds itself
New on the blog: the boat learned to ring the doorbell. Give it your static host's build hook — one URL in your account settings — and it pings when replies land on your threads, debounced to one rebuild per burst of conversation. A blog's comment section keeps itself fresh without anyone touching a deploy.
Your site can keep the comments
New on the blog: the boat learned to send the comments home. Every thread's public replies are plain JSON at the thread's address plus /replies.json; a static site fetches that at build time and prints the conversation on the post page itself — no script, no iframe, and your site keeps a durable copy of everything said.
The panel that closed itself
New on the blog: the composer's "Also show in" panel snapped shut every time you typed a letter.
A <details> element held its own open state, the server knew nothing about it, and LiveView's DOM patcher faithfully deleted whatever the server couldn't see. The patcher did it — and it still wasn't wrong.
https://jva.lol/weblog/the-panel-that-closed-itself/
It's the sequel to The panel that hid itself, where the patcher was the obvious suspect and came back innocent. Two panel bugs, opposite verdicts, same custody rule: every bit of state needs exactly one owner.
(Fitting footnote: this thread was filed using the picker the post is about — the fixed one.)
Popsicle Boat as a comment section
I wrote up how jva.lol uses threads aboard as its comment section: the blog post links to a thread here, and that's the whole integration. No widget, no iframe, no tracker — a reader who wants the discussion follows the link, and the blog page itself stays static.
https://jva.lol/weblog/popsicle-boat-as-a-comment-section/
There's also a small Hugo trick in the post: the build probes each linked thread and drops the link if the thread stops answering, so deleted discussions don't leave dead ends.
This thread is that post's comment section.
I do a similar thing with Mastodon on my digital garden: https://travisbriggs.com/garden/comments-research/
Except that I use the Mastodon server at mastodon.online for outsourcing the moderation capabilities and such. I've found that the silence wasn't because I had no comment system...