Skip to content

Saved is gone; the like is the list now - #297

Merged
engmung merged 3 commits into
mainfrom
dev
Aug 12, 2026
Merged

Saved is gone; the like is the list now#297
engmung merged 3 commits into
mainfrom
dev

Conversation

@engmung

@engmung engmung commented Aug 12, 2026

Copy link
Copy Markdown
Owner

Three commits.

Saved was the weaker of two keeping gestures. It lived in localStorage — per-browser, invisible from your phone, gone with your site data — while a like was already stored per account. The only thing likes lacked was somewhere to read them back, so that is what got built: a Liked filter in the feed, shown only when signed in, answering empty rather than falling back to the whole wall. It still obeys feedVisible: having liked something is not a standing right to keep reading it after its author takes it private.

Then Saved came out — the star on a pattern page, the panel's Saved tab, the dock's counter, the promote path, and the retired localStorage key, which is cleared on the next deck read rather than left sitting in people's browsers.

Two things fell out of that removal. The rule that a pattern with no firmware header cannot enter a deck lived in savedToDeck, because Saved was the only route such a pattern had; deleting it deleted the check, and deckAdd never had one. It is in deckAdd now. The full-deck message also said "Save it instead" — advice to use the removed feature. The deck smoke test caught the first of these.

A deck's buttons went from five to three. Send to my board was not sending anything — it loaded the deck into your working deck and opened the panel, which is what Copy into my deck already did, then asked you to sign in to build what a public deck has had built and cached all along. Public decks now offer Install to my board (the board fetches the pack itself, no sign-in) and everything else keeps the long way round. Copy-link and download moved behind a Share panel, which also states the thing the buttons could not: the pack is built on first request and rebuilt whenever the running order changes — there is nothing to publish.

Verified: tsc and eslint clean, deck/sharing/pack/workshop smokes pass, and the liked feed was checked against the database (a user with 9 likes gets exactly those 9 out of a 66-item feed, signed-out gets 0) since checking it signed-in would have meant creating an account.

🤖 Generated with Claude Code

engmung and others added 3 commits August 12, 2026 12:41
"Copy into my deck", "Send to my board", "Install to my board", "Copy
pack link" and "Download pack" all sat in the same row, and three of
them were the same wish. "Send to my board" does not send anything - it
loads the deck into your working deck and opens the panel, which is
what "Copy into my deck" already did, and then asks you to sign in to
build what a public deck has had built and cached the whole time.

So only one of them shows now. A public deck has a pack at a stable URL
and offers "Install to my board", where the board fetches it itself: no
sign-in, no working deck, no queue. Anything else has no pack to fetch
and keeps the long way round.

Sharing moves out of the action row into a quiet line under it, because
it is what the deck's author does once and what a visitor never does.
That line also says the thing the buttons could not: the pack is built
on first request and rebuilt whenever the running order changes. There
is no bake step to go looking for - which is worth stating, because a
row of buttons with no "publish pack" in it reads like a missing
feature rather than an automatic one.

Also fixes the accent link arriving without padding or a border:
composing btnAccent alone emits btnAccentLink and btnAccent but drops
the btn underneath, so it got the fill and none of the shape. Both are
named explicitly now.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Liking was write-only. You could press it and the count went up and the
pattern was gone - there was no view anywhere that listed what you had
liked. The thing that did keep a list, Saved, lived in localStorage, so
it was per-browser and disappeared the moment you cleared site data.
The weaker half had the feature and the stronger half did not.

So "Liked" joins the feed's tabs. It only appears when signed in and
answers empty when not, rather than falling back to the whole wall,
which would be a tab that lies about whose list it is showing. It still
obeys feedVisible: having liked something is not a standing right to
keep reading it after its author takes it private.

The infinite scroll refills through the API route, so that had to learn
the viewer too - otherwise page two of your liked list arrived as the
rest of the wall.

Sharing a deck becomes one button and a panel. Copy-link and download
were sitting in the action row next to the thing visitors actually came
for, and the row had grown to five. The panel also shows the address
instead of only claiming to have copied it: "Copied" about a URL you
never saw asks for trust it has not earned, and the field is the
fallback when the clipboard is refused.

Verified against the database rather than through a browser session,
since checking it signed-in would have meant making an account: a user
with 9 likes gets exactly those 9 back out of a 66-item feed, with
nothing unliked leaking in, and the signed-out list comes back empty.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Saved was a second keeping list beside the like, and the weaker of the
two: it lived in localStorage, so it was per-browser, invisible from
your phone, and gone with your site data. A like was already stored per
account. The only thing it lacked was somewhere to read it back, which
the feed's "Liked" tab now is.

Gone with it: the star on a pattern page, the Saved tab in the deck
panel, the dock's saved counter, and the promote-into-deck path. The
panel holds one list now, so its tab strip is a label.

Two things fell out of the removal.

The rule that a pattern with no firmware header cannot enter a deck
lived in savedToDeck, because the Saved list was the only way such a
pattern could reach one. Deleting that function deleted the check, and
deckAdd never had it - the callers were gating their own buttons and
nothing underneath them agreed. It is in deckAdd now, where everything
enters. The deck smoke test caught this, which is what it is for.

And the full-deck message said "Save it instead", which was advice to
use a feature this commit removes.

The retired localStorage key is cleared on the next deck read rather
than left behind. Nothing reads it any more, so it would otherwise sit
in people's browsers indefinitely holding copies of patterns with no
screen able to show or empty it.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@vercel

vercel Bot commented Aug 12, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
pattern-flow_origin Building Building Preview Aug 12, 2026 6:27am
pattern-flow-open Ready Ready Preview Aug 12, 2026 6:27am

@engmung
engmung merged commit 0facf9c into main Aug 12, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant