Popsicle Boat as a comment section
The usual ways to put comments on a blog: a third-party widget, a self-hosted comment server, or silence. I can respect the choice for silence. Self-hosting means running a spam-fighting service forever. And a third-party widget means bloat which adds weight to the loading of your site.
This blog does a fourth thing, and any blog can use what it uses.
The pattern #
A post that wants a discussion gets a thread on Popsicle Boat, and the post links to it. That’s the entire integration:
<a href="https://www.popsicleboat.com/c/programming/posts/168">
Discuss this post on Popsicle Boat →
</a>
What the reader’s browser sees #
Nothing. A link is inert. There is no script, no iframe, no cookie, nothing for a content blocker to block, no consent banner. The blog page stays exactly as private as it was.
Following the link lands on a public thread: reading requires no account, replying takes a free one. Popsicle Boat itself carries no ads and loads no third-party scripts.
Steps, for any blog on any stack #
- Make an account at popsicleboat.com.
- Find a space that fits your post’s topic, or propose one.
- Post there about your article.
- Copy the thread’s URL and link it from your article.
Repeat per post. Moderation is already whatever you can do with your own posts.
If you’d rather skip the setup, popsicleboat.com/for-bloggers is the short version: send your blog’s address and you get a space for it the same day.
Why a link and not a widget #
I tried the widget version. I had an embedded iframe mirroring the thread onto the blog and removed it. Replies written for a community read strangely when syndicated somewhere else, and an embed is one more thing a reader’s browser has to trust.
The simple link I have now asks nothing.
A nicety for static sites #
Threads are posts, and posts sometimes get deleted. So the build checks. It fetches each linked thread and only prints the link if the thread is still there. Delete a thread and the link just disappears, no dead end for a reader.
{{ with .Params.popsicleboat }}
{{ with try (resources.GetRemote .) }}
{{ if not .Err }}
<p class="boat-discuss">
<a href="{{ $.Params.popsicleboat }}">Discuss this post on Popsicle Boat →</a>
</p>
{{ end }}
{{ end }}
{{ end }}
That’s the whole system. No ad network, no analytics script, and the conversation happens somewhere built for conversations. No anchor tag for tracking anyone.
I hope you find it useful, again it’s all in the spirit of getting back an internet that is simple. No bloat. Just communication.