overview
Problem
I wanted a place to put what I build, and I wanted to run every part of it myself, from the design down to the server. A static site was fine until I got tired of editing files every time I added something.
Approach
So I moved it to Flask and SQLite and wrote a private admin panel for projects, docs and files. The admin has a markdown editor with a preview, which I use more than I expected. The public pages come in English and Spanish.
The look is dark and loosely based on NieR:Automata, done with CSS and JavaScript only. No video files.
The site runs under Gunicorn on my own VPS and reaches the internet through Cloudflare Tunnel. The same VPS also hosts my mail server: Postfix, Dovecot, OpenDKIM and Roundcube.
Releases go through deploy.sh, which does these steps in order:
- Contrast check on the text colours.
- Unit tests.
git pull.- Install the systemd units for the threat collector and the SSH tarpit.
- Update the database schema.
- Restart the site.
- Smoke test against the live site.
If a test fails, it stops before the restart, which is the point.
Results
It's live. Along with projects, docs and files there's a CV page and a threat weather page (/en/threats/) that shows attack attempts, with the IPs masked. I haven't measured anything on it yet, so I won't put a number here.
Stack
Python, Flask, SQLite, Gunicorn, HTML, CSS, JavaScript, Cloudflare Tunnel, systemd, Bash.