A messaging application built with Node.js, Express and PostgreSQL. Developed as part of The Odin Project's Node.js curriculum, this app demonstrates full-stack capabilities including authentication, real-time communication, and structured database interactions via Prisma ORM.
- User registration and authentication
- PostgreSQL database integration via Prisma
- Secure password handling (hasing + salting) with bcrypt
- Timestamps for messages
- Profile customisation
- Image attachments using Cloudinary's hosting
- Basic group chat functionality
- Display of online users
- Real time simulation
- Node.js
- Express.js
- PostgreSQL
- Prisma ORM
- dotenv
- bcrypt/uuid
- Multer middleware
- JWT strategy
- CORS
- React
- Tailwind
- Shadcn/UI
- Lucide-react
messaging-app/
│
├── server/ # Express backend
│ ├── assets/ # Image folder
│ ├── controllers/ # Middleware folder
│ ├── db/ # Prisma/SQL queries
│ ├── routes/ # Route definitions
│ ├── prisma/ # Prisma schema and migrations
│ ├── utils/ # Helper js functions
│ ├── app.js # Express app setup
│ └── .env # Environment variables
│
├── client/ # React + Tailwind + Shadcn/UI frontend
│
└── README.md # Project overview
# Clone the repo
git clone https://github.com/jonorl/messaging-app.git
cd messaging-app
# Navigate to backend
cd server
# Install dependencies
npm install
# Set up database and run migrations
npx prisma migrate dev --name init
# Start the server
node --watch app.jsServer runs at: http://localhost:3000
# Navigate to frontend
cd client
# Install dependencies
npm install
# Start the client
npm run dev# Initiate db
npx prisma migrate dev --name initClient runs at: http://localhost:5173
INSERT INTO "User" (
id,
email,
name,
profilePicture,
passwordHash,
createdAt
) VALUES (
'8d7118e1-0f6c-466c-9c17-e7c8bc42af8e',
'[email protected]',
'Robot',
'https://res.cloudinary.com/dqqdfeuo1/image/upload/v1748510935/SystemShock2-Shodan_acqa9v.png',
'$2b$10$9LRDo5nLio4zVN6XTyp4JOrLpU.guTWlW8TEkuVelPK0RN5TtW2jC',
NOW()
);DATABASE_URL="postgresql://USER:PASSWORD@HOST:PORT/DATABASE_NAME"
JWT_SECRET="yourSecretWord"
PORT="3000"
ROBOT="8d7118e1-0f6c-466c-9c17-e7c8bc42af8e"
CLOUDINARY_CLOUD_NAME=yourCloudName
CLOUDINARY_API_KEY=yourCloudinaryAPIKey
CLOUDINARY_API_SECRET=yourCloudinaryAPISecretVITE_LOCALHOST=http://localhost:3000🚀 Deployment
-
Frontend: Netlify --> https://message-app-top.netlify.app/
-
Backend: Render --> https://messaging-app-g6s5.onrender.com/
-
PostgreSql: Neon --> https://neon.tech/
-
Image Hosting: Cloudinary --> https://cloudinary.com/
- Group Chat Enhancements: Group titles, admin roles, and better user management
- Message editing and deletion support
Jonathan Orlowski *GitHub *LinkedIn
📚 This project is part of The Odin Project, a free and open-source curriculum for aspiring full-stack web developers.
