Social Media App | Node.js, Express.js, GraphQL, MongoDB, Socket.io
A full-featured social media backend supporting posts, real-time chat, friend connections, and both REST and GraphQL APIs — built with plain Node.js/Express (no framework abstraction), giving me deep hands-on experience with raw middleware, authentication, and API design.
Key features I built:
Authentication system — signup with email confirmation, login, Google OAuth login, JWT access/refresh tokens, and a full forgot/reset password flow
Friend system — send friend requests, accept/reject responses, and manage connections
User profiles & roles — profile management, email/password updates, shareable public profiles, and an admin dashboard with role-based access control
Posts — create, update, soft-delete and restore posts, like/unlike functionality
Comments — full CRUD on comments linked to posts
Real-time chat — one-to-one messaging with Socket.io for instant delivery and live notifications
Dual API design — REST endpoints alongside a GraphQL API (with GraphQL Playground) for flexible, efficient data fetching
Media uploads — image handling via Cloudinary and Multer
Security — Helmet for secure headers, rate limiting, Joi validation, bcrypt password hashing, and encrypted sensitive data (crypto-js)
Email notifications — automated emails via Nodemailer (confirmations, password resets)
Tech stack: Node.js, Express.js, MongoDB (Mongoose), GraphQL, Socket.io, JWT, Google OAuth, Cloudinary, Multer, Joi, Helmet, Nodemailer, bcrypt.
This project deepened my understanding of building both REST and GraphQL APIs side by side, real-time communication with WebSockets, and implementing robust authentication flows (including email verification and password recovery) from scratch without a framework like NestJS handling it for me.