This repository is organized as progressive learning paths. You run each path from its branch in order.
- Git
- .NET SDK 9
- Azure CLI (
az) logged in - PowerShell 7+ (
pwsh)
ConferenceHub/is the shared app code.- Each learning path branch (
lp/*) adds the next topic. - Each path has its own deployment script:
LearningPath/<NN-Name>/create.ps1. - Do not create pull requests between
lp/*branches andmain; branch differences are intentional for step-by-step learning.
Clone once, then switch branches as you progress.
git clone https://github.com/theDiverDK/AZ-204-Demo.git
cd AZ-204-Demo
git fetch --all --pruneRun learning paths in this order:
lp/01-initThis creates the baseline Azure hosting for ConferenceHub (resource group, plan, web app) and deploys the app. Use this as the starting point for all later paths. Test by opening the site, browsing sessions, and submitting one registration.
git switch --track origin/lp/01-init
cd LearningPath/01-Init
./create.ps1
cd ../..lp/02-functionsThis adds Azure Functions for confirmation handling and updates the web app to call the function endpoint. Registrations now go through the function flow instead of only local app logic. Test by registering and checking Function App logs for the confirmation payload.
git switch lp/02-functions
if ($LASTEXITCODE -ne 0) { git switch --track origin/lp/02-functions }
cd LearningPath/02-Functions
./create.ps1
cd ../..lp/03-storageThis adds Blob Storage support for session slide uploads (multiple files per session). Organizer uploads are stored in Azure Storage and linked from session details. Test by uploading PDF/JPG slides as organizer and opening links from the session page.
git switch lp/03-storage
if ($LASTEXITCODE -ne 0) { git switch --track origin/lp/03-storage }
cd LearningPath/03-Storage
./create.ps1
cd ../..lp/04-cosmosThis switches data persistence to Cosmos DB for sessions and registrations. The migration step imports existing seed sessions so the app can run immediately on Cosmos. Test by registering users and verifying data/count changes in Cosmos containers.
git switch lp/04-cosmos
if ($LASTEXITCODE -ne 0) { git switch --track origin/lp/04-cosmos }
cd LearningPath/04-Cosmos
./create.ps1
./migrate.ps1
cd ../..lp/05-containerThis demonstrates container-based deployment for the web app. The script builds/publishes and deploys ConferenceHub in container hosting configuration. Test by opening the deployed app and verifying normal browse/register behavior.
git switch lp/05-container
if ($LASTEXITCODE -ne 0) { git switch --track origin/lp/05-container }
cd LearningPath/05-Container
./create.ps1
cd ../..lp/06-authThis enables Microsoft Entra ID authentication and role-based authorization. Registration requires login, and organizer-only features are restricted by role. Test by signing in as user vs organizer and confirming UI/action differences.
git switch lp/06-auth
if ($LASTEXITCODE -ne 0) { git switch --track origin/lp/06-auth }
cd LearningPath/06-Auth
./create.ps1
cd ../..lp/07-keyvaultThis moves sensitive settings to Azure Key Vault and uses managed identity + RBAC access. App secrets are resolved from Key Vault references instead of plain app settings values. Test by confirming app still works and Key Vault reference resolution is successful in web app settings.
git switch lp/07-keyvault
if ($LASTEXITCODE -ne 0) { git switch --track origin/lp/07-keyvault }
cd LearningPath/07-KeyVault
./create.ps1
cd ../..Note:
lp/08-apimis intentionally not included right now. For the current ConferenceHub architecture, an APIM step does not add meaningful value, so this section is omitted on purpose.
lp/09-eventsThis introduces event-driven behavior with Event Grid/Event Hub integrations. Events are emitted and processed when app actions occur (for example slide-related activity). Test by triggering event-producing actions and validating downstream processing/logs.
git switch lp/09-events
if ($LASTEXITCODE -ne 0) { git switch --track origin/lp/09-events }
cd LearningPath/09-Events
./create.ps1
cd ../..lp/10-messagesThis adds asynchronous messaging with Service Bus and Queue Storage. Work is decoupled into message handlers (for example registration email flow and thumbnail jobs). Test by performing actions that enqueue messages and verifying consumers process them.
git switch lp/10-messages
if ($LASTEXITCODE -ne 0) { git switch --track origin/lp/10-messages }
cd LearningPath/10-Messages
./create.ps1
cd ../..lp/11-appinsightThis enables full observability with Application Insights across app and functions. Dependency/custom telemetry and distributed traces are configured for end-to-end visibility. Test by running core flows, then confirming traces/dependencies in Application Map and Logs.
git switch lp/11-appinsight
if ($LASTEXITCODE -ne 0) { git switch --track origin/lp/11-appinsight }
cd LearningPath/11-AppInsight
./create.ps1
cd ../..- Demonstrates: baseline App Service deployment of ConferenceHub.
create.ps1adds/updates: resource group, app service plan, web app, app build/publish/deploy, then opens the site.
- Demonstrates: Azure Functions integration for confirmation flow.
create.ps1adds/updates: function app resources, function deployment, web app settings for function endpoint/key, and redeploys the web app with function calling enabled.
- Demonstrates: Azure Blob Storage for session slide uploads.
create.ps1adds/updates: storage account + containers for slides, web app settings for storage usage, and redeploys web app with upload/view support.
- Demonstrates: Cosmos DB as app data store.
create.ps1adds/updates: Cosmos account, database, sessions/registrations containers, web app Cosmos settings.migrate.ps1adds/updates: imports seed session data into Cosmos.
- Demonstrates: containerized deployment path.
create.ps1adds/updates: container-related hosting resources and deploys ConferenceHub container image to Azure hosting.
- Demonstrates: Entra ID authentication/authorization.
create.ps1adds/updates: auth configuration for web app, app settings for tenant/client configuration, and deploys role-aware app behavior.
- Demonstrates: secret/key management via Key Vault with managed identity and RBAC.
create.ps1adds/updates: key vault, role assignments, secret references, and replaces direct sensitive app settings with Key Vault-backed values.
- Demonstrates: event-driven integration using Event Grid/Event Hub.
create.ps1adds/updates: event infrastructure subscriptions/endpoints and app/function settings for event publishing/handling.
- Demonstrates: asynchronous messaging with Service Bus and Queue Storage.
create.ps1adds/updates: messaging resources, function triggers/bindings deployment, and app settings so registration/thumbnail jobs flow through queues/topics.
- Demonstrates: full observability with Application Insights.
create.ps1adds/updates: shared Application Insights connection across apps/functions, sampling disabled, telemetry settings, and redeploys for dependency/custom-event visibility.
- Current branch:
git branch --show-current - Local branches:
git branch --list
From repo root:
./cleanup.ps1This deletes the resource group and purges soft-deleted resources (including Key Vault).
If you want all learning paths checked out at once, use:
./tools/worktrees.ps1