🎮 0/5 quests done — jump in

Welcome, Emily — a basic Linux tutorial

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.

🎮 Start Here: How Does Any of This Actually Work?

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.

0 / 5 quests complete
🗺️

The Map

See the whole tech stack laid out before diving into any one piece.

Open roadmap.sh →
🗄️

Databases

Write real SQL against a real database, right in your browser. No install.

Open SQLBolt →
🌐

Frontend + APIs

Build real pages, then build a real API. 100% free, no catch.

Open freeCodeCamp →
📡

How the Internet Works

Made with Vint Cerf — an actual inventor of the internet. Packets, DNS, routing.

Open Khan Academy →
🎬

Watch & Tinker

Prefer video over reading? Screencasts where you can pause and edit the code.

Open Scrimba →

🏆 Boss level: fix this exact page's biggest flaw

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.

🎉 Quest complete! You now know more about how the internet works than most adults. Go build something.

1. Where am I?

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

2. Looking at files

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)

3. Making and moving things

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
Careful: there is no recycle bin. 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.

4. Finding things

grep -r "TODO" .        # search file contents recursively
rg "TODO"               # ripgrep — same idea, much faster
find . -name "*.py"     # find files by name pattern

5. Your workspace

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.

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.

6. What's preinstalled

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>

7. Survival tips

Have fun. 💛
— Papa