A pet project to practice developing a real-life web app from scratch.
The queue manager that helps operators serve bank clients in order of appearance.
Deployed at: https://queue-man.up.railway.app/
- Designed a diagram of the future application, reflecting entities of the domain and their interaction
- Designed a database in 5th normal form
- Implemented the web app using Django, ClassBasdViews and object level permissions (4000 lines of code written)
- The app covered with 141 tests (unit & end-to-end)
- Used complex (20+ lines) database queries through Django ORM
- Reduced the quantity of DB queries per page load by 4 times using DjangoDebugToolbar, select/prefetch_related()
- Analyzed PostgreSQL query plans and accelerated them using composite indexes
- The code refactored to follow DRY, KISS
This project was built using these tools:
Tool | Description |
---|---|
Django | Web framework |
Django ORM | Database-abstraction API |
PostgreSQL | Database management system |
Bootstrap | CSS framework |
Docker | Container-based platform for building apps |
Poetry | Python dependency manager |
Pytest | Testing framework |
Django Debug Toolbar | DB query analysis tool |
Flake8 | Linter to check code style |
Code Climate | Clean Code verification system |
GitHub Actions | Continuous Integration (CI) |
Railway | Deployment platform |
WhiteNoise | Static file delivery service |
Rollbar | Error logging & tracking service |
The application stores data using PostgresSQL (connected via DATABASE_URL).
- make install - to install dependencies
- make migrate - to migrate a database
- make start - to start the app
- make dev - to start app on development web server
- make test - to run tests
(more service commands can be found in Makefile)
Example of a multi-line database query
BD query analysis using Django Debug Toolbar
Speed up queries using indexes