A quiet summer and a save button we built three times
From May to the middle of September 2026, Reading Rewind changed from a bookmark manager with a reader view into a read-later app, and there was no single day when we decided that. The log has one commit in June and none in July. The clearest trace of the change is a save-this-page button that we built in April, cut, deleted and built again before it became the main thing the extension does.
May
On 5 May we added Add Link, for saving a link by hand. The window didn't open, and Save didn't save either. Our first two fixes went after the window itself and changed nothing.
The real cause was one misplaced <style> block. Livewire, the framework that connects our pages to the server, expects one root element per component. Ours had the style block sitting next to the main element, Livewire attached itself to the style block, and every click on the bookmarks page went to a component that wasn't listening. Moving the block inside the main element fixed both bugs.
The tests hadn't caught it because they called the save method directly and never touched the page. That day we added browser tests that click the real button. A note we wrote at the time says that test "should have existed from the start", and it should have.
May also brought a new home page, in light and dark.
June
The whole month is one commit in our git log, on 10 June, titled "Adversarial review pass: security, sync correctness, simplification, dead code". It touched 69 files, added 1,684 lines and removed 2,480. Among the removals were leftover screen code for saved tab sessions and the server code for saving the current page, which the extension no longer called. The suite ended the day at 283 passing PHP tests.
That server code belonged to the first save button. The April extension had a popup that saved the current tab, and when the extension moved into a side panel on 24 April we cut the save section. By June nothing used it.
July
July has zero commits. We have no heroic explanation for it.
August
Eleven small upgrades we had planned on 11 June only reached the repository on 2 August. Among them, words in [square brackets] at the start or end of a title became tags, and Add Link learned to fetch the page title when you leave the name empty.
On 15 August the save button came back for a second go, in the side panel this time, with an optional tag, and the server started preparing the reader copy in the background. The same session built six layouts for a new Library page and kept one, called Dense Index.
September
The third version came on 11 September, when the toolbar button itself became the save. One click stores the page and the server fetches its text, and a right-click opens the panel. Our plan for that day has the heading "Pocket-style open saves". Pocket had shut down in July 2025, so we were naming a feature after a service that no longer existed.
Saves went into their own list, called Open Saves, kept apart from synced bookmarks so a browser sync can never change them. We spent 12 September on polish, 23 commits of it. Saving a page that's already in the list moves it back to the top instead of adding a copy, and a Reader/Live switch flips between the stored copy and the live page. The saving state stays on screen for at least half a second; we set 300 ms first and raised it to 500, because a save that finished too quickly looked like a flicker. A new solid emerald logo arrived too, and local builds of the app and the extension started wearing a small "D" badge so we'd stop testing the wrong one.
Continued in The redesign we reverted within the hour.
More from the build log
-
18,918 orphaned bookmarks and the rule they taught us
On 2 October 2026 we found 18,918 orphaned bookmarks in our own library, left behind by a deleted source. Now every bookmark set in Reading Rewind has a source.
-
How we cut a 115-second sync to 4 seconds
Measured speed-ups in Reading Rewind: a full re-sync from 115 s to 4.2 s, a 5,000-link import from 7.5 s to 0.8 s, and lighter clicks across the app.
-
Locking the doors on a small read-later app
How we approached security in 2026: safer link fetching, single-use pairing links, rate limits on the busy parts of the app, and security headers.