Build a FastAPI Social Network

Build Rivermouth Commons, a neighborhood social network with FastAPI, Jinja2, HTMX, Tailwind, SQLAlchemy, PostgreSQL, session cookies, Gunicorn, Nginx, VPS.

  • Difficulty Intermediate
  • Parts 12
  • Stack FastAPI, Jinja2, HTMX, Tailwind, SQLAlchemy, PostgreSQL, session cookies, Gunicorn, Nginx, VPS

How this project works

Rivermouth Commons is the FastAPI remake of Westloop: a neighborhood social network with accounts, profiles, follows, likes, comments, a following timeline, search, notices, and a real Ubuntu VPS deploy. Each numbered folder in fcc-fastapi-social is a working snapshot.

The stack, and why these tools

JobChoiceWhy
Language / frameworkPython, FastAPIFastAPI is excellent at typed routes and still happy to return HTML. SQLAlchemy 2 models the graph. You already know Python from the Django sibling.
DatabasePostgreSQLFollows, likes, and comments need foreign keys and unique pairs. SQLite is only for the first laptop boot.
CSSTailwind CSSFeeds, avatars, and a sticky nav are layout-heavy. Utilities stay in the templates you already edit.
JavaScriptHTMX + Alpine.jsJinja fragments + HTMX. Do not build a JSON API until a mobile client exists.
AuthenticationSigned session cookies + passlib/bcryptitsdangerous-signed cookies and bcrypt. Starlette SessionMiddleware is enough.
Process / proxyGunicorn + Uvicorn workers, Nginx, Let’s EncryptSame VPS shape as Westloop: one app process, Postgres on localhost, Nginx for TLS and static/media files.
Hosting / DNSHetzner Cloud CX22 (or Contabo / DigitalOcean), Cloudflare Registrar + DNSYou own the box. PaaS is easier and teaches less.
EmailConsole locally, Postmark in productionPassword reset must leave the laptop.

If you already finished the FastAPI blog, keep going — this project adds a social graph and a VPS ship, not another CRUD journal.

Open GitHub repo →

Parts in order

Work through the parts in sequence. Each lesson explains the ideas, then points you to a runnable GitHub snapshot.