A checklist management app with:
- Backend: ASP.NET Core Web API (.NET 10) + Entity Framework Core + SQL Server
- Frontend: React 19 + TypeScript (Vite + Material UI)
- Create, edit, and delete checklists
- Enforces unique checklist names
- RESTful API with OpenAPI support
- .NET 10 SDK
- Node.js (LTS recommended)
- npm
- SQL Server (optional — an in-memory database is used by default in development)
cd backend/CheckMate.Api
dotnet runThe API starts at http://localhost:5269 by default. In development mode an in-memory database is used automatically (configured in appsettings.Development.json).
To use SQL Server for local development instead, set UseInMemoryDatabase to false and update the connection string in backend/CheckMate.Api/appsettings.Development.json.
cd frontend
npm ci
npm run devThe frontend dev server starts at http://localhost:5173. Set the VITE_API_BASE_URL environment variable if your backend runs on a different URL.
cd backend/CheckMate.Api.Tests
dotnet testcd frontend
npm run lintcd frontend
npm run buildThe output is written to frontend/dist.
cd frontend
npm run preview-
Backend — Publish the API with
dotnet publish -c Releasefrombackend/CheckMate.Api. Deploy the output to any host that supports .NET 10 (Azure App Service, Docker, etc.). Configure theConnectionStrings:CheckMatesetting to point to your production SQL Server instance and setUseInMemoryDatabasetofalse. If the frontend will be served from a different origin than the API, also configureCors:AllowedOriginsto include the production frontend URL(s) so the browser can call the API.Application Insights — The API automatically sends telemetry to Azure Application Insights when a connection string is available. Set the
APPLICATIONINSIGHTS_CONNECTION_STRINGenvironment variable (or theAzureMonitor:ConnectionStringapp setting) to your Application Insights connection string. When using Azure App Service, you can connect Application Insights directly from the Azure Portal, which setsAPPLICATIONINSIGHTS_CONNECTION_STRINGautomatically. Telemetry is silently disabled when neither value is configured (e.g. during local development). -
Frontend — Run
npm run buildinfrontendand serve the contents offrontend/distwith any static file host (Azure Storage Account static website, Nginx, etc.). SetVITE_API_BASE_URLto the production API URL before building. When using a different origin for the frontend, make sure the backendCors:AllowedOriginssetting includes that frontend URL.
CheckMate/
├── backend/
│ ├── CheckMate.Api/ # ASP.NET Core Web API
│ ├── CheckMate.Database/ # Database CLI project for migrations
│ └── CheckMate.Api.Tests/ # xUnit backend tests
├── frontend/ # React + TypeScript (Vite)
├── CONTRIBUTING.md
├── SECURITY.md
├── LICENSE
└── README.md
Playwright automatically starts the backend and frontend servers when tests run. Before running tests for the first time, install dependencies and the test browser:
cd frontend
npm ci
npx playwright install chromium --with-depsThen run the tests (this builds the frontend and launches both servers automatically):
npm run test:e2eTo run tests with the interactive UI:
npm run test:e2e:uiThe CI workflow (.github/workflows/ci.yml) includes deployment jobs that run after all checks pass. Deployment only runs on pushes to main (not on pull requests).
| Component | Azure Service | Endpoint |
|---|---|---|
| Backend API | Azure App Service | https://<AZURE_BACKEND_APP_NAME>.azurewebsites.net |
| Frontend | Azure Storage Account (static website) | https://checkmate.z22.web.core.windows.net |
| Variable | Description |
|---|---|
AZURE_CLIENT_ID |
Azure service principal client ID (for OIDC login) |
AZURE_TENANT_ID |
Azure Active Directory tenant ID |
AZURE_SUBSCRIPTION_ID |
Azure subscription ID |
AZURE_BACKEND_APP_NAME |
Name of the Azure App Service for the backend |
AZURE_BACKEND_URL |
Public URL of the backend API (e.g. https://checkmate-api.azurewebsites.net) |
AZURE_RESOURCE_GROUP |
Azure resource group containing both the backend App Service and frontend Storage Account |
AZURE_STORAGE_ACCOUNT_NAME |
Name of the Azure Storage Account used to host the frontend static website |
| Secret | Description |
|---|---|
AZURE_SQL_CONNECTION_STRING |
SQL Server connection string for the deployed database |
The workflow uses the production GitHub Environment for all deployments. Configure the production environment in your repository settings to enable approval gates and environment-specific secrets.
Contributions are welcome! Please read CONTRIBUTING.md for guidelines on how to get started.
Use the provided templates when opening issues or pull requests:
Pull requests should follow the PR template checklist before requesting review.
To report a security vulnerability, see SECURITY.md.
This project is licensed under the MIT License. See LICENSE for details.