Live server: https://skojjt.scouterna.net/.
Skojjt is a web-based attendance tracking system for Swedish scout groups (scoutkårer). It allows troop leaders to register meeting attendance, manage members, and export reports for municipal activity grants (aktivitetsbidrag / DAK).
- Attendance tracking — Register attendance per meeting with auto-save and real-time sync across browsers.
- Troop & member management — Organize scouts into troops, assign patrols, and manage leader roles.
- Local troops — Create troops that don't exist in Scoutnet (e.g. temporary or local groups) directly in Skojjt.
- Hike / camp support — Separate tracking for hikes and camps.
- Badge management — Assign and track badge progress per troop.
- DAK export — Export attendance data in the DAK XML format required by Swedish municipalities.
- Excel & JSON export — Additional export formats for reporting.
- Scoutnet integration — Import member data from Scoutnet.
- ScoutID authentication — Single sign-on via ScoutID (Keycloak-based OpenID Connect).
- .NET 10 / C# 14
- Blazor Server (interactive SSR) with MudBlazor component library
- Entity Framework Core with PostgreSQL
- Clean architecture —
Skojjt.Core(domain),Skojjt.Infrastructure(data/services),Skojjt.Web(UI)
src/
Skojjt.Core/ # Domain entities, interfaces, services
Skojjt.Infrastructure/ # EF Core, repositories, external services
Skojjt.Shared/ # Shared DTOs and utilities
Skojjt.Web/ # Blazor Server application
tests/
Skojjt.Core.Tests/
Skojjt.Infrastructure.Tests/
Skojjt.Web.Tests/
tools/
Skojjt.ImportTool/ # CLI tool for data import
scripts/
migration/ # Python scripts for migrating data from v1
docs/ # Design documents and notes
- .NET 10 SDK
- PostgreSQL (or use Docker)
- (Optional) Docker for running PostgreSQL and Keycloak locally
-
Clone the repository:
git clone https://github.com/Scouterna/skojjt-v2.git cd skojjt-v2 git submodule update --init --recursive -
Start PostgreSQL (example using Docker):
docker run -d --name skojjt-db \ -e POSTGRES_USER=skojjt \ -e POSTGRES_PASSWORD=dev_password_123 \ -e POSTGRES_DB=skojjt \ -p 5433:5432 \ postgres:17
-
Apply database migrations:
cd src/Skojjt.Web dotnet ef database update -
Run the application:
dotnet run --project src/Skojjt.Web
The app will be available at
https://localhost:7224(orhttp://localhost:5286).
When deploying manually to Azure App Service, use the following commands:
az login
dotnet publish src/Skojjt.Web/Skojjt.Web.csproj -c Release -o ./publish
Compress-Archive -Path ./publish/* -DestinationPath ./publish.zip -Force
az webapp deploy --resource-group "skojjt-v2" --name skojjt --src-path ./publish.zip --type zipApplication settings are in src/Skojjt.Web/appsettings.json. Key sections:
| Section | Description |
|---|---|
ConnectionStrings:DefaultConnection |
PostgreSQL connection string |
ScoutId |
OpenID Connect settings for ScoutID authentication |
Scoutnet |
Scoutnet API base URL |
FallbackAuth |
Optional fallback password authentication for development |
For local development, override settings in appsettings.Development.json.
dotnet testThe application exposes a health check endpoint for Azure monitoring:
GET /healthz
This endpoint is unauthenticated and returns:
| Status | HTTP Code | Description |
|---|---|---|
Healthy |
200 | Application and database are reachable |
Unhealthy |
503 | Database connectivity check failed |
Configure the Azure App Service health check probe to https://<your-app>.azurewebsites.net/healthz.
This project is licensed under the MIT License — see the LICENSE file for details.