Following the advice of @nishuang, I've begun updating on a weekly basis for Quail.

Let's delve into the specifics of this update and, of course, the story behind it all.

The First Major Update: Comments

As a product manager used to work for social network service, I've got to admit: social network services are real challenging. Yet, driven by both personal passion and user demand, I've always dreamt of building a social network system into Quail.

Starting with comments seemed like a straightforward yet flexible approach. So, I gave it a go. Here's the Tweet I posted:

Despite my rant on X about this topic, the truth is, it's not a melodrama of product managers or users overstepping boundaries with developers. Every decision made was with full awareness.

Because, honestly, comments might seem simple at first glance, but there's a whole labyrinth behind building them.

At the most basic level, of course, readers should be able to leave comments. But then, dissecting the act of commenting, one wonders:

Who can comment on whose content, and what type of comments can they leave?

  • The first "who" tackles who's eligible to comment. Everyone? Registered users? Subscribers? Or perhaps only those who pay?
  • The next "whose" and "content" inquire if comments are restricted to articles, or can one comment on other comments too?
  • The "type of comment" prompts questions on format. Plain text or multimedia? Any text formatting options? Markdown? If so, which subset?

And if comments can be made, they should be visible, which means:

Which comments are displayed, based on what criteria?

  • By "which comments", there will be ones that won't be favored, either being spammy or perhaps not to the liking of the newsletter's author.
  • The "criteria" can be preset or customizable. If the latter, to what extent?
  • Once selected, in what order or fashion should they appear? Nested for replies to comments? Display referenced content?

But wait, there's more:

  • If the purpose of comments is to engage, should notifications be sent to involved users via Email? If yes, who gets these notifications? Can users opt-out?
  • How do comments tie into Quail's long-term interaction system? Incorporate protocols like ActivityPub, Nostr, or Farcaster?
  • Spammy comments hurt everyone. How to filter them? Use third-party filters or build our own? Allow user reports?

In essence, a seemingly basic comment feature is a can of worms.

Now, I must clarify: Quail's commenting won't address all the above right out of the gate. I'll tackle some first, gauge the situation, and then decide further.

So, this update, in its innocent simplicity (ah, I've habitually used this expression), offers:

For commenters:

  • No replies or mentions to other comments.
  • Plain text format, with limited extensions.
  • Comments displayed in reverse chronological order.

An image to describe post

For authors:

  • Control over who can comment: all registered users, subscribers, or premium subscribers.
  • Decide on default comment display strategy: all comments or only those they got approved.
  • Configurable in individual article settings and a default for all future posts.

An image to describe post

An image to describe post

An image to describe post

Custom Domain

I've been itching to allow custom domain bindings. As an old-school netizen, I own a bunch of domains, including my personal one.

But custom domain binding requires corresponding domain TLS certificates. In today's age, an HTTP page gets you side-eyed. Initially, I wanted to freeride on Cloudflare's certificates, but that fell through unless I purchased SSL for SaaS.

Given Quail's current revenue, it didn't add up. So, I opted for a DIY approach with Let's Encrypted certificate issuance. And voilà, that's what you see now.

In essence, authors can navigate to "Domain Settings" in the list settings, select a subdomain they control (no top-level domains yet), and point it to the domain ending in .quail.cc.

Once saved, the setting usually takes effect within minutes, but sometimes it might need over half an hour.

The "Canonical URL Base" should generally be set to your subdomain. I assume most prefer search engines to prioritize your own domain.

An image to describe post

TIP

For those using Cloudflare as their domain registrar, note:

  1. Ensure you set the "SSL/TLS" setting in Cloudflare to "Full" mode, or you'll end up with endless redirection issues.
  2. Disable Cloudflare's "proxy" until domain verification is complete. Once verified, turn it back on for better access speeds.

Minor UI Tweaks

I often tinker with the interface, not necessarily making a song and dance about every change. Especially those tiny glitches I stumble upon and can fix in a jiffy. This week, for instance:

  • I revamped all the icons in the editor.
  • Added a save button to the floating editor toolbar.
  • On desktop, hovering over the article list slightly zooms the article's thumbnail.
  • The preview dialog no longer jitters on the first open.

Such tweaks, in my eyes, make software services feel more like living creature rather than an architecture. Each iteration feels like evolution, instilling a sense of vitality, and that's genuinely exciting.