Stack

Here is an overview of the technologies I use to build, deploy, and maintain this website.

AWS Production Services

The production environment is built on a serverless AWS architecture. For a more detailed explanation of the architecture, see the Infrastructure section.

  • Amazon Route 53
  • Amazon CloudFront
  • Amazon S3
  • Amazon API Gateway
  • AWS Lambda
  • AWS CloudWatch
  • Amazon SNS
  • AWS CloudFormation

Backend

The backend is built with Python and runs on AWS Lambda. Each of the security demos is implemented as a dedicated Lambda function. A separate Lambda authorizer is used to handle authentication and authorization for demos that require it.

  • Python
  • SQLite

Frontend

The frontend is a static site generated by Hugo from Markdown content. Custom CSS is used to create a simple, lightweight design, while custom JavaScript and HTML elements power the interactive demo pages.

  • Hugo
  • JavaScript
  • CSS
  • HTML

Local Development

Local development is managed with Docker Compose. The backend API is run locally using AWS SAM, which provides a simulated Lambda environment. The frontend is served by a Hugo development server inside a Docker container. An Nginx container acts as a reverse proxy, directing requests to the appropriate service — either the frontend or the API — based on the path.

  • AWS SAM
  • Docker
  • Docker Compose
  • Nginx

Deployment

The entire deployment process is orchestrated by a main Bash script. First, AWS SAM deploys the backend infrastructure by applying an AWS CloudFormation stack, which sets up the necessary resources like API Gateway, Lambda functions, and the S3 bucket for static assets. Once the backend is deployed, the script executes a Python script that uses boto3 to manage the frontend deployment. This script builds the Hugo site, uploads the generated static files to the S3 bucket, and finally invalidates the Amazon CloudFront cache to ensure the changes are live.

  • AWS CloudFormation
  • Python (boto3)
  • Bash

Version Control

  • Git
  • GitHub