Azure · Containers · Infrastructure as Code

Building cloud systems that run in production.

A portfolio that is also the workload. The site is served from Azure Static Web Apps, the API runs as a container on Azure Container Apps, project data lives in Azure SQL, and every resource is defined in Terraform with private networking and managed identity.

Projects

Loaded live from the API. Filter by technology or search across titles and descriptions.

How it is built

Each layer was built local-first, tested with Docker, then deployed through CI/CD.

Frontend

Static site on Azure Static Web Apps with global HTTPS delivery, per-pull-request preview environments, and no server to keep warm.

Static Web AppsCDN

API

Express API in a multi-stage Docker image on Azure Container Apps. Health and readiness probes, structured JSON logs, request IDs, and graceful shutdown.

Container AppsDockerACR

Data

Azure SQL holds project metadata behind a private endpoint. Connection retry with exponential backoff absorbs serverless resume delays.

Azure SQLPrivate Link

Platform

Terraform defines every resource with remote state. Managed identity replaces stored passwords, and Key Vault holds the remaining secrets.

TerraformKey VaultEntra ID

Operations

Application Insights traces requests and SQL dependencies; Container Apps logs stream to Log Analytics with alerts on failures and latency.

App InsightsLog Analytics

Delivery

Pull requests run build validation, then a merge builds the image, pushes to the registry, and rolls out a new revision with rollback available.

GitHub ActionsAzure DevOps