https://vuetify-chat.vercel.app/
Live Demo: https://www.ponderpal.chat
Swagger UI: https://api.ponderpal.chat/docs
Admin: https://api.ponderpal.chat/admin/ (login: bekzod
, password: bekzod
)
Frontend with Vue 3 and Vuetify 3, see repo
- FastAPI, Websockets, Pydantic 2
- Postgres (asyncpg), async Redis (PubSub and Cache)
- SQLAlchemy 2
- Database migrations with Alembic
- Poetry for dependency management, containerization with Docker/docker-compose
- Linting and Formatting with Ruff
- Fully asynchronous: FastAPI, Postgres, Redis
- JWT HTTP-only cookies authentication (access, refresh tokens)
- Horizontal Scalability with Redis PubSub
- Rate Limiting (Throttling)
- FastAPI background tasks:
- uploading photos to cloud
- updating non-essential info
- Message status confirmation: sending, sent and read
- Read status tracking with one field per user per chat (last read message) instead of tracking individual message read status
- User status tracking: online, inactive and offline
- User
is typing
tracking - Google Oauth2 authentication:
- Frontend retrieves access token
- Backend verifies and gets user data
- Store files in AWS S3 bucket in production and StaticFiles in local development
- Modern Admin panel with
sqladmin
- Configure necessary variables in
src/config.py
- Create network:
make network
- Build and run:
make build-up
(runs on port: 8001) - Apply migrations:
make upgrade
- Follow logs:
make logs
- Run tests:
make test
![Screenshot 2024-02-18 at 18 37 11](https://private-user-images.githubusercontent.com/104051317/305718696-27df9a18-5131-4e39-a80e-103f8b9ba5e8.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzg5MTQ2MDUsIm5iZiI6MTczODkxNDMwNSwicGF0aCI6Ii8xMDQwNTEzMTcvMzA1NzE4Njk2LTI3ZGY5YTE4LTUxMzEtNGUzOS1hODBlLTEwM2Y4YjliYTVlOC5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjA3JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIwN1QwNzQ1MDVaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1lODk2ZTBlNWIyZWIwMDE0NDcyZjdkZGY3ZDM0M2Q5M2QyMDU5YzNkZjVkYTIxZWQxZGM0YTlmZTA3NjhlY2MxJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.uFzs8huQ-wkGtSRi20tOlYWSKUq_vuh3bmM0hgaB6FM)