Skip to content

Give Plaza its own page, and its name everywhere it was anonymous - #6

Merged
sepehr-safari merged 2 commits into
mainfrom
plaza-page
Jul 31, 2026
Merged

Give Plaza its own page, and its name everywhere it was anonymous#6
sepehr-safari merged 2 commits into
mainfrom
plaza-page

Conversation

@sepehr-safari

Copy link
Copy Markdown
Contributor

The site talked about "the flagship client" in three separate places and never said what it is called. The app I have put the most work into was the one thing on zignostr.com you could not look up.

/plaza

A page of its own, covering what the app actually is rather than a feature list:

  • Reading before identity. It opens into a feed, not a wall, and only asks who you are when you reach for something that needs it. The three ways in, and the fact that whatever you reached for is finished for you afterwards.
  • Where the key lives. A separate keyholder process owns the secret, or your own signer does. The app never holds it, even when it makes one for you. This is the thing that makes Plaza and Signet one design rather than two apps.
  • What is in it today, honestly scoped, with private messages named as the next milestone rather than implied.
  • Careful with what is yours. Follow lists, relay lists and profiles get read back before they are written. Worth saying out loud on a public page, because it is the failure mode that actually costs people something.
  • The frame budget, the same numbers the repo publishes and scripts/frame-budget.sh reproduces.

Named everywhere it was anonymous

The home page's "Native apps" card, the ecosystem list, and the roadmap's "In progress" entry all say Plaza and link to the page. Two headings in the ecosystem list moved from a dash to a colon so the section reads consistently.

No download line yet

The page says plainly that Plaza is not tagged for download and gives the source build instead.

A curl | bash line belongs here the day the first tag exists and not an hour before. Until then it resolves to "there is no published release yet", which is a worse first impression than no install line at all. Cutting that tag is a separate, deliberate act and this PR does not do it. When it happens, one paragraph on this page changes.

Checked

npm run build clean, 14 static pages. Served the build and walked it: /plaza returns 200, every internal link on the page resolves, the perf table renders, and the four pages that now link to it all resolve too.

The site described "the flagship client" in three places and never once said
what it was called, which makes the one app I am building hardest to find the
one nobody can look up.

A page of its own now: reading before identity, where the key actually lives
(a separate keyholder process, or your own signer, never the app), what is in
it today, why replaceable events get read back before they are written, and
the frame budget the feed holds while scrolling.

The home page, the ecosystem list and the roadmap all name it and link to it.

It says plainly that there is nothing to download yet and gives the source
build instead. A one-line installer belongs on this page the day the first tag
exists and not an hour before, because a curl that resolves to "no release
published yet" is worse than no curl at all.
@vercel

vercel Bot commented Jul 31, 2026

Copy link
Copy Markdown

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

Project Deployment Actions Updated (UTC)
zignostr.com Ready Ready Preview Jul 31, 2026 2:58pm

Review checked every sentence against the code and found six that do not hold.

Key custody was the bad one. "Plaza does not hold your secret key" was stated
absolutely, and a bare source build falsifies it: there is no ceremony window in
zig-out, so pasting an existing key lands in Plaza itself and is written to
~/.plaza. The app already knows this and changes its own wording for it. The
page now says where the key goes on each path, and names the exception rather
than leaving a reader to discover it.

Follower counts. The page claimed profile pages show follows and followers.
Plaza deliberately shows only a following count, with the reasoning written into
profileCounts and a test holding it there: following is a number someone states
about themselves, followers is one nothing on your disk can know. I turned the
claim into the restraint, which is the more interesting thing to say anyway.

Windows CI. "Linux and Windows build and test in CI" is false; the matrix is
ubuntu-latest alone, because the relay transport needs libc getaddrinfo and
Zig's standard library does not declare it for Windows. The same sentence is
wrong in the app's README, fixed separately.

Also: relay lists are rebuilt from the app's own slots, so "keeps the parts it
does not understand" is true of follow lists and profiles and not of those.
Plaza does not use the core's outbox model yet. And a remembered follow waits
for a follow list to arrive rather than always completing, so the sentence
promising otherwise is softened.

The home page's app card still said "Flagship client" and pointed at the
roadmap, which is exactly what the last commit claimed to have fixed
everywhere. It says Plaza and links to the page.

The roadmap's year ahead listed threads, reactions, quotes and media as future
work while the new page lists them as shipped. Two public pages disagreeing
about what exists is worse than either being wrong alone.
@sepehr-safari

Copy link
Copy Markdown
Contributor Author

Reviewed the page against the app it describes rather than merging it on the build passing. 17 findings survived refutation, deduplicating to eight real problems. All fixed in the second commit.

The one that mattered

"Plaza does not hold your secret key" was false, stated absolutely, in a configuration this page's own build instructions produce.

signet-window is a separate sub-project. native build . does not build it, and its zig-out is gitignored, so a fresh clone has no ceremony window. ceremonyCanTakeKey() is then false, .open_signet_import falls back to the in-Plaza paste field, and importNsec writes the raw 32-byte secret to ~/.plaza/identity.key and keeps the keypair in Plaza's own process. Settings then says, correctly, "The key is on this Mac, in this app."

The app is more honest than my page was: the join card changes its own subtitle to "Pasted here, and kept on this device." for exactly this case. The page now says where the key goes on each path and names the exception.

The create half survives: createLocalIdentity is dead code, every create routes through the daemon, so "there is no moment at which Plaza has held one" holds.

Straight factual errors

claimed actual
"profile pages with follows and followers" Plaza shows a following count only, deliberately, with the reasoning in profileCounts and a test holding it
"Linux and Windows build and test in CI" matrix is os: [ubuntu-latest]; Windows cannot link at all (nostr#59)
"keeps the parts it does not understand" for follow lists, relay lists and profiles relay lists are rebuilt from the app's own slots as r tags, so anything else is dropped
"the outbox model" among what Plaza takes from the core the core has it; Plaza does not route by it yet
"remembered and finished for you afterwards" a remembered follow waits for a follow list to arrive rather than always completing

The followers one is the one I mind. The app refuses to print a follower count because nothing on your disk can honestly know it, and that restraint is a better thing to say than the feature I invented. The page says it now.

The thing the last commit claimed to have done

The home page's app card still read "Flagship client" and pointed at /roadmap, fifty lines below the pillar paragraph I did update. A commit titled "its name everywhere it was anonymous" left the most prominent anonymous reference on the site untouched. Fixed, and it matches the Signet card beside it.

Neighbouring pages that now disagreed

The roadmap's "year ahead" scheduled threads, reactions, quotes and media as future work while the new page lists all four under "What is in it today". Two public pages disagreeing about what exists is worse than either being wrong on its own, so the year-ahead item is now what actually remains.

Out of scope

The same false Windows sentence is in the app's README, where I copied it from. Fixed separately in zig-nostr/plaza#83.

/nips lists NIP-10 as planned while Plaza ships threading. That table tracks the library, which genuinely has no NIP-10 (threading lives in Plaza's own collectThreadIds), so the table is correct and I have left it alone.

Rebuilt, served, and walked the pages again: every internal link resolves and the corrected sentences are the ones being served.

@sepehr-safari
sepehr-safari merged commit e2d360c into main Jul 31, 2026
3 checks passed
@sepehr-safari
sepehr-safari deleted the plaza-page branch July 31, 2026 15:01
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