Here is an overview of the technologies I use to build, deploy, and maintain this website.
The production environment is built on a serverless AWS architecture. For a more detailed explanation of the architecture, see the Infrastructure section.
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.
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.
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.
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.