4bcf88b9ee0894bae40bfa160ff2a976b4a8278d
Workdock
Workdock is the dockerized business operations platform that powers internal company apps such as onboarding, offboarding, requests, integrations, backups, and future modular workplace tools.
Services
web: Django app (http://localhost:8000)worker: Celery async tasksdb: PostgreSQLredis: task brokermailhog: local email inbox (http://localhost:8025)
Quick start
- Copy env file:
cp .env.example .env
- Fill
.envvalues (reuse your current credentials privately). - Start services:
docker compose up --build
- Open app:
http://localhost:8000/onboarding/new/
- Open test mailbox:
http://localhost:8025
Translations
This project now uses Django's standard i18n workflow for long-term maintainability.
- Extract/update message catalogs:
docker compose exec -T web django-admin makemessages -l en
- Compile translations:
docker compose exec -T web django-admin compilemessages
- Add more languages the same way:
docker compose exec -T web django-admin makemessages -l de
- Convenience targets:
make i18n-update-enmake i18n-update-demake i18n-compile
Notes:
gettextis installed in the Docker image, socompilemessagesworks inside the container.- Translation files live under
backend/locale/. - Core fixed UI is bilingual now.
- Dynamic builder-driven content is now bilingual for:
- Form Builder option labels
- Form Builder field label/help-text overrides
- Intro Builder checklist item labels
- Admin-configured email templates are now bilingual for:
- notification template subjects and bodies in DE/EN
- notification rule custom subjects and bodies in DE/EN
- welcome email subject and body in DE/EN
- request language capture on onboarding/offboarding to choose the correct email language
- Language stability hardening is in place:
- onboarding/offboarding request records normalize
preferred_languageat model-save time - both request tables now have a database default of
de
- onboarding/offboarding request records normalize
- Generated PDF fixed text is now bilingual for:
- onboarding PDF
- offboarding PDF
- intro PDF
- live introduction protocol PDF
- Remaining bilingual gap is mostly long-form handbook/wiki copy and a few secondary admin/help texts.
- CI now validates that translation catalogs compile successfully on push and pull request.
- Automated bilingual smoke coverage now verifies DE/EN request language capture plus English email-template selection for onboarding and welcome flows.
- Dependency stability hardening pins
chardet==5.2.0sorequestsruns without compatibility warnings in the Docker stack.
Current implemented scope
- Onboarding form with labels mapped from your CSV schema.
- Stores requests in PostgreSQL.
- Generates a personalized PDF (simple first version).
- Sends notification email via Celery.
- Optional Nextcloud upload hook (toggle with
NEXTCLOUD_ENABLED=1).
Staging E2E verification
Run a real workflow verification (onboarding + offboarding), including PDF checks and optional email/Nextcloud evidence:
- Default (auto MailHog detection, Nextcloud check enabled if configured):
docker compose exec -T web python manage.py run_staging_e2e_check
- With cleanup (removes generated E2E DB rows/PDFs after run):
docker compose exec -T web python manage.py run_staging_e2e_check --cleanup
- Force MailHog verification mode:
docker compose exec -T web python manage.py run_staging_e2e_check --email-check mailhog --mailhog-api-url http://mailhog:8025/api/v2/messages
- Skip Nextcloud existence checks:
docker compose exec -T web python manage.py run_staging_e2e_check --skip-nextcloud
Backup and restore
Use the repo-level scripts so database and media backups stay consistent.
- Create a backup bundle:
make backup-create
- Verify a backup non-destructively:
make backup-verify BACKUP_DIR=backend/backups/backup_YYYYmmdd_HHMMSS
- Real restore:
./scripts/backup_restore.sh --yes-restore backend/backups/backup_YYYYmmdd_HHMMSS
What is included:
- PostgreSQL custom-format dump:
db.dump - media archive:
media.tar.gz - metadata file and SHA256 checksums
- default storage path:
backend/backups/
Verification behavior:
- restores the dump into a temporary verification database
- extracts media into a temporary directory
- checks that the restored DB and media structure are readable
Release validation
Use one local gate before shipping larger changes:
make release-validate
What it runs:
- Django system checks
- full workflow test suite
- translation compile
- collectstatic
- latest-backup verification
- production-like onboarding/offboarding smoke check
CI mirrors this split in two layers:
- fast Python validation
- Docker-based release gate with backup verification and smoke workflow checks
Description
Languages
Python
56%
HTML
28.1%
CSS
12%
JavaScript
2.6%
Shell
1.2%