mirror of
https://github.com/hanzoai/store.git
synced 2026-10-30 14:54:46 +00:00
The convergence stopped one page short. `app/apps/[id]/page-client.tsx` was still the shadcn original — Tailwind utility classes on every element and an import of `@hanzo/ui/badge`, a subpath the 8.x package does not export, so the build could not resolve it at all. It is now written the way the rest of the store is: @hanzo/gui stacks and type inside the cards, plain CSS in globals.css for the things that position the page (the two-column split, the hero icon, the code blocks). Three duplications went with it: - The mark-plus-way-back that the documents and the app page both wear is now `StoreMark`, stated once in site-chrome. - The store → desktop hand-off had two spellings — `hanzo://install/<id>?…` in the grid and `hanzo://config?tool=…` on the app page. One protocol, one truth: `lib/install-url.ts`. Both call sites are anchors now, so the grid's imperative `window.location.href` closure is gone. - The 4rem card icon and the 6rem page icon are one `.app-icon` rule and a size modifier. And one silently-ignored prop, the failure mode gui has no error for: `fontFamily="$mono"` in the footer named a token that does not exist. The config declares two families, body and heading — there is no mono — so the text rendered in Geist Sans and nothing said so. Mono lives in theme.css, which typesets `code`; the footer uses `<code>`. Two dependency facts the build needed: - `@coinbase/cdp-sdk`, reached through wagmi's Base Account connector, imports the `@x402/*` payment SDKs unconditionally while declaring them optional peers. The store never signs an x402 payment and does not install them, and webpack resolves statically, so "optional" did not save it. They resolve to webpack's `fallback: false` — absent module, empty module. - @hanzo/ui's icons need `react-native-svg`, whose peer floor is react ^19.2.3; react moves 19.0.0 → 19.2.8 to meet it. Same pair the console and hanzo.ai already carry. Verified: `next build` compiles and exports 209 static pages. Co-authored-by: Hanzo Dev <[email protected]>
17 lines
779 B
TypeScript
17 lines
779 B
TypeScript
/**
|
|
* The one spelling of the store → desktop hand-off.
|
|
*
|
|
* Hanzo Desktop registers the `hanzo://` scheme and performs the install; the
|
|
* connected wallet rides along so the app knows who is installing. The store
|
|
* grid and the app page both offer the install, and they used to spell the link
|
|
* two different ways — `hanzo://install/<id>?…` on one and `hanzo://config?…`
|
|
* on the other — which is one protocol with two truths. It is stated here.
|
|
*/
|
|
import type { StoreApp } from '@/types'
|
|
|
|
export function installUrl(app: StoreApp, wallet?: `0x${string}`): string {
|
|
const params = new URLSearchParams({ name: app.name, type: app.type || 'Tool' })
|
|
if (wallet) params.set('wallet', wallet)
|
|
return `hanzo://install/${encodeURIComponent(app.id)}?${params}`
|
|
}
|