How to build a social network using Phoenix, LiveView, Tailwind, Ecto, PostgreSQL, session cookies, systemd, Nginx, VPS

Build Solstice Commons, a neighborhood social network with Phoenix, LiveView, Tailwind, Ecto, PostgreSQL, session cookies, systemd, Nginx, VPS.

  • Difficulty Intermediate
  • Parts 12
  • Stack Phoenix, LiveView, Tailwind, Ecto, PostgreSQL, session cookies, systemd, Nginx, VPS

How this project works

Solstice Commons is the Phoenix 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-phoenix-social is a working snapshot.

The stack, and why these tools

JobChoiceWhy
Language / frameworkElixir, Phoenix + LiveViewLiveView is the best fit in this catalog for a social UI: likes and follows update in place over the socket without inventing an API. Ecto changesets keep the graph honest.
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.
JavaScriptLiveView (no HTMX required)LiveView replaces HTMX here. Alpine is optional. Do not add a React layer.
AuthenticationPhoenix session cookies + bcryptphx.gen.auth or a hand-rolled session. bcrypt_elixir hashes passwords.
Process / proxyElixir release + systemd, 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 Phoenix 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.