A reader who finds a project worth following needs two things Dawnscan did not have: a place to keep it, and a way to hear what changed. This is that, built with what Dawnscan already stores and without an email provider.
Following is private
A follow is a note the reader makes to themselves. It is stored against their account,
shown to nobody else, and counted nowhere public — there is no follower count on a card, a
project page or an API response. It can never reach a score: packages/domain/src/watchlist/neutrality.test.ts
fails if a watchlist table is ever read by scoring, ranking or the card queries.
A watchlist holds at most 200 projects. Following requires an account (GitHub sign-in); browsing never does.
What an update is
/updates and the feed read one window — the last 30 days, at most 60 items — over
facts Dawnscan already recorded:
| Kind | What it means | Where it links |
|---|---|---|
ship |
a meaningful ship event | the ship's own public source |
status |
activity status moved (e.g. Quiet → Shipping) | the project page |
market |
a first stored market reading | the project page |
narrative |
a narrative was assigned from evidence | the project page |
claim |
a claim was verified | the project page |
No job computes anything for these pages; they are read models over ship_events,
project_scores, market_snapshots, project_narratives and project_claims. Opening
/updates marks the reader's "seen" time, so the New markers mean what they say.
Feeds
| Feed | Address | Access |
|---|---|---|
| A reader's watchlist | /feed/watchlist/<token>.xml |
private; the address is the credential |
| Every ship | /feed/ships.xml |
public |
| This week | /feed/this-week.xml |
public |
The private token is 32 random bytes, stored only as a digest, shown once when it is
created, revocable and regenerable from /watchlist. An address that matches no digest is
a plain 404 — never a hint that a token was close. The document is private, max-age=300
and X-Robots-Tag: noindex, and carries nothing about the reader beyond the projects they
follow.
The two public feeds are the alert channel that needs no account at all: a researcher
points their own reader at /feed/ships.xml and sees what shipped, each item linking the
public source Dawnscan recorded it from.
What Dawnscan deliberately does not do
- No unsolicited email. Since 2026-09-05 there is a mail provider, and the
promise above became a contract instead of an absence: three messages, each
one the consequence of something the reader did, every one of them
unsubscribable, nothing sent to an address the owner has not confirmed, and
one environment flag that turns the whole layer off. What is sent, what is
never sent, and how to switch it off:
docs/EMAIL.md. The settings are the Email section of/watchlist. - No public follower counts. A count of who is watching is market attention, and Dawnscan's market attention comes from market data, not from its own readers.
- No recommendations. The pages say what happened and link to the evidence.