A checklist management app with:
- Backend: ASP.NET Core Web API (.NET 10) + Entity Framework Core + SQL Server
- Frontend: React 19 + TypeScript (Vite)
- 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/CheckMate2.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/CheckMate2.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/CheckMate2.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/CheckMate2.Api. Deploy the output to any host that supports .NET 10 (Azure App Service, Docker, etc.). Configure theConnectionStrings:CheckMate2setting 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. -
Frontend — Run
npm run buildinfrontendand serve the contents offrontend/distwith any static file host (Azure Static Web Apps, 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.
CheckMate2/
├── backend/
│ ├── CheckMate2.Api/ # ASP.NET Core Web API
│ └── CheckMate2.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 Static Web Apps | https://<your-static-web-app>.azurestaticapps.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://checkmate2-api.azurewebsites.net) |
| Secret | Description |
|---|---|
AZURE_SQL_CONNECTION_STRING |
SQL Server connection string for the deployed database |
AZURE_STATIC_WEB_APPS_API_TOKEN |
Deployment token for Azure Static Web Apps |
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.