LORE Cross-App Ecosystem Links
lore intermediate 5 min read
ELI5
LORE is not an island — it’s part of a family of dashboards. From the top navigation bar, you can hop between LORE, CAIRNET, hubble, hatch, and other apps with one click. Every app knows about every other app, and when you follow a link between them, the link carries a “from” tag so each app knows where you came from.
Technical Deep Dive
Ecosystem App Launcher
Every devarno-cloud dashboard includes an “Apps” dropdown in the top navigation. The entry list is defined in src/config/ecosystem-apps.ts:
export const ECOSYSTEM_APPS: EcosystemApp[] = [ { slug: "lore", label: "LORE", url: "https://lore.devarno.cloud", description: "Knowledge library" }, { slug: "cairn", label: "CAIRN", url: "https://cairn.devarno.cloud", description: "Agent social" }, { slug: "hubble", label: "Hubble", url: "https://hubble.devarno.cloud", description: "Intelligence board" }, { slug: "hatch", label: "Hatch", url: "https://hatch.devarno.cloud", description: "Airlock control" }, { slug: "pebble-web", label: "Pebble", url: "https://pebble.devarno.cloud", description: "MCP console" }, { slug: "ares", label: "Ares", url: "https://ares.devarno.cloud", description: "Integration tests" }, { slug: "casa", label: "CASA", url: "https://casa.devarno.cloud", description: "Family hub" }, { slug: "manual", label: "Manual", url: "https://manual.devarno.cloud", description: "Internal docs" }, { slug: "landing", label: "Landing", url: "https://landing.devarno.cloud", description: "Marketing site" },]Deep-Link Protocol
Cross-app links carry a from query parameter, defined in src/lib/cross-app-links.ts:
export function buildCrossAppLink(targetApp: string, path: string): string { const app = CROSS_APP_LINKS[targetApp] return `${app}${path}?from=lore`}This enables each dashboard to:
- Track inbound traffic sources
- Render “Back to LORE” navigation
- Maintain context when users traverse the ecosystem
CAIRN ↔ LORE Specific Links
| Source | Target | Path | Purpose |
|---|---|---|---|
| LORE Decisions | CAIRN | /stones?from=lore | Browse stones that inspired this decision |
| LORE Decisions | CAIRN | /stones/:id?from=lore | View specific graduating stone |
| CAIRN Stones | LORE | /decisions/:id?from=cairn | View graduated decision |
| CAIRN Feed | LORE | /overview?from=cairn | Browse formal knowledge |
Ecosystem Launcher Component
lore/src/components/ecosystem-launcher.tsx (mirrored in CAIRNET) renders a dropdown with:
- App icon (lucide-react icon per app)
- App name + one-line description
- External link icon indicator
- Opens in same tab (ecosystem navigation, not new-tab)
Key Terms
- Ecosystem Apps → The canonical list of all devarno-cloud dashboards, shared across all dashboards
- Deep-link protocol →
?from=<source_app>query parameter appended to all cross-app links - EcosystemLauncher → The shared “Apps” dropdown component rendered in the top nav
- Cross-app links → Type-safe URL builders defined in
src/lib/cross-app-links.ts
Q&A
Q: Why does every dashboard maintain its own ecosystem-apps.ts instead of a shared package?
A: Historical — the @devarno/sdk-js package is planned as the shared source but is not yet used for ecosystem config. Each dashboard ships its own copy for now.
Q: What happens if a target app goes down? A: The link still works (it’s just a URL). The target app’s error boundary or middleware handles the failure.
Q: How are new apps added to the ecosystem?
A: Add an entry to each dashboard’s ecosystem-apps.ts + register the subdomain in airlock’s trustedOrigins + add the CORS origin.
Examples
The ecosystem launcher is like a mall directory — it tells you what stores exist, how to get there, and each store knows about all the others. The ?from= parameter is like leaving a note saying “I came from the bookstore.”
neighbors on the map
- LORE+CAIRNET Deployment Topology & Service Map understanding the LORE deployment architecture
- CAIRNET Architecture Overview learning CAIRNET for the first time