APEX is the Agentic Platform Engineering eXperience for Azure. This repository is the live demo workspace for Jonathan Vella's session at The Perspectives 2026.
The event theme is practical cloud leadership: reducing complexity, improving resilience, and making better infrastructure decisions under compliance and cost pressure.
APEX is built for exactly that problem space. It turns a plain-language infrastructure ask into a structured delivery flow with AI agents doing the preparation work and humans keeping control over approvals, trade-offs, and deployment decisions.
- Captures business and technical requirements from natural-language prompts.
- Assesses target architecture against Azure Well-Architected guidance.
- Discovers governance and policy constraints before code generation.
- Produces Bicep or Terraform using Azure Verified Modules where possible.
- Validates outputs and assembles deployment-ready and as-built documentation.
The live demo builds an online ordering app for a fictional Maltese catering outlet that sells pastizzi, Cisk, and Kinnie. Because apparently the best way to showcase enterprise Azure infrastructure is with β¬0.50 pastries and a delivery driver named Mario.
The app features:
- π₯ 11 menu items across 4 categories (Pastizzi, Birra, Xorb, Ikla OΔ§ra)
- π A cart that judges your life choices ("Kemm tridu?! Having a festa or what?")
- πΆ Cash on delivery only. Like your nanna taught you.
- π΅ Delivery estimates powered by Mario's coffee schedule
β οΈ Side effects may include: spontaneous Maltese pride, carb comas, and saying "mela" in every sentence
"X'trid tordna llum?" β What would you like to order today?
Cisk Lager: "Malta's finest. Pairs with everything. Especially more Cisk."
You might notice a few things are slightly off. A stock photo of Coca-Cola where Kinnie should be. A generic beer where Cisk belongs. That's not a bug β it's a feature of working with AI.
GitHub Copilot is a copilot, not an autopilot. It wrote the React components, the Express server, the Dockerfile, the sarcastic copy, and the CSS β in minutes, not days. But it sourced images from Unsplash and Wikimedia using generic search terms, and it doesn't know what a Kinnie bottle looks like. To be fair, most people outside Malta don't either.
This is the point: AI accelerates the 90% so you can focus on the 10% that requires human judgment β like knowing that Kinnie is definitely not Coca-Cola, that Cisk Excel comes in a green can, or that pastizzi should never, under any circumstances, be microwaved.
The entire app β UI, server, container, deployment β was built and shipped to Azure App Service in a single Copilot Chat session. The images? Those need a Maltese person. Mela.
- An Azure subscription (with credits β the demo uses a P0v3 App Service Plan, so bring your wallet. Or your employer's wallet. We don't judge.)
- VS Code with the Dev Containers extension
- That's it. The devcontainer handles everything else. Mela.
1. Clone & open in Dev Container:
git clone https://github.com/jonathan-vella/bmit-2026.git
cd bmit-2026
code .
# F1 β "Dev Containers: Reopen in Container"2. Log in to Azure:
az login
azd auth login3. Deploy infrastructure (Bicep via azd):
cd infra/bicep/malta-catering
azd init -e dev
azd provisionThis deploys App Service (P0v3), ACR (Premium + private endpoint), VNet, Key Vault, Table Storage, Log Analytics, App Insights, and a budget alert. All AVM-based. All Entra ID. No admin credentials. Like a proper adult.
4. Build & push the app container:
ACR is locked behind a private endpoint, so you need to temporarily open the door, shove the container in, and lock it again. Very Maltese.
# Get your ACR name from azd outputs (it includes a unique suffix)
ACR_NAME=$(az acr list -g rg-malta-catering-dev --query "[0].name" -o tsv)
# Open the door
az acr update --name $ACR_NAME --public-network-enabled true --default-action Allow
# Cloud-build (no local Docker needed β the devcontainer doesn't have it anyway)
cd app/malta-catering
az acr build --registry $ACR_NAME --image malta-catering-app:latest --file Dockerfile .
# Lock it back up
az acr update --name $ACR_NAME --public-network-enabled false --default-action Deny5. Configure & start:
APP_NAME=$(az webapp list -g rg-malta-catering-dev --query "[0].name" -o tsv)
az webapp config appsettings set -g rg-malta-catering-dev -n $APP_NAME --settings WEBSITES_PORT=8080
az webapp stop -g rg-malta-catering-dev -n $APP_NAME
az webapp start -g rg-malta-catering-dev -n $APP_NAME6. Open https://$APP_NAME.azurewebsites.net
If the pastizzi are cold, it's because you took too long to open the door.
| Resource | Purpose | SKU |
|---|---|---|
| App Service Plan | Hosts the containerized React + Express app | P0v3 |
| Web App + Staging Slot | The actual app (managed identity, VNet-integrated) | β |
| Container Registry | Stores the Docker image (private endpoint only) | Premium |
| Virtual Network | 2 subnets: app-service + private-endpoints | /24 |
| Private DNS Zones | ACR, Key Vault, Storage (3 zones) | β |
| Key Vault | App Insights connection string, future secrets | Standard |
| Storage Account | Table Storage for order persistence (future) | Standard LRS |
| Log Analytics + App Insights | Monitoring and diagnostics | Free tier |
| Budget | β¬500/month alert | β |
All resources use Entra ID / managed identity for authentication. No admin credentials, no shared keys, no "I'll Revolut you later."
- A real multi-step agent workflow from prompt to Azure delivery artifacts.
- Human approval gates instead of blind automation.
- Architecture, pricing, governance, and implementation decisions in one flow.
Open GitHub Copilot Chat, select the Orchestrator agent, and paste:
Context: This is a live 30min demo, so we have to keep things short. At max 1 adversarial review during requirements & architect phases.
What I want to build: The owner of a catering outlet based in Malta (Europe) wants to host an online ordering app in Azure. The app is a simple containerized application with React. We can use table storage for persistence. Unless you can think of something better. The app will process online orders for pastizzi, Cisk, and Kinnie. Payment is strictly on delivery. Expectation is 1 transaction per sec.
| Experience | Link | What you will find |
|---|---|---|
| Main site | APEX documentation | Product overview, workflow, and getting started guidance |
| Demo walkthrough | Nordic Fresh Foods demo | Real generated outputs across the full pipeline |
| How it works | Workflow overview | The agent pipeline, reviews, and approval model |
| Prompt examples | Prompt guide | Reusable prompts for agents and common scenarios |
| Source repo | GitHub repository | The maintained upstream APEX codebase |
app/ # The malta-catering React + Express application
malta-catering/ # Source, Dockerfile, server, product images
.github/ # Agents, skills, instructions, prompts, hooks, and workflows
agent-output/ # Generated artifacts for each scenario or project
infra/ # Infrastructure-as-Code
bicep/
malta-catering/ # 10 AVM Bicep modules, phased deployment, azd manifest
mcp/ # MCP servers used by the workflow
scripts/ # Validation, sync, and demo support scripts
tests/ # Validation fixtures, prompts, and E2E inputs
If you want to keep exploring APEX after the event, start here: