Skip to main content

The change

The ecosystem-launcher tile grid (already shipping on pebble console, ares dashboard, and family-hub) now lives in hubble and hatch too. Ten entries — CASA, Hubble, Velocity, Hatch, Airlock, Pebble, Ares, Studio, Meridian, Manual — each a tile with icon, label, and one-liner. Two rows on desktop, one column on mobile. Click opens the target app in the same window, carrying ?from=<app>&reason=launcher for arrival telemetry. Plus: a Sign out link in every topnav that goes to airlock’s new GET /auth/sign-out endpoint, clears the .devarno.cloud cookie cleanly, and lands the user at airlock’s sign-in page.

Before / after

Before:
  • Hubble topnav: HUBBLE logo, status indicator, nothing else. Want to reach hatch? Type the URL.
  • Hatch topnav: HATCH logo, “Airlock Control” badge. No exit.
After:
  • Hubble + hatch + the rest: logo, status, Apps dropdown, Sign out. Apps dropdown opens a tile grid with every sibling app reachable in one hop.

Under the hood

Ported the ares/dashboard variant (no vaul / no Radix — just lucide-react + a click-outside toggle panel). Each app carries its own copy of cross-app-links.ts and ecosystem-apps.ts with the from=<app> query-string baked in, so receivers can render a “back to hubble” breadcrumb. Five apps now have the same three files (ecosystem-launcher.tsx, cross-app-links.ts, ecosystem-apps.ts) copy-pasted. A shared @devarno/ui-nav package is the natural next consolidation once a sixth instance arrives.

Shipped

  • Hubble #1 — ecosystem launcher + sign-out wiring.
  • Hatch #2 — ecosystem launcher + sign-out wiring.
  • Hatch #3 — unblocks hatch builds (AuthProvider was importing a retired authClient; rewired to call airlock directly).
  • Airlock #10GET /auth/sign-out endpoint that the topnav links route through (delegates to BetterAuth internally, forwards the clearing cookies).
  • Family-hub #83 — auth-client shim’s signOut() now redirects through airlock’s new endpoint.

Side effect

Exercising the nav in-session is what surfaced the CASA /sign-in infinite loop (the bug that blocked ten minutes of UX dogfooding and led to the separate airlock session-storm sweep). Ship more connective tissue, find more bugs.