This is CT 2570, your own virtual server — a Linux container running on
the Charliehub infrastructure (loft servers in 9DBC). You have full sudo access inside it and you're
free to experiment. It's deliberately sandboxed: nothing you do in here can
reach the production control plane, so don't be afraid to break things. If
something goes badly wrong, we can rebuild it.
You've been online since before you could ride a bike, but "database", "API", "frontend/backend" probably still feel like buzzwords. These five are free, genuinely interactive (you click and do things, not just read), and you can clear the whole quest line in an afternoon. Check one off when you finish it — it saves, come back whenever.
Write real SQL against a real database, right in your browser. No install.
Open SQLBolt →Made with Vint Cerf — an actual inventor of the internet. Packets, DNS, routing.
Open Khan Academy →Prefer video over reading? Screencasts where you can pause and edit the code.
Open Scrimba →Notice something? Those checkmarks above only live in this browser, on this
device — open the site on your phone, or clear your browser history, and they're
gone. That's because right now they're saved with something called
localStorage, which lives on your computer, not on the server. A real app
would save your progress in a database instead, so it follows you, not your
browser.
Once you've cleared the Database and Frontend/API quests, open a terminal here, type
claude, and say exactly this:
"Right now this page's quest checkboxes are saved with localStorage, so they
don't survive across devices or browsers. I want to fix that for real: build a small
FastAPI API (a GET to load progress, a POST to save it) plus a quest_progress
table in my own Postgres database, then wire this page up to call that API instead of
localStorage."
That's a real database, a real API, and a real frontend, all talking to each other — and it fixes a bug you actually noticed yourself.
The shell always has a "current directory". These three commands answer the basic questions where am I, what's here, how do I move?
pwd # print working directory
ls # list files in the current directory
ls -la # list everything, including hidden files, with details
cd ~ # go to your home directory (just "cd" works too)
cd .. # go up one level
cat file.txt # dump a whole file to the terminal
less file.txt # scroll through it (q to quit)
head -n 20 file.txt # first 20 lines
tail -f log.txt # follow a log as it grows (Ctrl+C to stop)
nano file.txt # edit a file (Ctrl+O save, Ctrl+X quit)
mkdir myproject # make a directory
touch notes.md # create an empty file
cp a.txt b.txt # copy
mv old.txt new.txt # rename / move
rm file.txt # delete (no undo!)
rm -r somedir # delete a directory and its contents
rm means gone.
Inside this CT that's fine — it's meant to be broken and rebuilt — but build
the habit of pausing before rm -r.grep -r "TODO" . # search file contents recursively
rg "TODO" # ripgrep — same idea, much faster
find . -name "*.py" # find files by name pattern
You're in ~/projects. Everything you build goes here. You're just
getting started, so right now there's not much — but that's the point.
hello-web/ — the placeholder site you're reading right now,
served at emily.charliehub.net by a tiny
Python http.server running as a systemd user unit
(hello-web.service). It's holding port 8000 so the domain resolves to
something. When you build a real app — Flask, FastAPI, whatever — bind
it to port 8000 and it inherits the domain.welcome-emily.md — the original welcome note this page is based on
(open it with glow ~/projects/welcome-emily.md for a nicer view).There's also ~/.env in your home folder containing API keys. Standard
hygiene: don't commit it, don't paste it anywhere, don't print it in full.
Python 3.12, Node 22, gcc, git, jq, ripgrep, vim, nano, and the usual suspects. On the Python side you already have fastapi, httpx, sqlalchemy, psycopg2, pydantic, rich, and python-dotenv system-wide — enough to build a FastAPI + Postgres app with zero installs.
PostgreSQL 16 is running locally on 127.0.0.1:5432. You have a login
role emily and a database emily with CREATEDB, so just
typing psql connects you.
For anything beyond what's preinstalled, use a per-project venv — Ubuntu
24.04 enforces PEP 668, so don't pip install system-wide:
python3 -m venv .venv
source .venv/bin/activate
pip install <whatever>
pwd — where am I? cd alone goes home.Ctrl+C — cancel whatever the terminal is doing.Tab — autocomplete file and command names. Use it constantly.↑ / ↓ — scroll through previous commands.man ls — read the manual page for any command (q to quit).exit — log out. The server keeps running; your files persist.Have fun. 💛
— Papa