PersonalSite

This site: portfolio, blog, links, admin tools, and deployment pipeline without a frontend framework.

This site is a record of my personal projects, thoughts and experience as a tech nerd, software engineer and tinker. It will be constantly evolving as I get more time to improve it, add more content and implement my latest ideas.

What it solves

I wanted a portfolio that stayed small, understandable, self-hosted, and deployable without a frontend build chain or heavyweight application server.

The result is a plain HTML/CSS/JS site with shared layout scripts, CGI admin endpoints, S3-backed content, CloudFront delivery, and repeatable Lambda container deployment. All running on demand within Amazon Free tier limits.

Who this is for

  • People reviewing how this portfolio is built and operated
  • Developers interested in framework-free web systems
  • Builders comparing static pages with small dynamic admin tools
  • Anyone evaluating my deployment, verification, and AI-assisted process

What it does

This is simple portfolio site with no frontend framework, no Node runtime, no build step, and no heavy CMS. It powers project documentation, a blog, curated links and a small analytics pipeline backed with a strong CI/CD workflow.

Production runs as an AWS Lambda container behind CloudFront. BusyBox httpd serves from /tmp/www, the Lambda Web Adapter bridges Lambda events to HTTP, and S3 stores blog posts, images, links, and analytics data. On cold start, the container syncs S3 content into a local cache before serving requests.

Workflow covered

  1. Publish content - write project pages, manage posts and links, upload images, and update manifests through the admin UI.
  2. Serve and persist - render public pages from static assets while CGI endpoints mirror content between local cache and S3.
  3. Deploy and verify - build a linux/amd64 image with Podman, push to ECR, update Lambda, and run validation plus smoke checks.

Technical highlights / stack

Frontend
HTML5 CSS3 Vanilla JS No build step
Backend
Shell CGI BusyBox httpd Cookie sessions
Storage
AWS S3 MinIO Local cache
Deployment
AWS Lambda Lambda Web Adapter CloudFront ECR Podman

Why it matters

I want to get my fun work out for the world to see. As a software engineer that meant building it myself. I've never liked working on WYSIWYG site builders and want to keep cost to a minimum. This meant a site with a small overall footprint while site be visually interesting an showcasing my skills. It shows how I approach all problems, keep it as clean and simple as possible while including all the functionality that matter. Automate the repetitive tasks, create a stable working environment and make it repeatable and scalable.

Challenges

  • Lambda's read-only filesystem required a writable /tmp/www runtime copy.
  • Learning about Lambda containers and how they require the Web Adapter, correct port setup, and cold-start timing.
  • Don't overuse AI generated content. My initial deployments included too much AI generated content. While I worked to include the relevant information there was too much repetition and fluff. I still intend to use AI as much as possible, I'm working on balancing the efficiency it brings with maintaining my voice.
  • Cold-start failures can look like generic website failures without smoke checks.

Current scope

Public site

  • Project pages
  • Blog rendering
  • Links page
  • Theme swatches
  • Responsive navigation

Admin

  • Login/logout
  • Draft and publish flow
  • Image upload/list/delete
  • Link management
  • Analytics review

Operations

  • Podman image build
  • ECR push
  • Lambda update
  • Static validation
  • Production smoke checks

What to do next

Read the source if you want to inspect the no-build frontend, shell CGI admin workflows, S3 cache behavior, Lambda deployment, and validation scripts behind tebay.dev.