Skip to content

feat(store): the install button opens Pocket Hub on the app - #21

Merged
HalfSweet merged 1 commit into
mainfrom
feat/store-hub-link
Nov 12, 2026
Merged

HalfSweet merged 1 commit into
mainfrom
feat/store-hub-link

Conversation

@HalfSweet

@HalfSweet HalfSweet commented Nov 12, 2026 •

Copy link
Copy Markdown
Member

An app's page now hands the app to Pocket Hub. The install button is a link the system opens Hub's Mac app with:

pocket-hub://store/app/<id>

hubInstallLink in store/site/src/hub.ts builds it, and Pocket Hub's docs/DEEP-LINKS.md is the contract (pocket-nexus/pocket-hub#7 is Hub's side). The link carries the app's id and nothing else. Following it shows the app in Hub, on a device that can run it, and the owner installs it there: a link never installs by itself.

The page

  • The button is an <a> with that link. The disabled "Not open yet" state is gone, with its string.
  • A browser does not tell a page whether such a link opened anything. So once a visitor has followed it the page says what should have happened and what is missing when nothing did: Pocket Hub, a Mac app that is not released yet. Nothing is timed or guessed; the line appears on the click.
  • That line sits in the row under the screen, so the app's name does not move when it appears.
  • The id is encoded into the link. An id of the store's shape needs no encoding; one that held a ? or a # would otherwise read as another app's id with a query, which Hub ignores.

English and Simplified Chinese both have the new line.

Checked

  • bun run typecheck:site, bun test ./store/test (two new tests hold the link to the shape Hub takes), bun run site:build.
  • The page in headless Chrome on the live store's data, desktop and phone width, both languages: the button's href, the click, the line that follows, the page staying where it is.
  • Links of this shape, handed by the system to a build of Pocket Hub from pocket-nexus/pocket-hub#7 that ran against its mock core: they open the app on the applet.
  • Not exercised: a click in a real browser through to Hub, with the live store's ids. That starts Hub in the owner's real home, so it is for the owner to try.

Before merging

A merge deploys the store. From then on every visitor gets a live button, and until Pocket Hub is released it opens nothing for anyone without a build of it. The line under the button says so, but only after the click. The contract in Hub should be merged first.

An app's page hands the app to Pocket Hub through a link the system opens
Hub's Mac app with: pocket-hub://store/app/<id>. hubInstallLink builds it,
and Pocket Hub's docs/DEEP-LINKS.md is the contract: the link carries the
id and nothing else, and following it shows the app in Hub, where the
owner installs it.

A browser does not tell a page whether such a link opened anything, so once
a visitor has followed it the page says what should have happened and what
is missing when nothing did. The words go in the row under the screen, so
the app's name does not move.

The disabled "Not open yet" state of the button is gone with its string.
@HalfSweet
HalfSweet merged commit 4f0c777 into main Nov 12, 2026
2 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