Welcome to my personal portfolio and journey timeline web application! Built during the Meta Production Engineering Fellowship, this project showcases my professional background, education, hobbies, travel experiences, and an interactive timeline API.
The site is fully containerized using Docker Compose and deployed on a Linux VPS with Nginx reverse proxying, Let's Encrypt SSL/HTTPS encryption, and custom API rate limiting.
- Backend & Web Framework: Python 3, Flask, Jinja2 Templates, Peewee ORM
- Database: MariaDB (Production in Docker), SQLite (Local Testing / Automated CI)
- Containerization & Orchestration: Docker, Docker Compose
- Reverse Proxy & Security: Nginx, Certbot (Automated SSL/HTTPS), Nginx Rate Limiting
- Testing: Unittest, Shell scripting (
run_test.sh) - Deployment & CI/CD: Automated bash deployment script (
redeploy-site.sh)
- Dynamic Portfolio Pages: Multi-page layout covering Work Experience, Education, Hobbies, and Travel Maps rendered via Jinja2.
- Interactive Timeline API: RESTful endpoint (
/api/timeline_post) supportingPOST,GET, andDELETEmethods for creating and viewing updates. - Automated SSL/HTTPS: Nginx reverse proxy integrated with
jonasal/nginx-certbotfor automatic Let's Encrypt certificate issuance and HTTP-to-HTTPS redirects. - Rate-Limited Endpoints: Nginx rate limiting (
1r/m) enforced onPOST /api/timeline_postto protect against spam and abuse. - Database Persistence: Named Docker volume (
mydatabase) ensuring zero data loss across container restarts and OS reboots.
- Python 3.9+
- Pip & Virtualenv
Clone the repository and set up a virtual environment:
git clone https://github.com/HopeBestWorld/pe-portfolio-site.git
cd pe-portfolio-site
python3 -m venv python3-virtualenv
source python3-virtualenv/bin/activate
pip install -r requirements.txt