Skip to content

Latest commit

 

History

606 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

UnionOps

UnionOps

Solidarity.

Free Comms tools for union stewards and officers — on-device communications,
plus Officer Hub and Local Portal for casework. Multi-union by design.
Comms stay free. Hosted Officer Hub or Local Portal has a cost. Self-host stays an option.

unionops.org · Try Comms · Self-host

CI License GHCR Bilingual EN/FR Node

UnionOps — Solidarity.

Stewarded by Ryan Morris. Source-available · all rights reserved · LICENSE

OPSEU/CAAT is the first adopter (reference tenant seed), not a platform default. Any union can run with their own branding, CA steps, and enabled modules.


Two surfaces, one platform

Comms toolbox Officer Hub
Who Stewards, communicators, any local Officers, stewards, stability committees
Where Public site — no account required Authenticated /app (Auth.js + MFA)
Data Browser-side; Brand Kit in localStorage Hosted by you or by UnionOps; that host is the data controller
Cost Free. No ads, no paywall on a poster. Self-host: your server. If UnionOps hosts it for a local, hosting has a cost — enough to cover it, not a lock-in fee.
Try it unionops.org Self-host or local demo logins below

Comms toolbox — four channels

Guides and generators for social, print, union boards, and websites. Everything runs in the browser — no analytics, no upload of member photos to our servers.

Channel What you get
Brand Brand Kit, Logo Builder, Resizer, Document & Slide Generator (Word / Excel / PowerPoint)
Union boards Board Banner & Trim, Board Notice Maker, Solidarity Posters, QR Board / Link Cards
Print & social Flyer Maker, Graphic Maker, Quote Cards, Meeting Backgrounds, Alt-text helper
Website Static site ZIP (GitHub Pages–ready) + deploy guide
Guides First week, Blueprint, Strike Guide, Photo Consent, Comms Resources, channel guides, captions & examples, Brand Assets, solidarity page, install

Accessibility: font scaling, high contrast, reduced motion — EN/FR throughout.


Officer Hub — what's shipped

Phases 0–5 complete, plus Workforce Time 8-lite. Postgres + RLS adapters ship behind *_DB_BACKEND flags (default memory for demos; production flip via docs/guides/POSTGRES_OPS.md or docs/guides/CAPROVER_POSTGRES.md).

Casework & deadlines

  • Grievance tracker — CA-configurable steps, timeline, immutable notes, email drafts (copy only), bundle export (JSON + PDF)
  • Overdue board — upcoming / overdue sorted by days late
  • Meetings & ICS — schedule on a grievance; download calendar files
  • Member communication log — channel, direction, summary

Sector & time

  • College bumping — PDF/text compare, stability committee sessions, decision record (committee decides — never auto-decided)
  • Workforce Time (8-lite) — clock in/out, job codes, approvals, CSV export, optional GPS punch tagging (/app/time)

Officer QOL

  • CA clause snippets — union-scoped library; insert into notes
  • Within-union marketplace — share templates with your local only (never cross-union)
  • Officer handoff — reassign cases + download package (president/admin)
  • Hybrid backup — passphrase-encrypted export/import; passphrase stays in-browser
  • Steward mobile — optional read-only compact mode

Role-gated write actions match the API. Confidential modules sit behind MFA.


Privacy (read this)

UnionOps is local-first for Comms, not “no servers ever.”

Surface What happens to data
Comms tools Graphics, brand kit, and uploads stay in your browser. No analytics.
Officer Hub you host Sessions and hub records live on that instance. You are the data controller. Prefer Canadian hosting for confidential modules.
Demo / CI accounts Workshop and test only — not for real member case files.

Full policy: Privacy · Security · docs/COMPLIANCE.md · docs/guides/HOSTED_SECURITY.md · SECURITY.md


Quick start

npm ci
cp .env.example .env.local   # set AUTH_SECRET (openssl rand -base64 32)
npm run dev                  # http://localhost:3000/en

More detail: docs/guides/SETUP.md

Demo Officer Hub logins (dev / CI only)

Password demo123. Addresses use reserved unionops.test (RFC 2606) so they are not real union or local mailboxes.

Account Notes
president.243@unionops.test MFA gate (dev accepts any 6-digit code)
stability.243@unionops.test Bumping / stability
steward.243@unionops.test Steward
solo@unionops.test Solo account — no MFA

Routes: /en/app/login · /en/app · /en/app/mfa


Deploy

  • Image: ghcr.io/hackmods/union-communications:main (CI on main); :vX.Y.Z / :latest on tags
  • CapRover: container port 3000; set AUTH_SECRET and AUTH_URL
  • Health: GET /api/health{"status":"ok"}

Guide: docs/guides/DEPLOY.md

Before production: unique AUTH_SECRET, correct HTTPS AUTH_URL (no trailing slash), never use demo123 for real grievances — if you host it, compliance is on you.


What's next

  1. Postgres + RLS — every table scoped by unionId / localId
  2. Multi-union onboarding UI — tenant signup/invite (seed-only today)
  3. Attachments + virus scan — grievance docs & bumping PDFs
  4. ApiAdapter — authenticated API persistence for hub clients
  5. Workforce Time (full) — scheduling, PTO, union rollup

See docs/ROADMAP.md and docs/PROGRESS.md.


Documentation

Doc Purpose
Vision Multi-union product scope
Architecture Stack, tenancy, DataAdapter
Setup / Deploy Operator guides
CapRover + Postgres Durable self-host on CapRover
RBAC Roles — never cross-union data
Compliance Privacy, AODA
Roadmap / Progress Phase status
Contributing Source-available contribution rules
Security Vulnerability reporting
Reference tenant OPSEU/CAAT first adopter seed

Agent entry point: AGENTS.md


Stewardship

UnionOps is stewarded by Ryan Morris, intended as a Canadian non-profit / community labour project. The code is source-available under LICENSE: you may run and self-host for your local; redistribution and competing commercial hosting require written permission.

Comms stay free (on-device, no ads). If UnionOps hosts Officer Hub or Local Portal for a local, that hosting has a cost — enough to keep the service online, not a lock-in subscription. Self-host remains an option. Public promise: unionops.org/en/manifesto.

Solidarity.

About

UnionOps — multi-union steward tools. Comms stay free on-device. Hosted Officer Hub / Local Portal may recover hosting costs. Self-host stays an option. Solidarity.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages