A web application displaying FFBC-licensed mountain biking events in Belgium. Features a calendar view, event list, interactive map, event detail pages with activity cards, and an RSS feed.
Architecture: SvelteKit frontend (static SPA) + .NET 10 Azure Functions API, hosted on Azure Static Web Apps.
- .NET 10 SDK
- Node.js 22+
- Azure Functions Core Tools (optional, for local API)
# Install frontend dependencies
cd src/WebApp
npm install
# Start the SvelteKit dev server (proxies /api to localhost:7071)
npm run devIn a separate terminal, start the Azure Functions API:
cd src/Api
func startThe frontend will be available at http://localhost:5173 with API calls proxied to the Functions host.
# .NET API tests
dotnet test
# Build frontend
cd src/WebApp && npm run build├── src/
│ ├── WebApp/ SvelteKit frontend (static SPA)
│ │ ├── src/
│ │ │ ├── routes/ File-based routing (/, /list, /calendar, /map, /event)
│ │ │ └── lib/ API client, types, stores
│ │ └── static/ favicon
│ └── Api/ .NET Azure Functions (isolated worker)
│ ├── Functions/ HTTP trigger endpoints
│ ├── Services/ Event fetching, geocoding, details parsing
│ └── Models/ Shared data models
├── tests/
│ └── Api.Tests/ xUnit tests for API services and endpoints
├── staticwebapp.config.json SWA routing configuration
└── .github/workflows/ CI/CD pipeline
The app deploys automatically to Azure Static Web Apps via GitHub Actions on every push to main.
- Create a Static Web App in the Azure Portal
- Get the deployment token from the Static Web App → Manage deployment token
- Add the GitHub Secret:
- Go to your GitHub repo → Settings → Secrets and variables → Actions
- Create a secret named
AZURE_STATIC_WEB_APPS_API_TOKENand paste the deployment token
- Trigger: Every push to
mainor PR againstmain - Build & Test: Builds frontend (npm), builds API (.NET), runs all tests
- Deploy: Uploads static frontend + API to Azure Static Web Apps
- PR previews: Staging environments created for pull requests