Building My Own Social Platform from Scratch

Why Build This

I grow up using Chinese forums and BBS platforms — Baidu Tieba, phpwind, Discuz. For years I am a heavy user of these products. I spend hours reading threads, posting, watching communities form around topics. These platforms shape how I think about the internet.

At some point I start wondering: how does this actually work? How do you build a place where people can sign up, create posts, reply to each other, get notifications, see who is online — all the things I take for granted as a user? I know I can read tutorials, but I do not really trust that I understand something until I build it myself. So I decide to build my own social platform from zero.

Everything — requirements, design, frontend, backend, deployment — is done by me alone. This is a pure hobby project with learning purpose.

What It Does

It is a forum-style social platform. Users can:

  • Register and log in (including third-party login via OAuth2)
  • Create posts, reply to threads, follow topics
  • See who is online in real-time
  • Get live notifications when someone replies to their post
  • Browse a clean, responsive UI that works on desktop and mobile

It is not trying to be the next Facebook. It is trying to be a modern version of the forums I grow up with — focused on content and conversation, not feeds and likes.

Technical Decisions

Sails.js for the backend. I pick Sails.js because it gives me an MVC structure out of the box with built-in ORM, which speeds up the data modeling a lot for a solo project. It also has native WebSocket support through Socket.io integration, which means real-time features (online status, live notifications) come almost for free without setting up a separate WebSocket server.

Socket.io for real-time. The forums I use as a kid are all request-response — you have to refresh the page to see new replies. I want it to feel more alive. Socket.io handles the persistent connection so new posts and notifications push to the client instantly. The tricky part is managing which events go to which connected users — you do not want to broadcast everything to everyone.

Semantic UI for the frontend. I want the platform to look polished without spending weeks on CSS. Semantic UI gives me a solid component library with good defaults. The naming convention is very readable too, which makes the templates easy to maintain.

OAuth2 for auth. I implement third-party login so users do not need to create yet another password. Setting up the OAuth2 flow (redirect, callback, token exchange, session creation) is more work than I expect, but it is worth it — the login experience is much smoother.

What I Am Learning

Building a full social platform by myself is teaching me how many moving pieces a "simple" web app actually has. User registration alone touches auth, session management, email verification, password hashing. Then you add posts, replies, notifications, real-time presence — each one introduces new state to manage and new edge cases to handle.

The biggest lesson so far: the hard part of a social platform is not any single feature. It is how all the features interact with each other. A notification system sounds simple until you realize it needs to know about posts, replies, follows, online status, and read/unread state — all at the same time.

Technology Stack

  • Backend: Sails.js (Node.js MVC framework)
  • Frontend: Semantic UI
  • Real-time: Socket.io
  • Auth: OAuth2