How I Built This Portfolio

A deep dive into the architecture, tech stack, and engineering decisions behind this site.

Overview

This portfolio website is built with enterprise-grade technologies to demonstrate full-stack development capabilities, cloud architecture knowledge, and software engineering best practices.

Rather than using a pre-made template, I built this from scratch to showcase my ability to design and implement production-ready applications using industry-standard tools and frameworks.

System Architecture

System Architecture Diagram

Full-stack architecture deployed on AWS with CI/CD automation

Tech Stack

Backend

  • Spring Boot 3.2 - Application framework
  • Java 21 - Latest LTS runtime
  • Spring Data JPA - Database ORM
  • Maven - Build tool

Frontend

  • Thymeleaf - Server-side rendering
  • Tailwind CSS - Utility-first styling
  • Responsive Design - Mobile-first
  • SEO Optimized - Server-rendered HTML

Database

  • PostgreSQL 16 - Production database
  • AWS RDS - Managed hosting
  • Flyway - Version-controlled migrations
  • H2 - In-memory testing

Cloud Infrastructure

  • AWS App Runner - Container hosting
  • AWS ECR - Container registry
  • AWS SES - Email notifications
  • Cloudflare - DNS, SSL, CDN

CI/CD & Quality

  • GitHub Actions - Automated pipelines
  • Docker - Containerization
  • JUnit 5 - Unit & integration tests
  • Greptile - AI code review

Monitoring

  • CloudWatch - Logs & metrics
  • Spring Actuator - Health endpoints
  • AWS Budgets - Cost alerts
  • JaCoCo - Code coverage

CI/CD Pipeline

Git Push
GitHub Actions Build + Test
AWS ECR Push Image
App Runner Auto-deploy
Live Zero downtime

Every push to master triggers automated testing, Docker build, and zero-downtime deployment

Key Technical Decisions

Why App Runner over ECS/Fargate?

App Runner provides fully managed container hosting without VPC configuration, load balancers, or auto-scaling setup. For a single-service application, it offers the right balance of simplicity and capability while reducing operational overhead.

Why Thymeleaf over React SPA?

Server-side rendering provides better SEO, faster initial page loads, and a simpler deployment model. For a content-focused portfolio site, an SPA would add unnecessary complexity without significant benefit.

Cost Optimization

The entire infrastructure runs under $25/month by using App Runner's minimal configuration (0.25 vCPU, 512MB), RDS db.t3.micro, Cloudflare's free tier for CDN/SSL, and AWS SES's free tier for email.

API Endpoints

GET /api/projects
Try it

Returns all projects as JSON

GET /api/projects/{slug}

Returns a single project by slug

GET /actuator/health
Try it

Health check endpoint for monitoring

View the Source Code

All code is available on GitHub. Explore the implementation details, CI/CD workflows, and infrastructure configuration.

View on GitHub