Overview
This portfolio site was created using Spring Boot with the JTE templating engine. It allows full CRUD operations for Projects and Experience, stored in a MySQL database. The admin dashboard supports editing project metadata, highlighting featured projects, and uploading static HTML demos.
Key Features
- Project Management: Add, edit, delete projects with title, description, technologies, GitHub & demo links.
- Experience Tracking: Log professional/academic experience with timelines.
-
File Uploads: Upload static HTML demos tied to each project, stored in
/opt/portfolio/uploads/
. - Sorting Logic: Highlighted projects appear first, then ordered by start date (newest first).
- Authentication: Admin-only access for editing and uploads.
- AWS Deployment: Runs on EC2 with persistent file storage for uploads.
Architecture
The backend is written in Java using Spring Boot. JTE templates handle server-side rendering.
Data persistence is handled by Spring Data JPA with MySQL.
Uploaded files are served via Spring’s WebMvcConfigurer
, mapping
/static-uploads/**
to the server file system.

Code Highlights
- PortfolioController: Handles routes for displaying and editing projects.
- ProjectService: Sorting logic for highlighted projects + date order.
- WebConfig: Maps uploaded static files for public serving.
- Delete Logic: Removes project’s folder when deleted.
Static HTML Uploads
Each project can host its own static HTML demo page. Files are stored in dedicated folders and accessible via unique links. This enables live previews of mini-projects or interactive showcases without extra servers.
Fully Dynamic
Aside from the project description pages (like this one), the entire portfolio website is fully dynamic. All data — including projects, experience, and media — is pulled directly from the MySQL database. This ensures that any changes made through the admin panel (adding, editing, or removing projects) instantly reflect across the live site without requiring static HTML updates.

Deployment
The site is deployed on an AWS EC2 instance with MySQL for persistence.
Uploaded HTML and media live under /opt/portfolio/uploads
, ensuring survival
across application restarts.