Day one hits and the new hire gets a PDF, a Slack channel invite, and a sticky note that says "ask Sarah about benefits." Sarah is on vacation. HR meant well; the experience says nobody planned the first two weeks.
ChiefOnboarding (~935 GitHub stars, AGPL-3.0, Python/Django) is an open-source employee onboarding platform: build sequences, pre-boarding pages, to-dos, courses, and introductions, then deliver them through a web portal or a Slack bot (either channel works alone). Integrations can provision accounts and fire webhooks; upstream lists connectors at integrations.chiefonboarding.com. Docs live at docs.chiefonboarding.com.
What it actually does
- Sequences — drip tasks over time or when earlier items complete, so week one is not a wall of links.
- Pre-boarding — welcome pages and forms before the start date.
- To-dos and admin tasks — new hires and colleagues see what still needs doing; HR sees the same timeline.
- Resources and courses — searchable knowledge base plus lightweight training paths.
- Badges and introductions — nudge completion and schedule meet-the-team moments.
- Localization and time zones — multiple languages; per-hire timezone so Slack pings land in waking hours.
- Branding — logo, colors, email templates, bot customization so it reads as your program, not a vendor demo.
Why self-host?
HR data stays on your stack. Names, forms, and progress live in your Postgres, not a US SaaS row you cannot export cleanly.
Slack without a second data landlord. You still need Slack's terms for messages, but the onboarding record and integrations run on infrastructure you control.
AGPL-3.0 with source access. Fine for internal HR; if you offer onboarding-as-a-service to clients, read copyleft obligations with counsel.
Canadian angle. A Beauharnois or Toronto VPS hosting ChiefOnboarding plus encrypted backups fits teams documenting where employee onboarding data resides under PIPEDA-style reviews.
ChiefOnboarding also sells hosted plans; self-hosting is the option when price, residency, or customization win over convenience.
Deployment sketch
Official path: Docker Compose with PostgreSQL and the chiefonboarding/chiefonboarding image on port 8000. Set SECRET_KEY, DATABASE_URL, ALLOWED_HOSTS, and BASE_URL; optionally ACCOUNT_EMAIL and ACCOUNT_PASSWORD for the first admin instead of reading credentials from container logs. Caddy or your existing nginx reverse proxy terminates TLS. Health check: /health.
services:
db:
image: postgres:latest
environment:
POSTGRES_DB: chiefonboarding
POSTGRES_USER: postgres
POSTGRES_PASSWORD: CHANGE_ME
volumes:
- pgdata:/var/lib/postgresql/data
web:
image: chiefonboarding/chiefonboarding:latest
environment:
SECRET_KEY: CHANGE_ME
DATABASE_URL: postgres://postgres:CHANGE_ME@db:5432/chiefonboarding
ALLOWED_HOSTS: onboarding.yourdomain.ca
BASE_URL: https://onboarding.yourdomain.ca
depends_on:
- db
For uploads at scale, docs support S3-compatible storage (MinIO on the same Compose stack is a documented pattern). Back up Postgres before image upgrades; upstream recommends docker compose pull after down.
Who it's for (and who should skip it)
Good fit: SMBs and agencies hiring regularly; distributed teams living in Slack; HR leads who want sequences without enterprise LMS complexity.
Skip it: if you need full performance management or payroll in the same product; if you will not run Postgres backups; if a spreadsheet and a Notion page honestly cover your hiring volume.
Hosting in Canada
ChiefOnboarding is a modest Docker footprint next to Postgres: TLS, nightly DB dumps, and locked-down Slack app credentials in env vars, not git.
Talk with Swift Host for a Canadian VPS with Docker, domain setup, and backup scope for HR onboarding data. We are in St. Albert and actually answer the phone.