A full-stack messaging application with group chats, media uploads, and user authentication.
Live Demo: messaging-app-rzgu.onrender.com
Messaging App is a full-stack chat application where users can sign up, create or join group conversations, send text messages, and upload media. Built with a React frontend and a Node.js + Express backend connected to a PostgreSQL database hosted on Supabase.
- User authentication via Passport.js
- Create and join group conversations
- Send and receive messages
- Upload and share media attachments via Multer
- Persistent sessions and global state management
- Fully typed with TypeScript
| Category | Technology |
|---|---|
| Framework | React + Vite |
| Language | TypeScript |
| Styling | Tailwind CSS |
| Routing | React Router |
| Forms | React Hook Form + Zod |
| UI Components | Radix UI |
| State Management | Zustand |
| Backend | Node.js + Express.js |
| Database | PostgreSQL |
| Storage | Supabase |
| File Uploads | Multer |
| Auth | Passport.js |
- Node.js
v18+ - npm or your preferred package manager
- A running PostgreSQL database
- A Supabase project (for storage)
# Clone the repository
git clone https://github.com/nofuenterr/messaging-app.git
# Navigate into the project directory
cd messaging-app
# Install dependencies for both client and server
npm install
npm install --prefix client
npm install --prefix serverCreate a .env file inside the server directory and fill in the required values:
# App
NODE_ENV=development
PORT=3000
CLIENT_URL=http://localhost:5173
# Database (choose one or both depending on your setup)
DATABASE_URL=
DB_HOST=localhost
DB_USER=postgres
DB_PASSWORD=
DB_NAME=
DB_PORT=5432
# Auth
ADMIN_PASSWORD=
SECRET=
JWT_SECRET=
# Supabase
SUPABASE_URL=
SUPABASE_ANON_KEY=Create a .env file inside the client directory and fill in the required values:
VITE_API_URL=http://localhost:3000/# Start both client and server concurrently in development mode
npm run dev# Build the client for production
npm run build
# Start the production server
npm run start- Per-group and main profile loading skeleton
- Message attachments
- Blocked user warning on groups
- Copy, forward, bump, and pin message features
- Radix Scroll Area on skeleton/loading pages
- Seen indicator
- Online indicator
- Live chatting
- Delete message (for you only)
- Loading states on buttons
- Disable buttons while loading to prevent duplicate actions
This project is for personal/portfolio use. I do not own the rights to any third-party assets used.
*Developed by RR Nofuente*