# rangasiyaar/cricsynthsite architecture

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

- Interactive diagram: https://gitdiagram.com/rangasiyaar/cricsynthsite
- Repository: https://github.com/rangasiyaar/cricsynthsite

## Overview

CricSynthesis is a cricket analytics and forecasting platform: it ingests match data, builds simulation models, publishes match forecasts and player insights, and exposes those capabilities through a web app, API, and MCP tools. Users explore match centres, projections, fantasy picks, and scenario simulations; developers can also query the API or connect an MCP client. The workspace description establishes the package roles, and sampled code confirms browser-worker and local MCP simulation paths. Many web routes and backend subsystems are unsampled, so their internal links are omitted rather than inferred.

Main entry points: [`app/lib/engine/worker.ts`](https://github.com/rangasiyaar/cricsynthsite/blob/claude/cricsynthesis-platform/app/lib/engine/worker.ts) (Simulation worker), [`edge/src/index.ts`](https://github.com/rangasiyaar/cricsynthsite/blob/claude/cricsynthesis-platform/edge/src/index.ts) (Remote API worker), [`cricdata/src/cricdata/bigquery.py`](https://github.com/rangasiyaar/cricsynthsite/blob/claude/cricsynthesis-platform/cricdata/src/cricdata/bigquery.py) (BigQuery publishing), [`cricapi/src/cricapi/main.py`](https://github.com/rangasiyaar/cricsynthsite/blob/claude/cricsynthesis-platform/cricapi/src/cricapi/main.py) (Analytics API)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Web experience"]
  node_webapp["Web app<br/>[App.tsx]"]
  node_matchcentre["Match centre<br/>[MatchCentre.tsx]"]
  node_scenario["Scenario Lab<br/>[ScenarioLab.tsx]"]
  node_fantasyui["Fantasy views<br/>[page.tsx]"]
  node_worker["Simulation worker<br/>[worker.ts]"]
  node_browserengine["Browser simulator<br/>[sim.ts]"]
  node_fullsummary["Match summary<br/>[full.ts]"]
  node_labsummary["Lab summary<br/>[summary.ts]"]
  node_fantasypicks["Fantasy picks<br/>[fantasy.ts]"]
  node_ratings["Player ratings<br/>[ratings.ts]"]
end

subgraph group_services["API and MCP"]
  node_api["Analytics API<br/>[main.py]"]
  node_api_extra["Analytics routes<br/>[extra.py]"]
  node_apistore[("Published content<br/>[store.py]")]
  node_mcp["Local MCP server<br/>[server.py]"]
  node_mcpsim["MCP simulations<br/>[sim.py]"]
end

subgraph group_engine["Cricket modelling"]
  node_model["Fitted model<br/>[model.py]"]
  node_simulator["Match simulator<br/>[simulate.py]"]
  node_states["Match states<br/>[states.py]"]
  node_analytics["Match analytics<br/>[analytics.py]"]
  node_fit["Model fitting<br/>[fit.py]"]
  node_fantasy["Fantasy modelling<br/>[fantasy.py]"]
  node_features["Player features<br/>[direct_features.py]"]
end

subgraph group_data["Data pipeline"]
  node_ingest["Match data ingest<br/>[parse.py]"]
  node_dataset[("Parquet dataset<br/>[build.py]")]
  node_bigquery["BigQuery publishing<br/>[bigquery.py]"]
end

subgraph group_edge["Remote access"]
  node_edgeworker["Remote API worker<br/>[index.ts]"]
  node_edgeapi["API routes<br/>[api.ts]"]
  node_edgemcp["Remote MCP<br/>[mcp.ts]"]
  node_oauth["OAuth sign-in<br/>[oauth.ts]"]
end

node_user(("Cricket fan"))
node_client(("MCP client"))
node_firebase["Firebase Auth"]
node_gcs[("Cloud Storage")]
node_bqservice[("BigQuery")]

node_user -.->|"explores"| node_webapp
node_scenario -.->|"runs scenarios"| node_worker
node_worker -->|"simulates"| node_browserengine
node_worker -->|"summarizes full"| node_fullsummary
node_worker -->|"summarizes lab"| node_labsummary
node_worker -->|"selects picks"| node_fantasypicks
node_worker -->|"rates players"| node_ratings
node_api -->|"registers routes"| node_api_extra
node_api -->|"loads model"| node_model
node_mcp -.->|"runs simulations"| node_mcpsim
node_mcp -.->|"loads match pack"| node_apistore
node_simulator -->|"uses model"| node_model
node_simulator -->|"uses states"| node_states
node_dataset -.->|"publishes tables"| node_bigquery
node_bigquery -->|"uploads Parquet"| node_gcs
node_bigquery -->|"loads tables"| node_bqservice
node_client -.->|"requests tools"| node_edgeworker
node_edgeworker -->|"dispatches tools"| node_edgemcp
node_edgeworker -->|"dispatches routes"| node_edgeapi
node_edgeworker -->|"handles tokens"| node_oauth
node_oauth -.->|"checks identity"| node_firebase

click node_webapp "https://github.com/rangasiyaar/cricsynthsite/blob/claude/cricsynthesis-platform/app/components/App.tsx"
click node_matchcentre "https://github.com/rangasiyaar/cricsynthsite/blob/claude/cricsynthesis-platform/app/components/MatchCentre.tsx"
click node_scenario "https://github.com/rangasiyaar/cricsynthsite/blob/claude/cricsynthesis-platform/app/components/ScenarioLab.tsx"
click node_fantasyui "https://github.com/rangasiyaar/cricsynthsite/blob/claude/cricsynthesis-platform/app/app/fantasy/%5Bid%5D/page.tsx"
click node_worker "https://github.com/rangasiyaar/cricsynthsite/blob/claude/cricsynthesis-platform/app/lib/engine/worker.ts"
click node_browserengine "https://github.com/rangasiyaar/cricsynthsite/blob/claude/cricsynthesis-platform/app/lib/engine/sim.ts"
click node_fullsummary "https://github.com/rangasiyaar/cricsynthsite/blob/claude/cricsynthesis-platform/app/lib/engine/full.ts"
click node_labsummary "https://github.com/rangasiyaar/cricsynthsite/blob/claude/cricsynthesis-platform/app/lib/engine/summary.ts"
click node_fantasypicks "https://github.com/rangasiyaar/cricsynthsite/blob/claude/cricsynthesis-platform/app/lib/engine/fantasy.ts"
click node_ratings "https://github.com/rangasiyaar/cricsynthsite/blob/claude/cricsynthesis-platform/app/lib/ratings.ts"
click node_api "https://github.com/rangasiyaar/cricsynthsite/blob/claude/cricsynthesis-platform/cricapi/src/cricapi/main.py"
click node_api_extra "https://github.com/rangasiyaar/cricsynthsite/blob/claude/cricsynthesis-platform/cricapi/src/cricapi/extra.py"
click node_apistore "https://github.com/rangasiyaar/cricsynthsite/blob/claude/cricsynthesis-platform/cricapi/src/cricapi/store.py"
click node_mcp "https://github.com/rangasiyaar/cricsynthsite/blob/claude/cricsynthesis-platform/cricmcp/src/cricmcp/server.py"
click node_mcpsim "https://github.com/rangasiyaar/cricsynthsite/blob/claude/cricsynthesis-platform/cricmcp/src/cricmcp/sim.py"
click node_model "https://github.com/rangasiyaar/cricsynthsite/blob/claude/cricsynthesis-platform/cricsim/src/cricsim/engine/model.py"
click node_simulator "https://github.com/rangasiyaar/cricsynthsite/blob/claude/cricsynthesis-platform/cricsim/src/cricsim/engine/simulate.py"
click node_states "https://github.com/rangasiyaar/cricsynthsite/blob/claude/cricsynthesis-platform/cricsim/src/cricsim/engine/states.py"
click node_analytics "https://github.com/rangasiyaar/cricsynthsite/blob/claude/cricsynthesis-platform/cricsim/src/cricsim/engine/analytics.py"
click node_fit "https://github.com/rangasiyaar/cricsynthsite/blob/claude/cricsynthesis-platform/cricsim/src/cricsim/engine/fit.py"
click node_fantasy "https://github.com/rangasiyaar/cricsynthsite/blob/claude/cricsynthesis-platform/cricsim/src/cricsim/fantasy.py"
click node_features "https://github.com/rangasiyaar/cricsynthsite/blob/claude/cricsynthesis-platform/cricsim/src/cricsim/direct_features.py"
click node_ingest "https://github.com/rangasiyaar/cricsynthsite/blob/claude/cricsynthesis-platform/cricdata/src/cricdata/parse.py"
click node_dataset "https://github.com/rangasiyaar/cricsynthsite/blob/claude/cricsynthesis-platform/cricdata/src/cricdata/build.py"
click node_bigquery "https://github.com/rangasiyaar/cricsynthsite/blob/claude/cricsynthesis-platform/cricdata/src/cricdata/bigquery.py"
click node_edgeworker "https://github.com/rangasiyaar/cricsynthsite/blob/claude/cricsynthesis-platform/edge/src/index.ts"
click node_edgeapi "https://github.com/rangasiyaar/cricsynthsite/blob/claude/cricsynthesis-platform/edge/src/api.ts"
click node_edgemcp "https://github.com/rangasiyaar/cricsynthsite/blob/claude/cricsynthesis-platform/edge/src/mcp.ts"
click node_oauth "https://github.com/rangasiyaar/cricsynthsite/blob/claude/cricsynthesis-platform/edge/src/oauth.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_webapp,node_matchcentre,node_scenario,node_fantasyui,node_worker,node_browserengine,node_fullsummary,node_labsummary,node_fantasypicks,node_ratings,node_client toneBlue
class node_api,node_api_extra,node_apistore,node_mcp,node_mcpsim,node_gcs,node_bqservice toneAmber
class node_model,node_simulator,node_states,node_analytics,node_fit,node_fantasy,node_features toneMint
class node_ingest,node_dataset,node_bigquery toneRose
class node_edgeworker,node_edgeapi,node_edgemcp,node_oauth,node_user,node_firebase toneIndigo
```

## Components

### Web experience

- [Web app](https://github.com/rangasiyaar/cricsynthsite/blob/claude/cricsynthesis-platform/app/components/App.tsx): `app/components/App.tsx`
- [Match centre](https://github.com/rangasiyaar/cricsynthsite/blob/claude/cricsynthesis-platform/app/components/MatchCentre.tsx): `app/components/MatchCentre.tsx`
- [Scenario Lab](https://github.com/rangasiyaar/cricsynthsite/blob/claude/cricsynthesis-platform/app/components/ScenarioLab.tsx): `app/components/ScenarioLab.tsx`
- [Fantasy views](https://github.com/rangasiyaar/cricsynthsite/blob/claude/cricsynthesis-platform/app/app/fantasy/%5Bid%5D/page.tsx): `app/app/fantasy/[id]/page.tsx`
- [Simulation worker](https://github.com/rangasiyaar/cricsynthsite/blob/claude/cricsynthesis-platform/app/lib/engine/worker.ts): `app/lib/engine/worker.ts`
- [Browser simulator](https://github.com/rangasiyaar/cricsynthsite/blob/claude/cricsynthesis-platform/app/lib/engine/sim.ts): `app/lib/engine/sim.ts`
- [Match summary](https://github.com/rangasiyaar/cricsynthsite/blob/claude/cricsynthesis-platform/app/lib/engine/full.ts): `app/lib/engine/full.ts`
- [Lab summary](https://github.com/rangasiyaar/cricsynthsite/blob/claude/cricsynthesis-platform/app/lib/engine/summary.ts): `app/lib/engine/summary.ts`
- [Fantasy picks](https://github.com/rangasiyaar/cricsynthsite/blob/claude/cricsynthesis-platform/app/lib/engine/fantasy.ts): `app/lib/engine/fantasy.ts`
- [Player ratings](https://github.com/rangasiyaar/cricsynthsite/blob/claude/cricsynthesis-platform/app/lib/ratings.ts): `app/lib/ratings.ts`

### API and MCP

- [Analytics API](https://github.com/rangasiyaar/cricsynthsite/blob/claude/cricsynthesis-platform/cricapi/src/cricapi/main.py): `cricapi/src/cricapi/main.py`
- [Analytics routes](https://github.com/rangasiyaar/cricsynthsite/blob/claude/cricsynthesis-platform/cricapi/src/cricapi/extra.py): `cricapi/src/cricapi/extra.py`
- [Published content](https://github.com/rangasiyaar/cricsynthsite/blob/claude/cricsynthesis-platform/cricapi/src/cricapi/store.py): `cricapi/src/cricapi/store.py`
- [Local MCP server](https://github.com/rangasiyaar/cricsynthsite/blob/claude/cricsynthesis-platform/cricmcp/src/cricmcp/server.py): `cricmcp/src/cricmcp/server.py`
- [MCP simulations](https://github.com/rangasiyaar/cricsynthsite/blob/claude/cricsynthesis-platform/cricmcp/src/cricmcp/sim.py): `cricmcp/src/cricmcp/sim.py`

### Cricket modelling

- [Fitted model](https://github.com/rangasiyaar/cricsynthsite/blob/claude/cricsynthesis-platform/cricsim/src/cricsim/engine/model.py): `cricsim/src/cricsim/engine/model.py`
- [Match simulator](https://github.com/rangasiyaar/cricsynthsite/blob/claude/cricsynthesis-platform/cricsim/src/cricsim/engine/simulate.py): `cricsim/src/cricsim/engine/simulate.py`
- [Match states](https://github.com/rangasiyaar/cricsynthsite/blob/claude/cricsynthesis-platform/cricsim/src/cricsim/engine/states.py): `cricsim/src/cricsim/engine/states.py`
- [Match analytics](https://github.com/rangasiyaar/cricsynthsite/blob/claude/cricsynthesis-platform/cricsim/src/cricsim/engine/analytics.py): `cricsim/src/cricsim/engine/analytics.py`
- [Model fitting](https://github.com/rangasiyaar/cricsynthsite/blob/claude/cricsynthesis-platform/cricsim/src/cricsim/engine/fit.py): `cricsim/src/cricsim/engine/fit.py`
- [Fantasy modelling](https://github.com/rangasiyaar/cricsynthsite/blob/claude/cricsynthesis-platform/cricsim/src/cricsim/fantasy.py): `cricsim/src/cricsim/fantasy.py`
- [Player features](https://github.com/rangasiyaar/cricsynthsite/blob/claude/cricsynthesis-platform/cricsim/src/cricsim/direct_features.py): `cricsim/src/cricsim/direct_features.py`

### Data pipeline

- [Match data ingest](https://github.com/rangasiyaar/cricsynthsite/blob/claude/cricsynthesis-platform/cricdata/src/cricdata/parse.py): `cricdata/src/cricdata/parse.py`
- [Parquet dataset](https://github.com/rangasiyaar/cricsynthsite/blob/claude/cricsynthesis-platform/cricdata/src/cricdata/build.py): `cricdata/src/cricdata/build.py`
- [BigQuery publishing](https://github.com/rangasiyaar/cricsynthsite/blob/claude/cricsynthesis-platform/cricdata/src/cricdata/bigquery.py): `cricdata/src/cricdata/bigquery.py`

### Remote access

- [Remote API worker](https://github.com/rangasiyaar/cricsynthsite/blob/claude/cricsynthesis-platform/edge/src/index.ts): `edge/src/index.ts`
- [API routes](https://github.com/rangasiyaar/cricsynthsite/blob/claude/cricsynthesis-platform/edge/src/api.ts): `edge/src/api.ts`
- [Remote MCP](https://github.com/rangasiyaar/cricsynthsite/blob/claude/cricsynthesis-platform/edge/src/mcp.ts): `edge/src/mcp.ts`
- [OAuth sign-in](https://github.com/rangasiyaar/cricsynthsite/blob/claude/cricsynthesis-platform/edge/src/oauth.ts): `edge/src/oauth.ts`

### Other components

- **Cricket fan**
- **MCP client**
- **Firebase Auth**
- **Cloud Storage**
- **BigQuery**

## Connections

- Cricket fan → Web app: explores
- Scenario Lab → Simulation worker: runs scenarios
- Simulation worker → Browser simulator: simulates (evidence: `app/lib/engine/worker.ts`)
- Simulation worker → Match summary: summarizes full (evidence: `app/lib/engine/worker.ts`)
- Simulation worker → Lab summary: summarizes lab (evidence: `app/lib/engine/worker.ts`)
- Simulation worker → Fantasy picks: selects picks (evidence: `app/lib/engine/worker.ts`)
- Simulation worker → Player ratings: rates players (evidence: `app/lib/engine/worker.ts`)
- Analytics API → Analytics routes: registers routes (evidence: `cricapi/src/cricapi/extra.py`)
- Analytics API → Fitted model: loads model (evidence: `cricapi/src/cricapi/main.py`)
- Local MCP server → MCP simulations: runs simulations (evidence: `cricmcp/src/cricmcp/server.py`)
- Local MCP server → Published content: loads match pack
- Match simulator → Fitted model: uses model (evidence: `cricsim/src/cricsim/engine/simulate.py`)
- Match simulator → Match states: uses states (evidence: `cricsim/src/cricsim/engine/simulate.py`)
- Parquet dataset → BigQuery publishing: publishes tables
- BigQuery publishing → Cloud Storage: uploads Parquet (evidence: `cricdata/src/cricdata/bigquery.py`)
- BigQuery publishing → BigQuery: loads tables (evidence: `cricdata/src/cricdata/bigquery.py`)
- MCP client → Remote API worker: requests tools
- Remote API worker → Remote MCP: dispatches tools (evidence: `edge/src/index.ts`)
- Remote API worker → API routes: dispatches routes (evidence: `edge/src/index.ts`)
- Remote API worker → OAuth sign-in: handles tokens (evidence: `edge/src/index.ts`)
- OAuth sign-in → Firebase Auth: checks identity
