An onboarding platform designed to help new employees integrate smoothly into a company, built with Django, PostgreSQL, and Docker.
Run docker compose up, seed demo data (python manage.py seed_demo), then capture UI shots with Playwright:
pip install playwright
python -m playwright install chromium
python scripts/capture_screenshots.py| Landing page | Login |
|---|---|
![]() |
![]() |
| Dashboard | Tasks | Competency paths |
|---|---|---|
![]() |
![]() |
![]() |
| Calendar | Profile | Chat |
|---|---|---|
![]() |
![]() |
![]() |
| Dashboard | Task management | Chat |
|---|---|---|
![]() |
![]() |
![]() |
| Mentor ranking |
|---|
![]() |
Demo accounts are printed by seed_demo (see Database Seeding Guide).
Regenerate with python manage.py db_diagram (see docs/database/README.md).
If your migrations fail to apply or you encounter inconsistent migration history, you may need to reset the PostgreSQL database completely.
To do this, remove the entire Postgres Docker volume (
docker compose down -v
docker compose up -dAfter bringing the containers back up, re-run your migrations:
docker compose exec web python manage.py migrategit clone https://devtools.wi.pb.edu.pl/bitbucket/scm/th2025gr1/onboaarrrd.git
cd OnboAArrrdIf you want to automatically push to both Bitbucket and GitHub,
you need to update your local .git/config file.
You can either edit .git/config manually or use the command line.
Option A – Command line
git remote set-url --add --push origin https://devtools.wi.pb.edu.pl/bitbucket/scm/th2025gr1/onboaarrrd.git
git remote set-url --add --push origin https://github.com/uxabix/Django-OnboAArrrd.gitOption B – Manual edit
Open .git/config and make sure the [remote "origin"] section looks like this:
[remote "origin"]
url = https://bitbucket.org/your-university/onboaarrd.git
fetch = +refs/heads/*:refs/remotes/origin/*
pushurl = https://devtools.wi.pb.edu.pl/bitbucket/scm/th2025gr1/onboaarrrd.git
pushurl = https://github.com/uxabix/Django-OnboAArrrd.gitRun:
git remote show originYou should see two Push URLs — one for Bitbucket and one for GitHub.
Now, every time you push:
git push --allGit will automatically send all branches and commits to both repositories 🎯
Copy .env.example to .env:
cp .env.example .envRun containers:
docker compose up --buildAvailable services:
- Django + Channels: http://localhost:8000
- Admin panel: http://localhost:8000/admin
- PostgreSQL: http://localhost:5050/
Run migrations:
docker compose exec web python manage.py makemigrations
docker compose exec web python manage.py migrateCreate a superuser:
docker compose exec web python manage.py createsuperuserdocker compose exec web python manage.py collectstaticAll commands should be executed inside the web container. Examples:
docker compose exec web python manage.py shell
docker compose exec web python manage.py makemigrations
docker compose exec web pytestdocker compose downAPI and module documentation are generated with Sphinx using sphinx.ext.napoleon for Google-style docstrings. Source lives under docs/ (conf.py, index.rst, reference.rst). HTML output is written to docs/_build/ (ignored by Git).
Sphinx and the Read the Docs theme are listed in requirements.txt. After dependencies are installed in your environment (or rebuilt into the web image), you do not need extra packages.
From the repository root:
pip install -r requirements.txt
sphinx-build -b html docs docs/_buildOpen docs/_build/index.html in a browser.
docker compose exec web sphinx-build -b html docs docs/_buildIf the image was built before Sphinx was added to requirements.txt, rebuild the image or run pip install -r requirements.txt inside the container once.
docs/conf.pysetsDJANGO_SETTINGS_MODULEand callsdjango.setup()so autodoc can import project code. Placeholder PostgreSQL env vars are set when missing so the settings module loads during a doc build without a real database.- API modules are pulled in via
docs/reference.rst(.. automodule:: ...).
All documentation strings (module, class, function, and important methods) should be written in English and follow the Google Python Style Guide for docstrings, as interpreted by Napoleon (see Google style examples).
- Module docstring — First statement in the file: one or two sentences on what the module is for.
- Public APIs — Document views, forms, management commands, consumers, and non-trivial helpers with a clear summary line and, when useful,
Args,Returns,Raisessections. - Django models — Summarize behavior in the class docstring. Prefer
help_texton fields for UI-oriented detail. Avoid listing every model field again under anAttributes:block and expecting autodoc to list the same fields: that duplicates entries in Sphinx. UseAttributes:only for non-ORM descriptors that are not already emitted as model fields. - Privacy — Leading underscore for internal helpers; add a short docstring when the logic is not obvious from the name alone.
- User-facing UI copy — Template strings and messages may stay in the product language (e.g. Polish); code comments and docstrings stay in English for consistency and tooling.
When you add or change public Python APIs, update docstrings in the same change so sphinx-build stays accurate.
Tests use pytest with pytest-django. Configuration lives in pytest.ini at the repository root (DJANGO_SETTINGS_MODULE, discovery paths under */tests/).
Pytest loads OnboAArrrd.settings, which targets PostgreSQL (same as the app). Migrations include PostgreSQL-specific SQL, so the suite is oriented toward running after migrate against a real server (for example the web container).
Inside Docker (recommended):
docker compose exec web pytestVerbose output:
docker compose exec web pytest -vvLocally, export the same POSTGRES_* and SECRET_KEY values as in .env, install dependencies, then:
pip install -r requirements.txt
pytestYou can still use Django’s runner if needed:
docker compose exec web python manage.py testCoverage.py is invoked via the pytest-cov plugin. Branch coverage and source roots are defined in .coveragerc (application packages under accounts/, chat/, onboarding/, OnboAArrrd/, core/; migrations and */tests/* are omitted).
Terminal summary with missing lines:
docker compose exec web pytest --cov --cov-config=.coveragerc --cov-report=term-missingHTML report (opens in a browser as htmlcov/index.html):
docker compose exec web pytest --cov --cov-config=.coveragerc --cov-report=htmlGenerated coverage artifacts (htmlcov/, .coverage, coverage.xml) are ignored by Git.
- Placement — Keep tests beside their app in
<app>/tests/test_*.py(already wired inpytest.ini). - Database — Mark tests that hit the ORM or Django DB with
@pytest.mark.django_db. Prefer fast, focused examples with minimal rows. - Pure logic — When testing helpers that only need attribute access, use
types.SimpleNamespace(seeaccounts/tests/test_decorators.py) instead of building full model graphs. - Naming — Files
test_<area>.py, functionstest_<behavior>()so discovery stays predictable. - Documentation — Use English module docstrings and short function docstrings in Google style (same tone as production code).
- Assertions — One logical behavior per test; use
pytest.raisesfor expected errors andparametrizefor compact scenario tables. - Stability — Avoid coupling to wall-clock dates when possible; when testing deadlines, anchor to
django.utils.timezoneinstead of baredatetime.today(). - Database-backed tests — Prefer
@pytest.mark.django_dbonly when the behavior truly needs the ORM. Run them against PostgreSQL (Docker stack) because migrations are not SQLite-compatible.
This project provides modular seeders and a dedicated demo command for realistic onboarding data. The default demo dataset is intentionally compact (around 10 users) so it is easy to inspect in UI.
All seed commands are implemented as Django management commands under core/management/commands/.
Run the dedicated demo command:
docker compose exec web python manage.py seed_demoReset previous seed data and seed again:
docker compose exec web python manage.py seed_demo --reset-firstYou can still run modular seeders via:
python manage.py seed <seeder_name> [--count ]
<seeder_name>: The name of the seeder module to run (see the list below).--count <number>: Optional parameter to control how many records to create. Default is10.
To run multiple seeders sequentially:
python manage.py seed roles users badges paths tasks quiz user_paths user_tasks task_status grades reports messages --count 10
- ~10 deterministic users with roles: Admin, HR, Mentor, Student.
- Real login credentials are printed to the console after seeding.
- Students are linked to mentors; if superusers exist, at least one student is linked to a superuser too.
- Competency paths and tasks are realistic (not random placeholders).
- User tasks include mixed deadline scenarios and status progressions:
- completed on time
- completed late
- overdue (not submitted)
- in progress
- to do
- Mentor stars are generated based on completed tasks.
- Grades, reports, badges, quiz data, and chat messages are generated in moderate volume for demo purposes.
Run full demo data setup:
docker compose exec web python manage.py seed_demoRun cleanup + full demo setup:
docker compose exec web python manage.py seed_demo --reset-firstRun selected modular seeders:
docker compose exec web python manage.py seed roles users paths tasks user_paths user_tasks task_status --count 10You can remove seeded data with clear_test_data.
The command is designed to clean both current demo seed data and legacy seed records created by older seeders.
Run the command:
docker compose exec web python manage.py clear_test_dataCleanup with preserved seed users:
docker compose exec web python manage.py clear_test_data --keep-usersThe cleanup command removes:
- Seed users from
TestUsersand legacy seed emails (@test.com,@onboard.local) - Related chat and onboarding data (
Messages,User_tasks,Task_status,User_paths,Reports,User_grade,User_badges) - Legacy and demo-generated paths/tasks/badges (including old placeholder records like
Competency Path *,Task *,Badge *)
Notes:
- Superusers are not deleted by cleanup.
- The command uses a DB transaction for safe cleanup.
- Seeders are modular: you can run each one independently in any order, but some depend on others. For example:
usersdepends onroles.tasksdepends oncompetency_pathsandtask_types.quizzesdepend ontasks.user_tasksdepends onusersandtasks.
- Demo seeding is deterministic and focused on product-like scenarios.
- For day-to-day work, prefer
seed_demoover random/large datasets.
Use seed_demo for a fast, realistic environment that showcases key flows (profiles, mentorship, tasks, deadlines, stars, chat). Use modular seed only when you need custom partial data.
- Django, Channels
- PostgreSQL
- Docker
- GitFlow
- Sphinx
- pytest, pytest-django, pytest-cov
Early development stage.
See ROADMAP.md for the roadmap.
No license yet. All rights reserved by the authors.













