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.