visitor@nextdash: ~/posts — Fresh: the bookmarks that have something new – nextDash 80×24

nextDash

MIT

Your bookmarks. Your terminal. Your rules.

visitor@nextdash:~/posts$ cat fresh-the-bookmarks-that-have-something-new.md

fresh-the-bookmarks-that-have-something-new.md 11.7K

-rw-r--r-- jordi

Fresh: the bookmarks that have something new

11 min

The other smart collections all answer questions about what you did. Fresh answers the one none of them could: which of these links is worth opening right now.


Open your dashboard and look at a category. Every row is identical in the only way that matters — none of them tells you whether anything happened behind it. A blog you follow, a project’s changelog, a forum thread, a status page: they keep publishing, and the row keeps looking exactly the same as the login screen two lines down.

So you do one of two things. You open them on the off-chance, which is mostly wasted clicks. Or you stop opening them at all, which is how a bookmark quietly becomes dead weight.

Fresh is the answer to that, and it is smaller than you would expect. When a page you have saved advertises an RSS or Atom feed, nextDash notes where that feed lives and asks it, once an hour, whether anything is new. A bookmark whose page has published something since you last opened it carries a small count on its row. Opening the bookmark clears the count. That is the whole of the interaction.

It shipped in v1.3.0 and was rebuilt into something that actually works in v1.3.1. This article covers what it does, how to turn it on, what it costs, and — the section most people need — what to do when nothing shows up.


01. What you actually see

Three things, and only three.

A count on the row. A bookmark with something new gets a small superscript number: 3 means three entries published since your last visit. It is deliberately quiet — a hint of the accent colour, nothing more — and absent entirely when there is nothing new, or when Fresh is off. Twenty entry timestamps are kept per feed, so twenty is the highest number a row can show.

A Fresh collection. The same bookmarks gather in a collection between your categories, marked , with the number in its title — Fresh (4). It is ordered by publication date, newest first, which is an ordering none of the dashboard’s own sorts can reproduce. It appears only when something is actually new; an empty Fresh would be a heading explaining that nothing happened. The rows inside it are the real bookmarks, so Shift+E or a long-press edits one in place and the change lands on the bookmark itself, wherever else it appears.

Nothing else. A row whose page publishes but has nothing new looks exactly like a row with no feed at all. That is deliberate: a permanent mark on twenty rows that are silent most of the week is precisely the noise Fresh exists to remove. (If you want to see who is taking part anyway, there is a switch for it — section 04.)

Opening the bookmark is the entire read state. There is no “mark as read”, no separate unread store to drift out of sync. nextDash already records lastOpened for other reasons, and Fresh simply counts entries newer than that timestamp. Since v1.3.1 that includes Ctrl/Cmd+click, which now opens in a new tab like any other link on the web — and is recorded by the row, so the count clears.

A bookmark you have never opened counts everything the feed has, up to the twenty most recent entries that are stored. You have seen none of it, so that is the honest number.


02. Turning it on

Config → Behavior → Fresh. It is a tab of its own since v1.3.1, sitting between Inbox and Status & health. (In 1.3.0 it was the fourth panel down inside Status & health, which is a tab about whether a link is still there — a different question from whether it has moved on, and roughly where a reader stops looking.)

Flip Show what is new since you last looked.

Switching it on does two things immediately, rather than leaving you staring at a dashboard that never changes:

  1. It looks for feeds. One GET per bookmark it has never asked about, reading the opening of the page and dropping the rest, watching for <link rel="alternate" type="application/rss+xml"> or its Atom equivalent. The answer is recorded either way — a page with no feed gets a “asked, and there is nothing here” stamp so it is left alone for a month.
  2. It polls what it found, so any counts that exist appear straight away.

Fresh is off by default, and for one specific reason: it is the only thing on the dashboard that talks to the sites behind your bookmarks on a schedule, without you having opened one. That is a decision worth making yourself.


03. What it costs

Less than you would guess, and the design is mostly about keeping it that way.

Discovery — once per bookmark; a page with no feed is re-asked a month later.

Requests one GET per bookmark that has never been asked
Read the first 512 KB of the page — the <link> is in the head, and a page that has not declared one by then never will
Timeout 8 seconds
Per round at most 60 bookmarks
No feed found remembered, and not asked again for 30 days
User agent nextDash FeedFinder/1.0

A collection larger than 60 is walked over several rounds rather than in one burst of outbound traffic — so on a dashboard with 200 bookmarks the first full sweep takes roughly four rounds. Find feeds now on the Fresh tab runs one on demand rather than waiting.

Polling — hourly, and conditional.

Interval one round every hour, covering every known feed (the scheduler wakes every 15 minutes to see whether a round is due, so “hourly” survives a restart)
Request conditional — If-None-Match / If-Modified-Since from the server’s own validators
Quiet site answers 304 Not Modified, no body, a few hundred bytes
Timeout 10 seconds
Body cap 1 MB
Failures five consecutive failures retire the feed rather than retrying it forever — polling stops for that bookmark
User agent nextDash FeedBot/1.0

The hour is Fresh’s own number. In 1.3.0 it borrowed the background health re-check interval, which turned out to be a control people switch off entirely — and can run as slowly as once a day, which is far too slow for something whose job is to answer what is new. Since every request is conditional, an hour is unremarkable for the site on the other end.

Feeds belonging to a bookmark you have deleted are not polled. A page that starts advertising a different feed drops the stored validators and timestamps, because those belonged to the old feed and would make the new one look already read.

What is stored. A single feeds.json in your data directory: per bookmark, the feed address, the ETag and Last-Modified validators, and the timestamps of up to twenty recent entries. Timestamps only — no titles, no links, no article bodies. It is a state file, not a copy of the feed.


04. Which of your bookmarks take part

In 1.3.0 there was no way to answer this at all: a row with a feed and nothing new was indistinguishable from a row with no feed. v1.3.1 gives three answers, quietest first.

The bookmark editor. Open a bookmark in Config and there is a Feed line with the address when there is one. This is the place to look when a particular bookmark never says anything.

Search. status:feed narrows a search to every bookmark taking part; status:unfed (or -status:feed) gives you the rest. Both only mean anything while Fresh is on — with it off the server answers with an empty map, and every bookmark would read as “no feed”, which is an answer about the setting rather than about the bookmark.

A quiet mark on the rows. Config → Behavior → Fresh → Mark rows that publish, even when nothing is new puts a small · on those rows. It is off by default, for the reason given in section 01. A real count always wins over the dot.

And on the tab itself, a line that counts it out for you:

12 of 40 bookmarks asked · 2 publish a feed

That single line is the difference between “nothing new today” and “nothing here can ever tell me anything”.


05. If nothing shows up

An empty dashboard is the usual answer, and it is not a fault. Most saved pages publish nothing at all. A shop, a wiki page, a login screen, a documentation index, an internal tool — none of them carries a feed. Read the coverage line on the Fresh tab: if the third number is 0, Fresh is working correctly and there is genuinely nothing to count.

A short checklist for the cases that are worth chasing:

  • Is it on? Config → Behavior → Fresh. The tab moved in v1.3.1; if you are following older prose looking under Status & health, that is why you cannot find it.
  • Have your bookmarks been asked yet? The first number in the coverage line. Discovery does at most 60 per round — press Find feeds now to run another.
  • Added bookmarks recently? Each hourly round looks for feeds first, precisely so a bookmark saved since the last round is not skipped for a whole interval. Or force it with Find feeds now.
  • A specific bookmark stays silent. Open it in Config and check the Feed line. No line means the page advertises no feed in its head — plenty of sites publish one but never link to it, and nextDash deliberately does not guess at /feed or /rss.
  • It used to work and stopped. Five consecutive failed polls retire a feed and polling stops for that bookmark — a feed that has answered badly five times running is gone rather than slow. If the site has since fixed its feed and the row stays silent, that is worth raising as an issue.
  • Are you on 1.3.1? In 1.3.0, feeds were only discovered as a side effect of fetching link previews. On an install with previews switched off, nothing was ever discovered and feeds.json stayed empty forever. That is fixed; Fresh now asks for itself.

06. What Fresh is not

It is not a feed reader, and that is a design decision rather than a roadmap item.

No article list. No titles. No excerpts. No read state of its own. No OPML import or export. The only thing Fresh knows about a feed is how many entries are newer than your last visit, and the only thing it does with that is put a number on a row.

The reasoning is boundaries. Storing article titles means a list; a list means a reading view; a reading view means read state, sync, and a second product living inside a bookmark dashboard. Fresh exists to make an existing row slightly more honest. That is the whole ambition.

If you want to read the feed, you already have the bookmark. Click it.


At a glance

Setting Config → Behavior → Fresh → Show what is new since you last looked
Default Off
Extra switch Mark rows that publish, even when nothing is new (off by default)
On the row A small count, up to 20; a · if the quiet mark is on
Collection ✳ Fresh (n), newest publication first, hidden when empty
Clears when You open the bookmark
Search status:feed, status:unfed, -status:feed
Discovery One request per bookmark, 60 per round, no-feed pages re-asked after 30 days
Polling One round an hour, every request conditional; a feed is retired after 5 consecutive failures
Stored feeds.json — feed URL, validators, up to 20 entry timestamps. No content.
Endpoints GET /api/feeds, POST /api/feeds/poll
Since v1.3.0 · rebuilt in v1.3.1

Where to go next

Fresh introduces itself, too: on a page with at least three bookmarks on it a card appears once in the corner — “Some of these pages have moved on” — and hands over to a four-step walkthrough that ends on the switch itself. It is shown once, ever, and never to someone who already has Fresh on. If you dismissed it, the same walkthrough is one button away under Config → Help → Monitoring → Fresh, along with a line saying whether it is currently on for you.

Tags: nextdash, updates, fresh, feeds, rss, dashboard

online uptime 26d 11 posts utf-8 wp 7.1