Admin and Onboarding
This page is for org admins running customer rollouts or admin tasks.
Admin work is split across a few guides:
- This page: organizations, members, theme, and the onboarding seed import.
- Modules and industry presets: turn features on and off for the org, or apply a one-click industry preset.
- Account security: two-factor authentication and recovery codes.
- Data export and invites: full org data export as a ZIP, and inviting new members by link.
- Trust center: publish a public compliance page for your org.
- Workflow rules: automatic tasks and notifications for overdue work.
Organization settings
/organizations lists every org you can access. Each card has a ⋯ menu:
- Select - switch the active org to this one.
- Edit - name, description, industry, size, country.
- Manage members - opens the Members dialog (see below).
- Delete - irreversible. Cascades into every linked resource.
Manage members dialog
Opened from the ⋯ → Manage members. Shows:
- A list of every active membership: avatar, name, email, role select, deactivate icon.
- Change a member's role inline by picking from the role dropdown.
- Click the red ✕ icon to Deactivate a membership (sets
is_active=false). The user no longer sees the org in their switcher. - Bottom row: Invite existing user - type an email and pick a role.
Resolves the email to a
users.idand creates amembershipsrow.
Inviting someone who has no account yet? Use an invite link instead. It works for brand-new users and enforces the org's seat limit. See Data export and invites.
Theme / brand color
Top bar → theme menu (the half-moon / sun icon). Org admins see a 12-color swatch grid below the Light/Dark/System options:
- Blue (default), Cyan, Teal, Green, Yellow, Orange, Red, Magenta, Purple, Cool Gray, Warm Gray, Black.
Click a swatch → the choice persists to organizations.theme_primary_color
(hex). Every user in the org sees the new color on next render. Realtime
broadcasts the change, so other tabs/users update without a manual reload.
Click the swatch again or the Reset option to clear the override and fall back to default Blue.
Onboarding seed import
For new customer orgs, you can bulk-create departments, processes, and chains from a JSON seed.
Page: /onboarding.
Steps
- Side nav (or direct URL) → Onboarding.
- Click Load small sample or Load large sample to populate the editor with a starter JSON. Or paste your own JSON in the textarea.
- Click Validate. The validator counts how many rows would be created (e.g. 21 departments, 472 processes, 0 chains) and surfaces any structural errors.
- Click Apply to current organization.
- The progress chip shows Applying…. The import takes 20-60 s for the large sample (472 rows of processes inserted serially).
- On completion, a snackbar confirms: Imported 21 departments, 472 processes, 0 chains. The result panel shows new vs existing counts.
- Re-runnable - existing rows are skipped by code/name match. Re-running only adds anything new since last run.
Seed format (abbreviated)
{
"departments": [
{ "code": "HQ", "name": "Headquarters", "sort_order": 0 },
{ "code": "DGO", "name": "DG Office", "parent_code": "HQ" }
],
"processes": [
{
"code": "DGO-04-01",
"name": "Strategic Planning",
"department_code": "DGO",
"owner_email": "amos@example.com",
"owner_label": "DG"
}
],
"chains": [
{
"name": "DG Office process approval",
"steps": [
{ "approver_type": "department_head" },
{ "approver_type": "user", "approver_email": "amos@example.com" }
],
"assignments": [
{ "target_type": "department", "target_code": "DGO", "priority": 100 }
]
}
]
}
Full schema: see lib/services/onboarding_service.dart (apply()).
Test it
- Click Load small sample. Validate shows 8 departments.
- Apply. After ~5 s, snackbar confirms
Imported 8 departments, 0 processes, 0 chains. /departments shows the 8 new rows. - Re-apply the same sample. Snackbar confirms
Imported 0 departments…(nothing duplicated, code-match dedup). - Click Load large sample. Validate shows 21 departments + 472 processes. Apply. Snackbar fires after the import completes.
- If apply fails partway, the error surfaces in a snackbar (try e.g. submitting bad JSON to test).
Org-level settings (advanced)
Currently exposed via /organizations card edit:
- Name, description, industry, size, country
On the roadmap (not yet UI):
- Logo upload
- Custom email-domain restrictions
- SSO / SAML config
- Per-org default approval chain