Skip to main content

v0.3.0

StandShare Team
Product team

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_documents registration 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_id see 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 workers label, 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/payees page.

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.

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).

  • filledSlots and totalSlots are 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.type is extensible — converted from a PG enum to varchar(50) backed by the shared DOCUMENT_TYPES list. 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.


View on GitHub