Overview
orgplatform is a self-hosted platform for running a Star Citizen organisation. One Rust backend, one Postgres database, one identity system — four surfaces over a shared core.
The four surfaces
All driven by one binary (plus the separate public overlay):
Discord botSlash commands for members and officers: events, RSVPs, fleet, governance, recognition, discipline.anyoneWeb API + panelThe administrative portal and member dashboard at /panel.anyonePublic siteThe landing page and this documentation hub.anyoneIn-game overlayThe separate public org-hud; speaks only the hud-protocol wire contract — no special backend access.anyoneIt administers human decisions — it never makes them. The platform executes votes, records audits, and reconciles Discord to a desired state. It does not decide who gets promoted or expelled. Internalise this before operating it.
The vocabulary
Read this once — every page assumes these terms.
- Member — a person in the org, keyed by their Discord user id.
- Class — a membership category (Recruit, Member/Fellow) granting base permissions.
- Rank — a position in a progression ladder; advances via recognition/merit.
- Office — a leadership role (Org Leader, Councillor, Treasurer, Wing Commander). Carries authority.
- Scope / breadth — how far an office's authority reaches: org, region, or division.
- authority_rank — seniority between offices — lower = more senior. A junior can't act on a senior.
- Region — a "wing" — a geographic grouping (eu, us, asia).
- Division — a "group" — a functional grouping (operations, logistics, medical).
- Event / op — a scheduled operation; may be tithed (official, treasury owed a cut).
- RSVP / check-in — intent to attend (yes/maybe/if_needed/no) and actual attendance.
- Fleet / vehicle — org-owned ships with status and condition; checked out via loans.
- Fund — a named treasury bucket; movements are append-only and audited.
- Proposal / tally / outcome — the governance engine: a consequential action, its vote, its result.
- Managed role / channel — a Discord object the platform owns and reconciles — never hand-edit these.
- Template — a declarative snapshot of org desired state (structure + identity + channels).
- Steward — the platform administrator — the only role that bypasses governance and seniority.
The rules that shape everything
- Config-is-data. Operational rules (tithe %, quorum %, probation length, thresholds) are rows in the config table, changed at runtime — not constants in code.
- Audit-everything. Every state or config change writes an immutable audit_log row.
- Domain event spine. Modules emit typed domain_events; the live layer, the provisioner and the dashboard subscribe. One emit, many subscribers.
- One permission model, both surfaces. Slash commands and web routes resolve the same rank → permission mapping, fail-closed, per request.
- Everything consequential is mediated. Destructive or org-defining actions are proposals routed through governance, not direct mutations.
- The overlay gets no special access. It authenticates as an ordinary member and speaks only hud-protocol.
Why you shouldn't hand-edit Discord
The platform keeps a registry of the roles and channels it created and a provisioner reconciles Discord to the desired state: it creates what's missing, renames what drifted, and soft-archives what was removed — it never hard-deletes. If you rename or delete a managed role in Discord, the next provision corrects it back. Make structural changes through the platform (panel or slash commands), not in Discord directly.
Next: Prerequisites.