Vanilla JavaScript
Runs search UI, API access, in-memory caches, and pathfinding logic in one client-side app.
How the site works, what it is built with, and why some searches take longer than others.
Live analytics
Traffic snapshot across Camdram Connected.
Camdram Connected explores Camdram credits to find links between two people in Cambridge theatre. Each connection is built from shared shows and roles, then displayed as both a graph and a step-by-step explanation.
Runs search UI, API access, in-memory caches, and pathfinding logic in one client-side app.
Draws an interactive people-and-show graph with pan, zoom, and node highlighting.
Hosts the site as static assets with no build step.
Handles `/api/*` requests, adds CORS headers, and caches Camdram responses at the edge.
Provides source data for people, productions, and role credits.
Waits briefly after each burst of typing before searching Camdram. Debouncing cuts duplicate queries while still feeling immediate, and exact selection avoids confusion between similar names.
Inserts a small delay between outbound requests. Search often needs many person-role and show-role lookups in sequence, so paced requests reduce load spikes and keep behaviour predictable.
Treats graph as person-to-show-to-person hops. Shortest-path mode explores layer by layer, so the first successful route found is also the minimum-degree connection.
Continues collecting routes at the same depth instead of stopping at the first hit. That reveals multiple valid explanations, but branch count can grow quickly for well-connected people.
Fetches people and show data only when the frontier reaches them. The app never tries to preload the whole theatre network, which keeps initial searches practical.
Stores fetched people, role lists, and show casts in memory for the current session. Repeated searches can reuse known data instead of hitting the API again.
Remembers explored people and shows so search does not loop through repeated collaborations. Important because Cambridge theatre graph is dense and highly interconnected.
Caps how far the search can expand. Quick mode prunes aggressively for responsiveness, while deeper modes spend more requests and processing to uncover longer routes.
Some people have worked on many productions, which creates much larger search branches. Quick mode stops earlier. Deeper and exhaustive modes explore more of the graph, so they can reveal more paths but require more API requests and processing.