v0.3.0
Cross-org collaboration with document gates, ledger periods that actually close the books, first-class payees, an Events Hub with a unified Event Detail page, a tabbed Admin Hub, automation rules, browser push notifications, and a /join QR landing page.
Highlights
This release is heavy on the workflows that happen between orgs, between fiscal years, and around event operations. The biggest shifts are financial — ledger periods and a standalone Org Ledger page — and structural: admins now work from a tabbed Admin Hub, coordinators run events from a single Event Detail page, and family leads can help each other without admin intervention.
New Features
Cross-Organization Collaboration
Two orgs can now share workers for events — host and partner relationships with an explicit collaboration record.
- Partnerships — either org invites the other; mutual acceptance required before any collaboration can happen.
- Event collaboration invites — host invites a partner to help staff a specific event. Partner accepts, assigns their workers, and receives the event on their own roster.
- Cross-tenant worker assignment — partner-org workers show up on the host's event without leaving their home org.
- Settlement for paid collaborations — a single org-to-org payment is calculated automatically as part of standard settlement. Partner distributes internally using their own settlement.
- Document gates — hosts can require an org-level acknowledgment from the partner admin before any assignment, or worker-level documents each individual worker must sign. New
pending_documentsregistration status blocks assignment until requirements are met. - Event message board — per-event chat visible to everyone assigned or invited, including cross-org workers. Useful for last-minute gate-meetup and stand-role coordination.
Ledger Periods
Real fiscal-year boundaries for the organization ledger.
- Create and close periods with atomic carry-forward of every account's ending balance as the new period's opening balance.
- Header badge on the Ledger page shows the currently selected period; gear icon opens Period Settings for admins.
- Rename, start a new period, or view period history from the settings modal.
- Closed periods are read-only — historical entries stay fully queryable but totals are frozen.
- Settlement-in-progress block — closing is rejected with a 409 if a settlement is mid-commit, so you never land partial data on one side of the boundary.
Org Ledger Page
Admins and treasurers now have a dedicated /ledger page (separate from family account views).
- Account selector groups org, family, and fund accounts.
- Filterable, paginated entry table with URL-persisted filter state.
- Every entry links back to the underlying event, family, settlement, or scholarship record that generated it.
- Read-only when viewing a closed period.
First-Class Payees
Payees (the vendors, schools, and individuals your org sends checks to) are now rich records, not just names.
- Manage Payees drawer from any scholarship page (requires
payees.manage). - Create Payee modal with contact info, logo, default payment method, payment instructions, addresses, tax ID, and admin notes.
- Reimburse Me shortcut — first option in every Payee dropdown, resolves to the system self-reimbursement payee.
- Family-owned private payees — family leads can create a payee visible only to their family, shown with a Yours chip. Admins can promote a private payee to tenant-wide with one click.
- Masked tax IDs — only users with
payees.view_tax_idsee the unmasked value.
Events Hub and EventDetailView
The event workflow was fragmented across a list, an edit page, a settlement page, and several modals. It is now a single Hub.
- Events Hub with unified List and Calendar tabs.
- EventDetailView is canonical — click an event card to land on its detail page with roster, stands, settlement, and message board all accessible via drawers.
- Roster drawer holds Check-In, Mark All Attended, assignments, and attendance edits in one place.
- Settlement drawer replaces the old Settle Event page; read-only for already-settled events.
- Tabbed Edit Event modal — Details and Stands tabs; AdminEventEdit page retired.
- Stand management moved into the Edit Event > Stands tab; worker assignments show a read-only Stand #X chip on the detail page.
- EventsView UX — filter sheet, color-zoned coverage bar (red under 50%, amber 50–79%, green 80% and up) with
X / Y workerslabel, summary strip at the top of the list, temporal grouping (Today, This Week, Later this Month), state-aware card styling.
Family Events Enrichment
The family-side event list got richer cards and a new filter.
- Signed up / Not signed up / All filter chips below the search.
- Worked pill on completed and settled events the family attended.
- Rate display on settled events shows the configured per-worker rate.
- Capacity display — "X spots left" or "Full" when Max Workers is set.
- Cursor-based pagination with a Load More button replacing Previous/Next controls.
Family Worker Management + Credentials
Family leads can now manage workers and credentials for workers they sponsor without admin intervention.
- Family Workers panel in profile settings lists every worker with credential status badges (Registered / Invited / No Login).
- Send Registration Link — invite a worker to create their own login.
- Send Password Reset — email a reset link to a worker who's locked out.
- Set Temporary Password — hand a temporary password in person when email is unavailable; forces the worker to change on next login.
- Worker avatar upload in the Edit Worker modal for registered workers.
AdminHub Redesign
Admin tooling moves from a flat sidebar into a tabbed workspace at /admin/hub.
- Five tabs: People, Events, Finance, Content, Org Settings.
- Two-tier card layout: featured cards (horizontal, 2-col) for the 1–2 most-used tools; supporting cards (vertical, 3-col) for the rest.
- Per-tab icon color (violet / amber / emerald / sky / slate) for visual scanning.
- Permission gating — tabs and cards only appear for users with the matching permission; mid-session demotion redirects with a toast.
- Branding and Landing Page moved from Content to Org Settings (configuration, not content).
- Payees added as a Finance tab card with a standalone
/admin/payeespage.
Automation Rules (Hook Rules Engine)
Configurable WHEN/IF/THEN automation for org admins on the Full/Professional tier.
- 18 trigger types across worker, event, waitlist, scholarship, and document categories.
- 5 built-in metrics per org (cancellation_count, late_cancellation_count, no_show_count, events_worked_count, volunteer_hours) plus support for custom metrics.
- Actions: notification, email, or ledger penalty — all with variable substitution in message templates.
- Execution log with chain tree visualization when one rule's action triggers another.
- Dry-run preview before enabling a rule.
/join QR Invite Landing Page
Public landing page for QR-code and link invites — {tenant}.standshare.app/join?token=….
- Shows org name, inviter, expiry, and intent (new family vs help-my-family).
- Handles unauthenticated (register-and-accept) and authenticated (accept/decline) states.
- Friendly error copy for expired, revoked, already-used, and not-found invites.
Unified Push Notifications
Web browser push via Ably — in addition to in-app and email notifications.
- Enable from the Notifications tab of Profile.
- Foreground suppression — no duplicate banner when the tab is focused.
- Supported on Chrome, Edge, Firefox, and Safari on desktop and Android. iOS Safari deferred.
Nav Cleanup
Header primary links are now role-aware.
- Family Lead / Coordinator / Treasurer: Dashboard · Events · Scholarships
- Admin: Dashboard · Events · Admin Hub
- Guest Worker: Dashboard · Events
- Secondary pages live behind an icon-only overflow button.
- Avatar menu replaces the old name/email/gear strip — holds profile, org switcher, and sign-out.
Stand ↔ Slot Terminology
Event capacity is now measured in slots (worker positions), not stands (physical booths).
filledSlotsandtotalSlotsare the canonical capacity fields.- Family cards say "X spots left" or "Full"; admin cards show "X / Y workers" with the coverage bar.
- One physical stand can still be staffed by multiple workers — stands are the booth, slots are the seats.
Document Model Unification and Template Versioning
- Document requirements are now per-org scoped (
tenant_org_id); cross-tenant requirement leakage is fixed. documents.typeis extensible — converted from a PG enum tovarchar(50)backed by the sharedDOCUMENT_TYPESlist. New types no longer require a schema migration.- Template version history Sheet — slide-over panel on template rows showing up to 50 previous versions with archived date, instance count, and signed count.
Improvements
- Event templates can now store signup window day offsets (opens N days before, closes M days before event date), so generated events get appropriate windows automatically.
- Group-aware signup windows — tiered signup honors Dynamic Group membership with OR semantics across multi-family workers.
- Session expiration UX — 401 intercepts now show a modal and redirect back to the original destination after login.
- OAuth and magic link login preserve the redirect destination, so shared deep links work for logged-out recipients.
- Payee enrichment migration — additive only (new columns with defaults/nullable). Safe to deploy without downtime.
Help Center
All of the above is documented in the Help Center — see the new how-to pages under Account & Profile, Events, Treasurer, Scholarships, and Administration for the specifics.
