Real-time messenger powered by Socket.IO
- Node.js v20
- PNPM
- Docker (dragonflydb - 3.5GB memory / 4 cores)
- Frontend - React.js, TailwindCSS, React-Query
- Backend - Express, socket.io, PostgreSQL, DragonflyDB
- Spin up the entire stack (DragonflyDB, PostgreSQL, React.js, Node.js)
pnpm docker:up
Make sure the ports
6379
,5432
and5000
are not occupied
- Seed database
pnpm docker:db:seed
-
Go to http://localhost:5000
-
Stop docker containers
pnpm docker:down
- Spin up PostgreSQL and DragonflyDB
docker compose up -d
Make sure the ports (postgres: 5432, dragonfly: 6379) are open for connection
- Install dependencies
pnpm i
- Run migrations
pnpm --filter server migration:run
- (Optional) Seed database
pnpm --filter server seed
- Run development server (web & server)
pnpm dev
- Go to http://localhost:3000
- Run playwright e2e tests
pnpm e2e:test
- Run playwright e2e tests in UI mode
pnpm --filter e2e test:ui
- Run playwright e2e test generator
pnpm --filter e2e test:codegen
- Run web unit tests
pnpm --filter web test
- sign up, login and logout
- jwt user authentication/authorization
- create group
- join groups
- realtime messaging
- typing indicators
- socket.io cluster adapter integration
- dragonflydb implementation (typing users, online users)
- member online status
- realtime member list update
- infinite scroll cursor pagination (messages/groups/members)
- tanstack react-query integration
- add members
- realtime unread count
- leave group, transfer ownership, delete group
- delete group
- alert component
- direct message
- delete message
- reply to message
- date separator
- confirm dialog
- message receipts
- e2e encryption
- playwright e2e tests for chat
- switch to postgresql (support transaction)
- minimal swagger ui
- keploy api test generation
- private groups - invite/add/delete members
- notifications
- Aseer KT - aseerkt.com