# RpgRoller Fresh full-stack starter scaffold: - `RpgRoller/`: ASP.NET Core backend + static frontend output (`wwwroot`) - `RpgRoller/frontend/`: TypeScript frontend source - `RpgRoller.Tests/`: xUnit integration-heavy test project - `RpgRoller.sln`: solution used by local CI script Backend state persistence: - EF Core with SQLite (`Microsoft.EntityFrameworkCore.Sqlite`) - Development DB: `RpgRoller/App_Data/rpgroller.development.db` - Default DB: `RpgRoller/App_Data/rpgroller.db` - Database schema is created automatically on startup (`EnsureCreated`) ## Prerequisites - .NET SDK 10.0+ - Node.js 22+ and npm - PowerShell 7+ ## Local Development 1. Run the local CI parity script: ```powershell pwsh ./scripts/ci-local.ps1 ``` 2. Start the backend: ```powershell dotnet run --project RpgRoller/RpgRoller.csproj ``` 3. Open `http://localhost:5000` (or the port shown in the console). To use a custom SQLite database path, set `ConnectionStrings__RpgRoller`. ## Frontend Tooling - OpenAPI contract: `openapi/RpgRoller.json` - TypeScript build output config: `tsconfig.frontend.json` - API client generation + frontend compile: `npm run generate:api-client` - Frontend lint checks: `npm run lint` - Frontend format checks: `npm run format:check` ## Test and Coverage - Tests: ```powershell dotnet test RpgRoller.Tests/RpgRoller.Tests.csproj --collect:"XPlat Code Coverage" --settings RpgRoller.Tests/coverlet.runsettings ``` - Coverage gate: ```powershell pwsh ./scripts/check-coverage.ps1 -MinLineRate 0.90 -MinBranchRate 0.70 ``` ## Implemented Backend Scope - Auth: register, login, logout, current user context - Session cookie: `HttpOnly`, `SameSite=Strict`, `Secure` when served over HTTPS - Rulesets: d6 and dnd5e validation rules - Campaigns: create/list/read - Characters: create/update/activate/current-campaign list - Skills: create/update with ruleset-aware dice expression validation - Rolls: public/private skill rolls with append-only campaign log - State stream: SSE endpoint for campaign version updates ## Implemented Frontend Scope - TypeScript-driven UI for: - registration, login, logout - campaign creation and selection - character creation and activation - skill creation and editing - public/private rolling and campaign log viewing - SSE-backed live refresh for selected campaign state/log