Find your way around

A short tour of the repository, then an ordered reading list for each role on the team.

2026-11-07

A tour of the repo

The repository is one pnpm + Turborepo monorepo. Everything that runs is under apps/, everything the apps compose is under packages/, and the tooling that keeps it honest sits at the root. Each row links to the page that explains it.

Path What it is Read
apps/web The Euro League site: a thin Next.js app of chrome, generated route shims and API routes Web app
apps/web/club.config.ts The one typed config: identity, theme, locales, sections, features and bought domains Template config
apps/storybook The single Storybook: every component's stories and the browser story tests Applications
apps/e2e Playwright component e2e, run against Storybook Applications
apps/docs This documentation site Applications
packages/ghost-core, ghost-content, ghost-video, ghost-basketball The design system: the theme foundation and the component packages Component system
packages/token-parser, tokens, tokens-euro-league The token pipeline: the parser, the generated defaults and icons, and ELB's brand layer Token pipeline
packages/model The Contentful content model as code: migrations, schema, fragments, transforms, the dictionary Content model
packages/content-app, video-app, basketball-app The route packages: each domain's pages as per-route factories Domains & bolt-ons
packages/template-config defineClubConfig() and the compose, add-feature and sync-upstream generators @v4/template-config
packages/competition-engine The Competition Engine integration behind the basketball pages Basketball and the Competition Engine
packages/media, image, image-* The platform video SDK seam, and the pluggable image providers Media and video architecture
packages/wsc, eltv, ecal, analytics, cortex-sso, code-of-conduct The club-only integrations, one package per third party Club integrations
packages/contentful-contracts The versioned JSON field contracts the Contentful apps write and the site reads @v4/contentful-contracts
packages/tickets Tickets as code and the Jira tooling @v4/tickets
packages/docs-mcp, eslint-config, typescript-config The docs MCP server and the shared lint and TypeScript presets Monorepo & packages
scripts/ verify.mjs (the pre-push gate), the git hooks, CI helpers, the browser sweeps and load tests Commands
.claude/ The Claude skills, agents, rules, references and plans Skills & agents
flightcontrol.json The hosting definition for the deployed environments Deployment

For the whole layout, package by package, see Monorepo & packages.

Frontend and components

For building or changing what the site looks like — components, themes, layout and motion. Start with Installation if the repo is not running yet.

  1. Component system — how a component is put together, where it is registered and how theming reaches it. Everything else assumes this.
  2. UI components overview — the design system as you will use it, and where to browse the catalogues.
  3. Theming & colour sets — the colour-set axis that sets a surface's colours, and how ELB's brand layer re-skins it.
  4. Token pipeline — where every value a component binds comes from, from Figma to CSS variable.
  5. Create a component — the steps, from scaffold to registered and tested.
  6. Refactor a component — reviewing against Figma, and the traps of building against ELB's forks of Ghost.
  7. Responsive rungs and Motion — the two design-owned rule sets every new layout and animation must follow.
  8. Testing — unit, story and e2e tests, and what each is for.

Content model and CMS

For changing what editors can author in Contentful and how the site reads it.

  1. Content model — the model as code: migrations, the schema, fragments and transforms, and why Contentful is never edited by hand.
  2. Content models — the content types themselves, to look up what exists before adding to it.
  3. Change the content model — the steps for a new field or type, end to end, including this site's own migrations in migrations/club/.
  4. Domains & bolt-ons — which domain owns each type, and why that decides where a migration goes.
  5. Dictionary keys — interface copy: the keys in code, the labels in Contentful.
  6. Rich text rendering — how an article body becomes components, embedded entries included.
  7. @v4/model — the package's exports, subpaths and commands.

Pages, routes and basketball data

For adding pages, changing how they load data, and working on the basketball areas.

  1. Site map — every page of the site and its address: start here to see where a new page belongs.
  2. App & rendering — how the thin app mounts route packages and how data reaches a page.
  3. Domains & bolt-ons — route packages, routes.json and the generated shims.
  4. Add a page or route — the steps, including the data-area routes.
  5. Competition sections — the address rules every page follows, and how the chrome follows the section.
  6. Basketball and the Competition Engine — the data areas, the engine integration, live data and the Game Centre.
  7. @v4/basketball-app and @v4/competition-engine — the route package and the data seam, in detail.
  8. Caching & revalidation — tags, lifetimes and the webhook, for both Contentful and engine data.
  9. Local basketball data — running the engine on your machine.

Release and operations

For getting work merged, released and running in an environment.

  1. Branching & Git — the branch model, commit messages with their Jira key, and how work lands.
  2. Pull requests & gates — what CI checks on every pull request, and how it merges.
  3. GitHub Actions — what each workflow runs and when.
  4. Releasing — cutting a release and its changelog.
  5. Environments & secrets — which environments exist and where their secrets live.
  6. Deployment — Flightcontrol hosting and the model deploy pipeline.
  7. Environment variables — every variable, and what switches each integration on.
  8. Troubleshooting — the failures that recur, and their fixes.
  9. Take template updates — taking the template's changes in as a /sync-upstream pull request, and what they never touch.

QA and editors

For testing the site and authoring it, without reading code.

  1. Site map — every page a reader can reach and the address it lives at.
  2. What the site does — every feature area with its status: the first stop for "does the site do X?".
  3. Content & publishing — the page types and blocks an editor works with, and how a published change goes live.
  4. Competition sections — which address a page gets, and which Contentful field decides it.
  5. Sport — the basketball pages, the Game Centre, live scores and the widgets on editorial pages.
  6. The video section — the video pages and playback.
  7. Content models — every content type and field, to check what an editor can set.
  8. Accessibility — the accessibility bar every component ships to, and how it is checked.
  9. Glossary — the house terms these docs use.