~/stack
How this site is built, deployed, and run.
# Architecture
┌─────────────────────────────────────────┐
│ adamcoding.com │
│ │
│ ┌───────────────────────────────────┐ │
│ │ Nginx (reverse proxy) │ │
│ │ :80/:443 → TLS termination │ │
│ └──────┬──────────────┬─────────────┘ │
│ │ │ │
│ / │ /tracker │
│ ▼ ▼ │
│ ┌────────────┐ ┌────────────────┐ │
│ │ Flask App │ │ Tracker App │ │
│ │ :5000 │ │ :5001 │ │
│ │ (this │ │ (DSA tracker) │ │
│ │ site) │ │ │ │
│ └────────────┘ └──────┬─────────┘ │
│ │ │
│ ┌──────▼─────────┐ │
│ │ PostgreSQL 16 │ │
│ │ :5432 │ │
│ └────────────────┘ │
│ │
│ RackNerd VPS (2C / 8GB) │
└─────────────────────────────────────────┘
# Tech Stack
Backend
- Python 3.12 — language
- Flask 3 — web framework
- Gunicorn — WSGI server
- Markdown — blog rendering
- Pygments — syntax highlighting
Frontend
- Jinja2 — templating
- Vanilla JS — no frameworks
- JetBrains Mono — code font
- Inter — body font
- CSS Grid/Flexbox — layout
Infrastructure
- Docker Compose — orchestration
- Nginx — reverse proxy + TLS
- RackNerd VPS — 2 cores, 8GB RAM
- Git — deploy from branch
- Let's Encrypt — SSL certs
Blog System
- Posts are .md files with YAML frontmatter
- Write in any editor, commit, deploy
- No CMS, no database, no admin panel
- Fenced code blocks with syntax highlighting
- Auto-sorted by date
# Deployment
deploy.sh
#!/bin/bash
# One command to rule them all
git pull origin main
docker compose down
docker compose up -d --build
That's it. The entire site — including the DSA Tracker with its PostgreSQL database — is deployed with a single script. Branch-based deployment lets me test changes on staging before going live.
# Cost
€16
/year VPS
€12
/year domain
€0
SSL (Let's Encrypt)
€0
Software (all OSS)
Total cost of running a professional developer portfolio with a live web app: about €28/year. No excuses.