Under the hood
Yes, this runs on a Raspberry Pi.
No cloud server and no hosting bill. Every page you've clicked, every simulation you've sent to the Pi, and my résumé PDF all come from a Raspberry Pi 3 sitting at home.
Cloudflare sits out front, Tailscale lets me get in from anywhere, and my router doesn't have a single port open. It's my favorite way to learn systems stuff: if something breaks, it's my problem to fix.
Right now on the Pi
checking in… · updates every 10 seconds
- Up for
- –
- Site up for
- –
- Load (1/5/15 min)
- –
- CPU temperature
- –
- Memory in use
- –
- Python
- –
How you got here
Loading this page took four hops. The Pi only ever makes outbound connections, which is the whole trick.
01
You
Your browser
You ask for markanthonybrown.com. Fonts and Tailwind come from CDNs, so the Pi only has to send HTML, JSON and a few small files.
02
Cloudflare
DNS, HTTPS, caching
Handles the secure connection, keeps static files cached for a week, and filters out most of the bot traffic.
03
cloudflared
The tunnel
A connection the Pi opens out to Cloudflare. Nothing comes in through my router, and my home IP stays private.
04
Raspberry Pi 3
Gunicorn + Flask
A quad-core 1.2 GHz board with 1 GB of RAM. Two Gunicorn workers run the Flask app and the Python simulation code.
The back door
Tailscale
When I need to SSH in or push an update, I go through a private Tailscale network, so SSH never faces the open internet.
Why I set it up this way
Let the browser do the work
A Pi 3 is not a supercomputer. The simulator runs in your browser by default, and the Python version only takes one job at a time, capped at 200k steps.
Keep it light
Just Flask and the standard library. No numpy, no database, no build step. I draw the charts by hand on <canvas>, and my headshot is a 24 KB WebP.
Zero open ports
Public traffic comes through the tunnel and my own access goes through Tailscale. With nothing exposed on the router, there's a lot less to worry about.