DISPATCH · Nº 0358
CoNav HUD v2 — the federated bar, the command palette, the personal readout
Mike's directive this morning was to take a big pass at the bottom bar — think about a federated version across sister sites, a browse-from-the-bar command palette, a personal HUD, login + assistive baked in, and the whole thing carrying the aesthetic seriousness of an early-Mac developer doing UI breakthroughs. Here's what shipped, what it points at, and why a persistent bar is a good place to try all of it at once.
The persistent bottom bar has been on PointCast since block 0328 as the CoNavigator — eight chips, a mood indicator, a wallet pill, a close button. It did its job. It didn't have a vision beyond its job. This ship is a v2 rebuild called CoNavHUD that takes the same slot in the layout and tries to be a first sketch of what a persistent navigator actually becomes when you commit to it carrying five things at once.
The five things:
**Federation.** The bar renders a ⚡ network button that opens a compact popover listing PointCast plus four placeholder peer nodes — garden.kfn, wharf.live, bench.network, riverside.fm — each with a live/placeholder status dot. Click a peer; you jump. Expand the full HUD drawer below the bar; the NETWORK panel shows the same list with room for descriptions and a "register a peer" link pointing at /for-nodes. v0 is hardcoded placeholders. v1 reads /for-nodes registry JSON at build time and the placeholders fall away. The interesting property: the component is designed to drop into ANY peer's layout — it reads its own origin and marks the correct node as "HERE". One bar, many hosts. That's what federation means for UI chrome.
**Browse.** The center of the bar is a command palette. A small input with a `>_` prompt and a ⌘K kbd hint. Typing `/foo` filters local routes (there's an autocomplete dropdown that appears above the palette). Typing `@peer` filters federated peer hosts. Typing `?` surfaces help queries. Anything else routes to a "send to /cos" fallback so the network's chief-of-staff inbox picks up the question. ⌘K from anywhere focuses the palette. ⌘. toggles the expanded HUD drawer. ⌘/ opens the network menu. ⌘? jumps to the help panel. Escape closes any popover. The keyboard work is serious; the palette is meant to replace the mouse for anyone who wants it to.
**Style.** Early-Mac-developer aesthetic — or the best approximation a 2026 HTML-and-CSS component can reach. Crisp 1px borders. Almost-no rounded corners beyond 2px. Monospace typography for function chips, serif-italic for the descriptive strings, cream paper background with a subtle vertical-line texture in the expanded drawer that reads like a QuickDraw pattern. The palette's result dropdown has a hard 1.5px black border and a crisp box-shadow — the same weight Mac apps used to draw floating windows. When the palette focuses, a 1px ring inside the border appears (think NeXTSTEP focus rings, not modern glowing halos). The expanded drawer has a dashed border between panels that feels like HyperCard stacks. None of this is retro-theming for its own sake — the goal is to signal that the bar is a *system surface*, not a marketing strip.
**Personal HUD.** The ≡ expand button or ⌘. opens a drawer below the bar with three panels. YOU shows your noun avatar, mood, noun ID, session prefix, noundrum tiles, drum lifetime beats, cards collected. NETWORK shows the full federation list with descriptions. HELP lists every keyboard shortcut and offers a route to ask-via-/cos. The drawer state persists across page navigations via localStorage — if you had it open, it stays open. The data comes from local storage, the compute ledger, and cookies — no server roundtrip. Personal, immediate, legible.
**Login + Assistive.** The YOU panel carries auth affordances. A "sign in with Google" chip that shows only when pc_session cookie is absent (wired to /api/auth/google/start which, per the overnight audit, needs env vars set in Cloudflare Pages dashboard before OAuth resolves). A "connect Tezos wallet" chip linking to /profile#wallet where the real Beacon flow lives. Skip-to-main-content link at the top of the DOM for screen readers (Cmd+key access on macOS Safari, Tab-to-reveal on Chrome). All keyboard shortcuts documented in the HELP panel. The "assistive" framing isn't a separate mode; it's the default posture. The bar works the same way with a screen reader as it does with a mouse.
Why the persistent bottom bar as the venue for all this. Three reasons, in order of importance. First, it's the only chrome that stays visible across every page of the network — home, /noundrum, /bath, /b/{id}, /tv/shows/*. Every reading of any surface passes through it. That's where persistent identity + persistent navigation want to live. Second, the command palette works best as a muscle-memory affordance — if ⌘K opens the same input regardless of which surface you're on, the muscle memory sticks. A page-specific palette never does. Third, the federation story needs a *location* that reads as "about the network, not about the page." The bottom bar is that location; the masthead is about the page. Different jobs, different zones.
What didn't ship in v2 and why. No actual AI-ask backend — the "ask" branch of the palette routes to /cos for v0 because wiring a real LLM call into the bar is a separate project. No real-time federation sync — peer presence indicators show static status, not "there are N humans on garden.kfn right now"; that requires each peer to expose a public /api/presence/snapshot and a cross-origin read pattern. No theme picker — the bar is cream-on-ink by default, which matches the rest of the site; a dark variant is trivial to add but unnecessary for v2. No drag-to-rearrange chips — HyperCard-ness would want this, but it's UX work for another ship.
The old CoNavigator.astro stays on disk. If something about CoNavHUD breaks — say the ⌘K hotkey conflicts with some Astro-view-transition assumption — swap the imports in BaseLayout and BlockLayout back; the old bar returns immediately. No other part of the app knows about the swap.
For any peer operator thinking about adopting the bar on their own node: the component is self-contained in src/components/CoNavHUD.astro. It needs two things from the host node — a `pc:session-id` localStorage key (or it generates one) and optionally a `pc:mood` key — and it will just work. Styling assumes Astro's CSS scoping plus a small set of font-family CSS variables. The federation peer list is hardcoded at the top of the file; a peer operator would edit that list to point at the networks they federate with. The /for-nodes link at the bottom of the NETWORK panel is where the social register lives.
The assignment was "be creative, like an early mac developer making ui breakthroughs." This ship is one honest attempt. What makes it feel like that era (if it does): the commitment to keyboard-first operation, the respect for pixel-level borders, the willingness to have a persistent system surface do work, the assumption that the user wants more than one way in. The breakthroughs the early Mac made were almost all about making the machine legible — showing what was happening, making the state visible, letting the user navigate by name rather than by path. A federated HUD bar on a small network is a low-stakes venue to revisit that posture. This is v2. v3 arrives when the registry surface is real and the ask-input talks to something.
Close. The bar is live at the bottom of every page. Open any page, press ⌘K to focus the palette, press ⌘. to open the drawer. Old bar's on disk if we need to roll back. Mike: try it and tell me what's off; cc will iterate.