# td-synnex/edge-beacon architecture

> Architecture diagram of the GitHub repository td-synnex/edge-beacon, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-30). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/td-synnex/edge-beacon
- Repository: https://github.com/td-synnex/edge-beacon

## Overview

EDGE Beacon is an authenticated workspace for Cisco practice teams, spanning discovery, searchable program knowledge, customer context, learning, labs, and approvals. A signed-in user explores the UI and can submit a guided/AI discovery request or use Beacon features; the API verifies identity and routes requests to matching or narrow Jev judgments. The README documents major product branches not all sampled in source. Edges below are limited to visible imports/calls or explicit README statements; several feature-to-data relationships are documented rather than verified from implementation excerpts.

Main entry points: [`server/beacon-api.ts`](https://github.com/td-synnex/edge-beacon/blob/main/server/beacon-api.ts) (Beacon routes), [`src/main.ts`](https://github.com/td-synnex/edge-beacon/blob/main/src/main.ts) (Workspace controller), [`server/api.ts`](https://github.com/td-synnex/edge-beacon/blob/main/server/api.ts) (API router), [`src/views`](https://github.com/td-synnex/edge-beacon/tree/main/src/views) (Practice views)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_workspace["Workspace UI"]
  node_main["Workspace controller<br/>[main.ts]"]
  node_searchui["Beacon search<br/>[atlas-bar.ts]"]
  node_context["Customer context<br/>[context-pane.ts]"]
  node_terminal["Lab terminal<br/>[terminal.ts]"]
  node_views["Practice views"]
end

subgraph group_domain["Practice Data"]
  node_catalog["Solutions and use cases<br/>[catalog.ts]"]
  node_edge["Workspace records<br/>[edge-data.ts]"]
  node_index["Search index<br/>[beacon-index.ts]"]
  node_matcher["Guided matching<br/>[matcher.ts]"]
  node_contracts["Shared contracts<br/>[edge-types.ts]"]
end

subgraph group_service["API and Judgments"]
  node_api["API router<br/>[api.ts]"]
  node_beaconapi["Beacon routes<br/>[beacon-api.ts]"]
  node_worker["Worker entry<br/>[worker.ts]"]
  node_jevclient["Jev client<br/>[client.ts]"]
  node_search["Search judgments<br/>[search.ts]"]
  node_match["Discovery judgments<br/>[match.ts]"]
  node_inbox["Inbox triage<br/>[inbox.ts]"]
  node_lab["Lab grading<br/>[lab.ts]"]
  node_opps["Opportunity checks<br/>[opportunities.ts]"]
end

subgraph group_identity["Identity"]
  node_authui["Sign-in client<br/>[auth.ts]"]
  node_auth["Token verification<br/>[auth.ts]"]
end

node_user(("Practice team"))
node_cognito["Cognito"]
node_jev["TypeSafe System One"]

node_user -->|"uses"| node_main
node_main -->|"signs in"| node_authui
node_main -->|"renders"| node_views
node_main -->|"uses matching"| node_matcher
node_main -->|"posts discovery"| node_api
node_main -->|"mounts"| node_searchui
node_views -->|"opens details"| node_context
node_views -->|"uses lab console"| node_terminal
node_searchui -->|"searches"| node_index
node_searchui -->|"requests search"| node_beaconapi
node_context -->|"checks opportunities"| node_beaconapi
node_terminal -->|"requests grading"| node_beaconapi
node_index -->|"indexes"| node_catalog
node_index -->|"indexes"| node_edge
node_matcher -->|"matches against"| node_catalog
node_worker -->|"dispatches"| node_api
node_api -->|"verifies requests"| node_auth
node_api -->|"routes Beacon"| node_beaconapi
node_api -->|"verifies token"| node_cognito
node_beaconapi -->|"dispatches"| node_search
node_beaconapi -->|"dispatches"| node_match
node_beaconapi -->|"dispatches"| node_inbox
node_beaconapi -->|"dispatches"| node_lab
node_beaconapi -->|"dispatches"| node_opps
node_search -->|"retrieves records"| node_index
node_search -->|"asks judgments"| node_jevclient
node_inbox -->|"asks judgments"| node_jevclient
node_lab -->|"asks judgments"| node_jevclient
node_opps -->|"asks judgments"| node_jevclient
node_jevclient -->|"queries"| node_jev
node_beaconapi -->|"uses workspace data"| node_edge
node_views -.->|"presents features"| node_edge
node_views -.->|"presents solutions"| node_catalog
node_api -->|"discovery catalog"| node_catalog
node_authui -.->|"signs in"| node_cognito

click node_main "https://github.com/td-synnex/edge-beacon/blob/main/src/main.ts"
click node_searchui "https://github.com/td-synnex/edge-beacon/blob/main/src/components/atlas-bar.ts"
click node_context "https://github.com/td-synnex/edge-beacon/blob/main/src/components/context-pane.ts"
click node_terminal "https://github.com/td-synnex/edge-beacon/blob/main/src/components/terminal.ts"
click node_views "https://github.com/td-synnex/edge-beacon/tree/main/src/views"
click node_authui "https://github.com/td-synnex/edge-beacon/blob/main/src/auth.ts"
click node_catalog "https://github.com/td-synnex/edge-beacon/blob/main/shared/catalog.ts"
click node_edge "https://github.com/td-synnex/edge-beacon/blob/main/shared/edge-data.ts"
click node_index "https://github.com/td-synnex/edge-beacon/blob/main/shared/beacon-index.ts"
click node_matcher "https://github.com/td-synnex/edge-beacon/blob/main/shared/matcher.ts"
click node_contracts "https://github.com/td-synnex/edge-beacon/blob/main/shared/edge-types.ts"
click node_api "https://github.com/td-synnex/edge-beacon/blob/main/server/api.ts"
click node_beaconapi "https://github.com/td-synnex/edge-beacon/blob/main/server/beacon-api.ts"
click node_worker "https://github.com/td-synnex/edge-beacon/blob/main/server/worker.ts"
click node_auth "https://github.com/td-synnex/edge-beacon/blob/main/server/auth.ts"
click node_jevclient "https://github.com/td-synnex/edge-beacon/blob/main/server/jev/client.ts"
click node_search "https://github.com/td-synnex/edge-beacon/blob/main/server/jev/search.ts"
click node_match "https://github.com/td-synnex/edge-beacon/blob/main/server/jev/match.ts"
click node_inbox "https://github.com/td-synnex/edge-beacon/blob/main/server/jev/inbox.ts"
click node_lab "https://github.com/td-synnex/edge-beacon/blob/main/server/jev/lab.ts"
click node_opps "https://github.com/td-synnex/edge-beacon/blob/main/server/jev/opportunities.ts"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_main,node_searchui,node_context,node_terminal,node_views toneBlue
class node_catalog,node_edge,node_index,node_matcher,node_contracts toneAmber
class node_api,node_beaconapi,node_worker,node_jevclient,node_search,node_match,node_inbox,node_lab,node_opps toneMint
class node_authui,node_auth toneRose
class node_user,node_cognito,node_jev toneIndigo
```

## Components

### Workspace UI

- [Workspace controller](https://github.com/td-synnex/edge-beacon/blob/main/src/main.ts): `src/main.ts`
- [Beacon search](https://github.com/td-synnex/edge-beacon/blob/main/src/components/atlas-bar.ts): `src/components/atlas-bar.ts`
- [Customer context](https://github.com/td-synnex/edge-beacon/blob/main/src/components/context-pane.ts): `src/components/context-pane.ts`
- [Lab terminal](https://github.com/td-synnex/edge-beacon/blob/main/src/components/terminal.ts): `src/components/terminal.ts`
- [Practice views](https://github.com/td-synnex/edge-beacon/tree/main/src/views): `src/views`

### Practice Data

- [Solutions and use cases](https://github.com/td-synnex/edge-beacon/blob/main/shared/catalog.ts): `shared/catalog.ts`
- [Workspace records](https://github.com/td-synnex/edge-beacon/blob/main/shared/edge-data.ts): `shared/edge-data.ts`
- [Search index](https://github.com/td-synnex/edge-beacon/blob/main/shared/beacon-index.ts): `shared/beacon-index.ts`
- [Guided matching](https://github.com/td-synnex/edge-beacon/blob/main/shared/matcher.ts): `shared/matcher.ts`
- [Shared contracts](https://github.com/td-synnex/edge-beacon/blob/main/shared/edge-types.ts): `shared/edge-types.ts`

### API and Judgments

- [API router](https://github.com/td-synnex/edge-beacon/blob/main/server/api.ts): `server/api.ts`
- [Beacon routes](https://github.com/td-synnex/edge-beacon/blob/main/server/beacon-api.ts): `server/beacon-api.ts`
- [Worker entry](https://github.com/td-synnex/edge-beacon/blob/main/server/worker.ts): `server/worker.ts`
- [Jev client](https://github.com/td-synnex/edge-beacon/blob/main/server/jev/client.ts): `server/jev/client.ts`
- [Search judgments](https://github.com/td-synnex/edge-beacon/blob/main/server/jev/search.ts): `server/jev/search.ts`
- [Discovery judgments](https://github.com/td-synnex/edge-beacon/blob/main/server/jev/match.ts): `server/jev/match.ts`
- [Inbox triage](https://github.com/td-synnex/edge-beacon/blob/main/server/jev/inbox.ts): `server/jev/inbox.ts`
- [Lab grading](https://github.com/td-synnex/edge-beacon/blob/main/server/jev/lab.ts): `server/jev/lab.ts`
- [Opportunity checks](https://github.com/td-synnex/edge-beacon/blob/main/server/jev/opportunities.ts): `server/jev/opportunities.ts`

### Identity

- [Sign-in client](https://github.com/td-synnex/edge-beacon/blob/main/src/auth.ts): `src/auth.ts`
- [Token verification](https://github.com/td-synnex/edge-beacon/blob/main/server/auth.ts): `server/auth.ts`

### Other components

- **Practice team**
- **Cognito**
- **TypeSafe System One**

## Connections

- Practice team → Workspace controller: uses
- Workspace controller → Sign-in client: signs in (evidence: `src/main.ts`)
- Workspace controller → Practice views: renders (evidence: `src/main.ts`)
- Workspace controller → Guided matching: uses matching (evidence: `src/main.ts`)
- Workspace controller → API router: posts discovery (evidence: `src/main.ts`)
- Workspace controller → Beacon search: mounts (evidence: `src/main.ts`)
- Practice views → Customer context: opens details (evidence: `src/views/home-view.ts`)
- Practice views → Lab terminal: uses lab console (evidence: `src/views/develop-view.ts`)
- Beacon search → Search index: searches
- Beacon search → Beacon routes: requests search (evidence: `src/components/atlas-bar.ts`)
- Customer context → Beacon routes: checks opportunities (evidence: `src/components/context-pane.ts`)
- Lab terminal → Beacon routes: requests grading (evidence: `src/components/terminal.ts`)
- Search index → Solutions and use cases: indexes (evidence: `shared/beacon-index.ts`)
- Search index → Workspace records: indexes (evidence: `shared/beacon-index.ts`)
- Guided matching → Solutions and use cases: matches against (evidence: `shared/matcher.ts`)
- Worker entry → API router: dispatches (evidence: `server/worker.ts`)
- API router → Token verification: verifies requests (evidence: `server/api.ts`)
- API router → Beacon routes: routes Beacon (evidence: `server/api.ts`)
- API router → Cognito: verifies token
- Beacon routes → Search judgments: dispatches (evidence: `server/beacon-api.ts`)
- Beacon routes → Discovery judgments: dispatches (evidence: `server/beacon-api.ts`)
- Beacon routes → Inbox triage: dispatches (evidence: `server/beacon-api.ts`)
- Beacon routes → Lab grading: dispatches (evidence: `server/beacon-api.ts`)
- Beacon routes → Opportunity checks: dispatches (evidence: `server/beacon-api.ts`)
- Search judgments → Search index: retrieves records (evidence: `server/jev/search.ts`)
- Search judgments → Jev client: asks judgments (evidence: `server/jev/search.ts`)
- Inbox triage → Jev client: asks judgments (evidence: `server/jev/inbox.ts`)
- Lab grading → Jev client: asks judgments (evidence: `server/jev/lab.ts`)
- Opportunity checks → Jev client: asks judgments (evidence: `server/jev/opportunities.ts`)
- Jev client → TypeSafe System One: queries (evidence: `server/jev/client.ts`)
- Beacon routes → Workspace records: uses workspace data (evidence: `server/beacon-api.ts`)
- Practice views → Workspace records: presents features (evidence: `src/views/develop-view.ts`)
- Practice views → Solutions and use cases: presents solutions
- API router → Solutions and use cases: discovery catalog (evidence: `server/api.ts`)
- Sign-in client → Cognito: signs in
