A full-stack, real-time chat application:
- Frontend: React + Vite (JSX), Tailwind CSS, Socket.IO client, React Router
- Backend: Node.js + Express, Socket.IO, MongoDB (Mongoose), JWT auth, Nodemailer
- Sign up, log in, log out
- Email verification on signup (real email via Gmail SMTP, or console-logged in dev if unconfigured)
- Forgot password / reset password via emailed link
- Add other users and start 1:1 conversations
- Real-time messaging (Socket.IO) β text + image messages
- Typing indicators, online/offline presence, "last seen"
- Profile page: avatar upload, phone number, bio
- Settings page: log out
chatapp/
βββ client/ React frontend (Vite)
β βββ src/
β β βββ api/ API call wrappers (axios) β one file per backend resource
β β βββ context/ AuthContext, SocketContext (global state)
β β βββ hooks/ useConversations, useMessages (data + real-time logic)
β β βββ components/ Reusable UI building blocks
β β βββ pages/ Route-level screens
β β βββ utils/ Formatting helpers
β βββ .env VITE_API_URL β where your backend lives
β
βββ server/ Express backend
βββ src/
β βββ config/ DB + Cloudinary setup
β βββ models/ Mongoose schemas: User, Conversation, Message
β βββ controllers/ Route handler logic
β βββ routes/ Express routers
β βββ middleware/ Auth guard, file upload handling
β βββ sockets/ Socket.IO real-time event handlers
β βββ utils/ JWT helpers, email sending, demo data seeder
βββ .env All secrets and config (DB, JWT, email, uploads)