Skip to content

Project Structure

The monorepo contains the WPF desktop app, the REST API, shared contracts, and all documentation.


Top-Level Layout

SimCopilot/
├── .github/workflows/       CI/CD workflows (build, test, deploy, docs)
├── SimCopilot.sln           Desktop solution (App + all library projects)
├── SimCopilot.Core/         Analysis engine
├── SimCopilot.Storage/      SQLite + CSV persistence
├── SimCopilot.Telemetry/    CSV telemetry I/O
├── SimCopilot.Lmu/          LMU/rF2 shared memory
├── SimCopilot.Connectors/   Multi-game abstraction
├── SimCopilot.Shared/       DTOs (App ↔ API)
├── SimCopilot.App/          WPF desktop client
├── SimCopilot.Tests/        xUnit tests for library projects
├── SimCopilot.Api/          REST API + SafeWatch
│   ├── SimCopilot.Api.sln
│   ├── docker-compose.yml   Local Postgres + Redis
│   ├── .env.example
│   └── src/SimCopilot.Api/
│       ├── Program.cs
│       ├── Controllers/
│       ├── Data/            EF Core DbContext + migrations
│       ├── Auth/            JWT, OAuth, PKCE
│       ├── Services/        Business logic
│       └── SafeWatch/       Admin dashboard (Blazor Server)
│           ├── Auth/
│           ├── Components/
│           ├── Pages/
│           └── Services/
├── docs/                    This documentation site
├── mkdocs.yml               MkDocs config
├── requirements-docs.txt    Python deps for docs
├── Dockerfile               API Docker image
└── CLAUDE.md                AI assistant guidance

Naming Conventions

  • C# types and methods: English (e.g. LapResampler, AnalyzeAsync)
  • User-facing strings: French (all in SimCopilot.App/I18n.cs)
  • Test classes: {Subject}Tests (e.g. TrackSegmentationTests)
  • API routes: /v1/{resource} (versioned from day one)

Dependency Rules

SimCopilot.Core        ← no dependencies
SimCopilot.Storage     ← depends on Core
SimCopilot.Telemetry   ← depends on Core
SimCopilot.Lmu         ← depends on Core (Windows-only runtime)
SimCopilot.Connectors  ← depends on Core, Lmu
SimCopilot.App         ← depends on all of the above + Shared
SimCopilot.Api         ← depends on Shared only (no desktop deps)

The API and the desktop app share only SimCopilot.Shared (DTOs). The API has no knowledge of WPF, SQLite, or CSV formats.