The hub at /projects/ is driven by _data/projects.yml. Each entry is one project. Adding a new one is a six-step loop.

1. Pick a CS concept

Something I’ve actually studied recently — a data structure, an algorithm, a system-design primitive. Trie, sliding window, consistent hashing, topological sort, CRDT, etc.

2. Find a real-world problem that needs it

Not a toy demo. A problem where the concept is the right answer, not a stretch. Some seed pairings:

Concept Real problem
Sliding window / token bucket Rate limiter
Trie Autocomplete, URL routing
Min-heap Job queue with priorities
Hashing + Base62 URL shortener
Bloom filter Negative-cache layer
Topological sort Build system, task scheduler

3. Scaffold from the template

Copy the layout from sm2-flashcards: Dockerfile, .github/workflows/ci.yml, Makefile, README template, pyproject.toml, render.yaml.

4. Build the core from scratch

The data structure or algorithm at the heart of the project gets its own module, full typing, and a test file. Plus a benchmark against the naive approach — that benchmark is what the README highlights.

5. Deploy

Render (free tier) for anything web-shaped — render.yaml declares the service and Render auto-deploys on every push to main. Pair with a free Neon Postgres for anything that needs persistence. Skip this step for pure-library projects.

6. Add a YAML entry

- name: <Project Name>
  slug: <repo-slug>
  tagline: <one sentence>
  concepts: [<Concept>, <Concept>]
  repo: https://github.com/jasmineanica/<repo-slug>
  demo: https://<repo-slug>.onrender.com
  status: live   # or wip

Commit, push, done. The project shows up on /projects/.