murta.xyz
visitor/
← All projects

ACTIVE / 2026

murta.xyz / Cloud Resume

A static portfolio on AWS with serverless features, infrastructure as code, and automated deployment pipelines.

The site

This portfolio is the product as well as its own technical case study. The frontend is deliberately small—semantic HTML, a shared responsive CSS system, and dependency-free JavaScript for navigation, theme selection, posts, comments, and the live visitor count. That keeps the pages fast, inspectable, and usable without a client framework.

The visual system supports light and dark themes, adapts from mobile to wide displays, and uses a compact editorial layout across the profile, projects, personal notes, calculator, and project-detail pages.

Serverless backend

An API Gateway HTTP API invokes Python 3.12 Lambda functions. The visitor endpoint atomically increments a DynamoDB counter, so concurrent visits do not overwrite one another. A second Lambda powers posts and comments in a DynamoDB single-table design with point-in-time recovery enabled.

Public readers can retrieve posts and add comments; publishing, editing, and deletion routes require a Cognito-issued JWT. Comment creation is throttled at the gateway, Lambda errors go to CloudWatch, and IAM policies limit each function to the DynamoDB actions it actually needs.

Infrastructure

Terraform defines the API, integrations, routes, DynamoDB tables, Lambda packages, permissions, logging, and authentication. Remote state is encrypted in S3, while pay-per-request tables keep the operational footprint appropriate for a personal site. The API's browser access is restricted to murta.xyz.

The result extends the original Cloud Resume Challenge beyond a static résumé: it is now a small publishing platform and portfolio whose application code and cloud resources remain versioned together.

AWS architecture

Two paths, one small stack.

01 / Requests
Browsermurta.xyz

Static site

CloudFrontCDN + HTTPS
S3HTML / CSS / JS

Serverless API

API GatewayHTTP API + JWT
Lambdavisitor count
Lambdaposts + comments
DynamoDBcounter table
DynamoDBcontent table
Cognito authorizes write routes CloudWatch receives Lambda logs IAM limits table access per function
02 / Deployment
Git pushmaster branch
GitHub Actionspath-filtered workflows

Frontend

S3 syncsite assets
CloudFrontcache invalidation

Backend

Terraformfmt / validate / plan
AWSapply infrastructure
Runtime
Static HTML/CSS/JS · Python 3.12 Lambda
Data & API
DynamoDB · API Gateway HTTP API
Security & operations
Cognito JWT · least-privilege IAM · CloudWatch