Demo script

About 15 minutes. Run aspire run before starting and sign in once as the admin so the authenticator app is set up.

1. One AppHost, every resource

  • Open src/Digest.AppHost/AppHost.cs: SQL, Service Bus with its queue, Storage, the web app and the summarizer, each with its references.
  • In the dashboard, show the resources running, SQL Server and the Service Bus emulator in Docker, and the parameters (secrets are masked).

2. The app

  • As the admin, open Invites and invite an email address. Show the invite arriving through Mailgun, follow the link and set a password.
  • Toggle between the light and dark theme in the navbar.
  • Paste a link, and watch the card go from Pending to Summarized.
  • Click a tag to filter the digest.
  • In the dashboard, open Traces and select the web: POST /links row. One trace shows SubmitLink, the Service Bus send, the function run, FetchPage, the Claude call and the database update.
  • Open the Claude span to show the GenAI view with the prompt, the <page> delimiters and the JSON reply.
  • From any span's ... menu, open Structured logs to see the logs for that trace.
  • Open Metrics: links.submitted, links.summarized, links.processing.duration and token usage.

4. Failure paths

  • Submit broken link: the card shows Failed with a reason, and the message completes.
  • Submit poison message: the logs show three attempts, then the message moves to the dead-letter queue.

5. Security

  • Sign out and sign in with a wrong password, then with an unknown email: the message is the same.
  • Show the response headers in the browser tools.
  • Open /admin as the admin: only the Links table, editable with the change logged.
  • Walk through the Security page.

6. Tests

dotnet test Digest.slnx

7. Azure

  • aspire deploy, then open the deployed app and the Aspire dashboard in Container Apps.
  • Show the resource group: Basic Service Bus, Basic registry, free-offer SQL and Key Vault.
  • Finish with aspire destroy.