demo_frontend_2 (public demo)
- C# 54.6%
- TypeScript 31%
- JavaScript 9.9%
- CSS 2.3%
- Dockerfile 1.7%
- Other 0.5%
| .config | ||
| backend | ||
| docs/Tasks | ||
| frontend | ||
| scripts | ||
| .gitignore | ||
| compose.override.yml | ||
| compose.prod.yml | ||
| compose.yml | ||
| demo_frontend_2.sln | ||
| README.md | ||
Erfolgs‑Archiv (Demo)
Badge/Achievements dashboard demo with an ASP.NET Core Minimal API backend and a Vite/React frontend.
Repo layout
backend/src/– .NET API + testsfrontend/src/– React app + tests
Run (Docker, recommended)
Dev (hot reload):
docker compose -f compose.yml -f compose.override.yml up -d --build- Frontend:
http://localhost:5173 - API:
http://localhost:8080/swagger
If ports are already taken, override them:
cmd /c "set WEB_PORT=5174&& set API_PORT=8081&& docker compose -f compose.yml -f compose.override.yml up -d --build"
Stop:
docker compose -f compose.yml -f compose.override.yml down
Prod-like:
docker compose -f compose.prod.yml up -d --build- Frontend:
http://localhost:5173 - API:
http://localhost:8080/swagger
Backend (local)
dotnet run --project backend/src/Api/Api.csproj
Endpoints:
GET /api/v1/badges/overviewPOST /api/v1/badges/{badgeId}/unlockPOST /api/v1/badges/reset
Database migrations
Development:
- By default, the API runs migrations + seeds demo data on startup (see
Db:InitOnStartupinbackend/src/Api/Program.cs).
Create a migration:
dotnet ef migrations add <Name> --project backend/src/Api/Api.csproj --output-dir Infrastructure/Db/Migrations --context Api.Infrastructure.Db.AppDbContext
Apply migrations:
dotnet ef database update --project backend/src/Api/Api.csproj --context Api.Infrastructure.Db.AppDbContext
Production:
Db:InitOnStartupdefaults tofalse; run migrations explicitly (command above) or add a one-off migrator job/container.
Quality checks
Backend tests:
dotnet test demo_frontend_2.sln
Backend formatting:
dotnet tool restoredotnet tool run dotnet-format
Frontend:
cd frontendnpm run buildnpm run test:runnpm run lintnpm run format:check
LOC limit (500 lines max per source file):
npm run check:loc