Skip to content
Shipworthy

Building Shipworthy #1: why a blog with XP

Why this developer blog will reward readers with XP, streaks and unlockables, what counts as earning it, and the anti-abuse rules that keep it honest.

By · · 2 min read


Most developer blogs get one visit per reader. Someone searches a question, reads the answer, closes the tab. Shipworthy is a blog about AI tools and software engineering that tries to earn the second visit: finishing an article earns XP, reading on consecutive days builds a streak, and both unlock things worth having. This post explains why, and what stops it from turning into a points farm.

The problem with one-visit blogs

A publication that lives on search traffic is at the mercy of search. Readers who come back on their own, or open a newsletter, are the ones who make it sustainable. The usual tools for that are a newsletter and good content. Both matter, and both are part of the plan. What they lack is a reason to come back tomorrow rather than whenever.

Reward learning, not clicking

The rule behind the whole system: readers earn XP for learning, never for page views.

ActionKnotsHow it is verified
Finish an article10, plus 2 per minute of reading time, up to 30Scrolled at least 70% and stayed at least half the estimated reading time, checked on the server
Pass the end-of-article quiz20 first try, 10 on a retryAnswers checked on the server
First read of the day5Once per day
Confirm a newsletter subscription50Once per account

The currency is called knots, and the ten levels are nautical ranks, from Stowaway to Admiral. Commenting earns nothing on purpose: rewarding comments rewards spam.

Streaks, cards and the cargo hold

Reading on consecutive days builds a streak (here, a voyage), with a "safe harbour" freeze so one busy day does not wipe a month of progress. Every tool profile has a collectible card that unlocks when you read a review featuring it. Higher levels and streaks unlock items in the vault, called the Cargo Hold: cheat sheets, templates and partner deals.

The order of features matters. The reward system comes after the content engine and the newsletter, because rewards on top of thin content are pointless.

Keeping it honest

Any points system attracts people who want points without reading. The design assumes that from day one:

  • Idempotent awards. Each award has a key, so retries and replays can never pay twice. (How that works in DynamoDB is its own post.)
  • Server-side checks. The browser reports reading progress; the server decides whether it counts.
  • Rate limits on the endpoints that award XP.
  • Anonymous first. Progress is stored against a signed device ID until you sign in, then merged into your account exactly once.

Why it is static first

None of this is allowed to slow articles down. Every article is prerendered HTML on a CDN. The XP bar and the quiz are small client-side islands that load after the page is readable, so search engines and readers who never sign in get the same fast page.

What is next

The content engine and SEO foundations are done. The newsletter comes next, then the reward system. The building in public hub collects every update, including the stack this runs on.

Frequently asked questions

Do I need an account to earn knots?

No. Knots are tracked anonymously on your device first. Signing in saves your progress across devices and doubles as the newsletter opt-in.

Can you earn knots just by opening articles?

No. Knots are awarded for a verified read: scrolling most of the article and spending at least half its estimated reading time on it, checked on the server, plus passing the end-of-article quiz.

Is the reward system live yet?

Not yet. It is planned for a later phase of the build, after the newsletter. This post explains the design before the code exists.

  • Building in Public3 min read

    How Shipworthy runs Next.js 16 on AWS with SST

    The serverless stack behind this site: Next.js 16 on Lambda and CloudFront via SST and OpenNext, plus the four deploy gotchas that cost me the most time.