A practical, low-friction chat system that requires no account creation or login. Users get partial anonymity — just enter a nickname and the name of the room they want to join.
- If the room doesn't exist, it's created automatically.
- If it already exists, the full message history is retrieved for the new participant.
The goal is to provide a simple, fast and accessible communication platform while preserving participants' partial anonymity.
- No sign-up or login required
- Nickname-based partial anonymity
- Real-time messaging via WebSocket
- Message deletion function
- Reply message function
- Automatic room creation
- Persistent message history per room
- Room deletion function
- image sending
- online users count
- Typing indicator
- Join notification ex:"Cartman has just joined"
- Django Rest Framework
- Django Channels
- WebSocket
- React
- Docker
- Redis
- SQLite (Development)
- PostgreSQL (Production)
- TDD
┌──────────────────────┐
│ React │
│ Frontend │
└──────────┬───────────┘
│
HTTP / WebSocket
│
┌──────────▼───────────┐
│ Django │
│ │
│ ┌────────────────┐ │
│ │ Django REST │ │
│ │ Framework │ │
│ └────────────────┘ │
│ │
│ ┌────────────────┐ │
│ │ Django Channels│ │
│ └────────────────┘ │
└───────┬───────┬───────┘
│ │
│ │ WebSocket
│ │ Channel Layer
│ ▼
│ ┌─────────┐
│ │ Redis │
│ └─────────┘
│
│ Persistence
▼
┌───────────────────┐
│ PostgreSQL │
└───────────────────┘
All infrastructure is currently hosted on free-tier services (which is why it's a bit slow 😭):
| Service | Provider |
|---|---|
| Frontend & Backend | Render |
| Redis | Upstash |
| Database | Supabase |
Locally, this setup is replaced by a Dockerized Redis instance and SQLite — see Installation below.
- Python 3.10+
- Node.js 18+
- Docker Desktop (with WSL2 enabled, if on Windows)
Create a .env file inside backend/ with at least:
SECRET_KEY=your-secret-key
DEBUG=True
REDIS_URL=redis://localhost:6379
DATABASE_URL=sqlite:///db.sqlite3
For production,
REDIS_URLandDATABASE_URLshould point to your Upstash and Supabase instances instead. Adjust this list to match whatsettings.pyactually reads.
docker pull redis
docker run --name redis-chat -p 6379:6379 -d redisMake sure Docker Desktop is running before this step. To confirm the container is up:
docker psIf you already created the container before, just start it again:
docker start redis-chatTo stop it later:
docker stop redis-chatpython -m venv venvWindows
venv\Scripts\activatemacOS / Linux
source venv/bin/activateBackend
pip install -r requirements.txtFrontend
cd frontend
npm installcd backend
python manage.py migrateStart the Django server:
cd backend
python manage.py runserverIn a new terminal, start the React app:
cd frontend
npm run dev- SQLite Viewer (VS Code extension)
- WebSocket Tester: https://hoppscotch.io/realtime/websocket
Issues and pull requests are welcome. Please open an issue first to discuss what you'd like to change.
This project is licensed under the MIT License — see the LICENSE file for details.
Made by Rian Aguiar

