Thank you for considering a contribution! Anything from typo fixes to new features is welcome. Please skim this short guide before opening a PR.
- Search the issue tracker first — your bug may already be filed.
- If not, open a new issue and include:
- What you did, what happened, what you expected to happen.
- The exact error message or screenshot.
- Your environment: Docker version, host OS, browser.
- Relevant log output (
docker compose logs --tail=200 web).
Open an issue with the enhancement label. Describe the use case first, the implementation idea second — the why is more useful than the how.
- Fork the repo and create a topic branch from
main:git checkout -b feature/short-description
- Make your change. Keep commits focused — one logical change per commit.
- Run the test suite locally:
…or without Docker, against SQLite:
docker compose exec web python manage.py test tracker
DJANGO_SECRET_KEY=dev DJANGO_DEBUG=True \ python manage.py test tracker --settings=test_settings - Add tests for new behaviour. The bar isn't 100 % coverage but new code paths should be exercised.
- Run Django's system checks:
python manage.py check - Push your branch and open a pull request against
main. Describe what changed and why. Link related issues.
- Python: follow PEP 8 and the project's existing style. Type hints on function signatures where they aid clarity.
- Django: prefer Django's built-ins (forms, ORM, auth) over reinventing.
- Templates: Bootstrap 5 utility classes, minimal inline styles.
- Keep dependencies lean — adding a package needs a justification.
Please do not open a public issue for security vulnerabilities. Email the maintainer (see the project page on GitHub for contact info) with a description and reproduction steps. We'll acknowledge within a few days.
By contributing you agree that your contributions will be licensed under the project's GNU GPL v3.