<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>StandShare Changelog</title>
        <link>https://www.standshare.app/docs/changelog</link>
        <description>Release notes for StandShare — concession stand fundraising platform.</description>
        <lastBuildDate>Sun, 17 May 2026 00:00:00 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <copyright>Copyright © 2026 StandShare.</copyright>
        <item>
            <title><![CDATA[v0.4.0 — Phase 1 Microsite]]></title>
            <link>https://www.standshare.app/docs/changelog/v0-4-0</link>
            <guid>https://www.standshare.app/docs/changelog/v0-4-0</guid>
            <pubDate>Sun, 17 May 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Rich, customizable landing pages with image galleries, FAQs, partner logos, and embedded videos. Tenants can now build their complete public web presence directly in StandShare without coding.]]></description>
            <content:encoded><![CDATA[<p>Rich, customizable landing pages with image galleries, FAQs, partner logos, and embedded videos. Tenants can now build their complete public web presence directly in StandShare without coding.</p>
<h2 class="anchor anchorTargetStickyNavbar_P8ZN" id="highlights">Highlights<a href="https://www.standshare.app/docs/changelog/v0-4-0#highlights" class="hash-link" aria-label="Direct link to Highlights" title="Direct link to Highlights" translate="no">​</a></h2>
<p>The landing page evolved. What started as a single hero section is now a full-featured internal CMS where tenants compose their public web presence from modular section types. Admins drag-and-drop sections, add rich text, upload images, and go live in minutes.</p>
<h2 class="anchor anchorTargetStickyNavbar_P8ZN" id="new-features">New Features<a href="https://www.standshare.app/docs/changelog/v0-4-0#new-features" class="hash-link" aria-label="Direct link to New Features" title="Direct link to New Features" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_P8ZN" id="image-galleries">Image Galleries<a href="https://www.standshare.app/docs/changelog/v0-4-0#image-galleries" class="hash-link" aria-label="Direct link to Image Galleries" title="Direct link to Image Galleries" translate="no">​</a></h3>
<p>Upload up to 100 images (500 MB total on free tier) and arrange them in grid or masonry layouts.</p>
<ul>
<li class=""><strong>Multiple layouts</strong>: 3-column grid, 4-column grid, or masonry</li>
<li class=""><strong>Lightbox preview</strong>: Click any image to see a full-screen viewer</li>
<li class=""><strong>Alt text for accessibility</strong>: Every image requires alt text to meet WCAG standards</li>
<li class=""><strong>Image library</strong>: Reuse images across sections without re-uploading</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_P8ZN" id="faq-accordion">FAQ Accordion<a href="https://www.standshare.app/docs/changelog/v0-4-0#faq-accordion" class="hash-link" aria-label="Direct link to FAQ Accordion" title="Direct link to FAQ Accordion" translate="no">​</a></h3>
<p>Create collapsible FAQ sections with rich text answers.</p>
<ul>
<li class=""><strong>Drag-to-reorder</strong> questions for logical flow</li>
<li class=""><strong>Rich text support</strong>: Format answers with bold, italic, links, and headings</li>
<li class=""><strong>Auto-anchor nav</strong>: FAQ titles appear in the sticky sidebar for easy jumping</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_P8ZN" id="partner--sponsor-logos">Partner &amp; Sponsor Logos<a href="https://www.standshare.app/docs/changelog/v0-4-0#partner--sponsor-logos" class="hash-link" aria-label="Direct link to Partner &amp; Sponsor Logos" title="Direct link to Partner &amp; Sponsor Logos" translate="no">​</a></h3>
<p>Showcase partner organizations with their logos and optional links.</p>
<ul>
<li class=""><strong>Grid layout</strong> with customizable link targets</li>
<li class=""><strong>Image handling</strong>: Upload logos or paste external image URLs</li>
<li class=""><strong>Auto-sizing</strong>: Logos scale uniformly while maintaining aspect ratio</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_P8ZN" id="embedded-videos">Embedded Videos<a href="https://www.standshare.app/docs/changelog/v0-4-0#embedded-videos" class="hash-link" aria-label="Direct link to Embedded Videos" title="Direct link to Embedded Videos" translate="no">​</a></h3>
<p>Embed YouTube and Vimeo videos directly on your microsite.</p>
<ul>
<li class=""><strong>Supported providers</strong>: YouTube and Vimeo only (strict allowlist for security)</li>
<li class=""><strong>Responsive sizing</strong>: Videos scale to fit mobile and desktop screens</li>
<li class=""><strong>No raw URLs</strong>: Video IDs are extracted and stored; raw URLs never saved</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_P8ZN" id="auto-generated-anchor-navigation">Auto-Generated Anchor Navigation<a href="https://www.standshare.app/docs/changelog/v0-4-0#auto-generated-anchor-navigation" class="hash-link" aria-label="Direct link to Auto-Generated Anchor Navigation" title="Direct link to Auto-Generated Anchor Navigation" translate="no">​</a></h3>
<p>Every section's title automatically appears in a sticky sidebar nav.</p>
<ul>
<li class=""><strong>Smooth scrolling</strong>: Click any section title to jump to that section</li>
<li class=""><strong>Active highlight</strong>: Current section is highlighted as you scroll</li>
<li class=""><strong>Mobile-friendly</strong>: Nav collapses on small screens to save space</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_P8ZN" id="rich-text-editing">Rich Text Editing<a href="https://www.standshare.app/docs/changelog/v0-4-0#rich-text-editing" class="hash-link" aria-label="Direct link to Rich Text Editing" title="Direct link to Rich Text Editing" translate="no">​</a></h3>
<p>Tiptap-powered rich text in FAQ answers and custom text sections.</p>
<ul>
<li class=""><strong>Inline formatting</strong>: Bold, italic, and links</li>
<li class=""><strong>Structured content</strong>: Headings and paragraphs</li>
<li class=""><strong>Safe sanitization</strong>: XSS protection via server-side allowlist</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_P8ZN" id="important-limitations">Important Limitations<a href="https://www.standshare.app/docs/changelog/v0-4-0#important-limitations" class="hash-link" aria-label="Direct link to Important Limitations" title="Direct link to Important Limitations" translate="no">​</a></h2>
<p><strong>Publishing is page-level, not section-level.</strong> When you click "Publish," all pending changes across every section on the page go live at once. There's no way to publish a single section in isolation. If you have changes you want to keep as draft while publishing others, save them and leave that section unpublished until you're ready.</p>
<p>We're tracking demand for per-section drafts — let us know if this workflow is a pain point for your team.</p>
<h2 class="anchor anchorTargetStickyNavbar_P8ZN" id="image-quotas">Image Quotas<a href="https://www.standshare.app/docs/changelog/v0-4-0#image-quotas" class="hash-link" aria-label="Direct link to Image Quotas" title="Direct link to Image Quotas" translate="no">​</a></h2>
<ul>
<li class=""><strong>Free tier</strong>: 100 images, 5 MB per image, 500 MB total per org</li>
<li class=""><strong>Paid tier</strong>: 500 images, 10 MB per image, 5 GB total per org</li>
</ul>
<p>Overages are rejected with a clear error message prompting you to delete unused images or upgrade your plan.</p>
<h2 class="anchor anchorTargetStickyNavbar_P8ZN" id="media-privacy">Media Privacy<a href="https://www.standshare.app/docs/changelog/v0-4-0#media-privacy" class="hash-link" aria-label="Direct link to Media Privacy" title="Direct link to Media Privacy" translate="no">​</a></h2>
<p>Images you upload are served from a public CDN (<code>media.standshare.app</code>). Anyone with the image URL can view it. Ensure you have the right to upload every image — StandShare is not the copyright owner. By uploading, you grant StandShare a hosting license for the duration of your plan.</p>
<h2 class="anchor anchorTargetStickyNavbar_P8ZN" id="technical-details">Technical Details<a href="https://www.standshare.app/docs/changelog/v0-4-0#technical-details" class="hash-link" aria-label="Direct link to Technical Details" title="Direct link to Technical Details" translate="no">​</a></h2>
<ul>
<li class=""><strong>Database</strong>: Page drafts tracked via <code>microsite_pages.published_at</code> (NULL = draft)</li>
<li class=""><strong>Sections</strong>: Stored as JSON in <code>microsite_sections.content</code>; validated against the section registry on save</li>
<li class=""><strong>Rich text</strong>: Stored as ProseMirror JSON; sanitized at write time, never with <code>dangerouslySetInnerHTML</code> at render</li>
<li class=""><strong>Public routes</strong>: Tenant resolution via subdomain-authoritative model (no X-Tenant-Slug trust)</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_P8ZN" id="coming-soon">Coming Soon<a href="https://www.standshare.app/docs/changelog/v0-4-0#coming-soon" class="hash-link" aria-label="Direct link to Coming Soon" title="Direct link to Coming Soon" translate="no">​</a></h2>
<ul>
<li class="">Per-section draft state (future version)</li>
<li class="">Section templates and cloning</li>
<li class="">Analytics dashboard integration</li>
<li class="">Scheduled publish dates</li>
</ul>]]></content:encoded>
            <category>Release</category>
        </item>
        <item>
            <title><![CDATA[v0.3.0]]></title>
            <link>https://www.standshare.app/docs/changelog/v0-3-0</link>
            <guid>https://www.standshare.app/docs/changelog/v0-3-0</guid>
            <pubDate>Fri, 17 Apr 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[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.]]></description>
            <content:encoded><![CDATA[<p>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.</p>
<h2 class="anchor anchorTargetStickyNavbar_P8ZN" id="highlights">Highlights<a href="https://www.standshare.app/docs/changelog/v0-3-0#highlights" class="hash-link" aria-label="Direct link to Highlights" title="Direct link to Highlights" translate="no">​</a></h2>
<p>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.</p>
<h2 class="anchor anchorTargetStickyNavbar_P8ZN" id="new-features">New Features<a href="https://www.standshare.app/docs/changelog/v0-3-0#new-features" class="hash-link" aria-label="Direct link to New Features" title="Direct link to New Features" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_P8ZN" id="cross-organization-collaboration">Cross-Organization Collaboration<a href="https://www.standshare.app/docs/changelog/v0-3-0#cross-organization-collaboration" class="hash-link" aria-label="Direct link to Cross-Organization Collaboration" title="Direct link to Cross-Organization Collaboration" translate="no">​</a></h3>
<p>Two orgs can now share workers for events — host and partner relationships with an explicit collaboration record.</p>
<ul>
<li class=""><strong>Partnerships</strong> — either org invites the other; mutual acceptance required before any collaboration can happen.</li>
<li class=""><strong>Event collaboration invites</strong> — host invites a partner to help staff a specific event. Partner accepts, assigns their workers, and receives the event on their own roster.</li>
<li class=""><strong>Cross-tenant worker assignment</strong> — partner-org workers show up on the host's event without leaving their home org.</li>
<li class=""><strong>Settlement for paid collaborations</strong> — a single org-to-org payment is calculated automatically as part of standard settlement. Partner distributes internally using their own settlement.</li>
<li class=""><strong>Document gates</strong> — hosts can require an org-level acknowledgment from the partner admin before any assignment, or worker-level documents each individual worker must sign. New <code>pending_documents</code> registration status blocks assignment until requirements are met.</li>
<li class=""><strong>Event message board</strong> — per-event chat visible to everyone assigned or invited, including cross-org workers. Useful for last-minute gate-meetup and stand-role coordination.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_P8ZN" id="ledger-periods">Ledger Periods<a href="https://www.standshare.app/docs/changelog/v0-3-0#ledger-periods" class="hash-link" aria-label="Direct link to Ledger Periods" title="Direct link to Ledger Periods" translate="no">​</a></h3>
<p>Real fiscal-year boundaries for the organization ledger.</p>
<ul>
<li class=""><strong>Create and close periods</strong> with atomic carry-forward of every account's ending balance as the new period's opening balance.</li>
<li class=""><strong>Header badge</strong> on the Ledger page shows the currently selected period; gear icon opens Period Settings for admins.</li>
<li class=""><strong>Rename, start a new period, or view period history</strong> from the settings modal.</li>
<li class=""><strong>Closed periods are read-only</strong> — historical entries stay fully queryable but totals are frozen.</li>
<li class=""><strong>Settlement-in-progress block</strong> — closing is rejected with a 409 if a settlement is mid-commit, so you never land partial data on one side of the boundary.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_P8ZN" id="org-ledger-page">Org Ledger Page<a href="https://www.standshare.app/docs/changelog/v0-3-0#org-ledger-page" class="hash-link" aria-label="Direct link to Org Ledger Page" title="Direct link to Org Ledger Page" translate="no">​</a></h3>
<p>Admins and treasurers now have a dedicated <code>/ledger</code> page (separate from family account views).</p>
<ul>
<li class="">Account selector groups org, family, and fund accounts.</li>
<li class="">Filterable, paginated entry table with URL-persisted filter state.</li>
<li class="">Every entry links back to the underlying event, family, settlement, or scholarship record that generated it.</li>
<li class="">Read-only when viewing a closed period.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_P8ZN" id="first-class-payees">First-Class Payees<a href="https://www.standshare.app/docs/changelog/v0-3-0#first-class-payees" class="hash-link" aria-label="Direct link to First-Class Payees" title="Direct link to First-Class Payees" translate="no">​</a></h3>
<p>Payees (the vendors, schools, and individuals your org sends checks to) are now rich records, not just names.</p>
<ul>
<li class=""><strong>Manage Payees drawer</strong> from any scholarship page (requires <code>payees.manage</code>).</li>
<li class=""><strong>Create Payee modal</strong> with contact info, logo, default payment method, payment instructions, addresses, tax ID, and admin notes.</li>
<li class=""><strong>Reimburse Me</strong> shortcut — first option in every Payee dropdown, resolves to the system self-reimbursement payee.</li>
<li class=""><strong>Family-owned private payees</strong> — family leads can create a payee visible only to their family, shown with a <strong>Yours</strong> chip. Admins can promote a private payee to tenant-wide with one click.</li>
<li class=""><strong>Masked tax IDs</strong> — only users with <code>payees.view_tax_id</code> see the unmasked value.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_P8ZN" id="events-hub-and-eventdetailview">Events Hub and EventDetailView<a href="https://www.standshare.app/docs/changelog/v0-3-0#events-hub-and-eventdetailview" class="hash-link" aria-label="Direct link to Events Hub and EventDetailView" title="Direct link to Events Hub and EventDetailView" translate="no">​</a></h3>
<p>The event workflow was fragmented across a list, an edit page, a settlement page, and several modals. It is now a single Hub.</p>
<ul>
<li class=""><strong>Events Hub</strong> with unified List and Calendar tabs.</li>
<li class=""><strong>EventDetailView</strong> is canonical — click an event card to land on its detail page with roster, stands, settlement, and message board all accessible via drawers.</li>
<li class=""><strong>Roster drawer</strong> holds Check-In, Mark All Attended, assignments, and attendance edits in one place.</li>
<li class=""><strong>Settlement drawer</strong> replaces the old Settle Event page; read-only for already-settled events.</li>
<li class=""><strong>Tabbed Edit Event modal</strong> — Details and Stands tabs; AdminEventEdit page retired.</li>
<li class=""><strong>Stand management</strong> moved into the Edit Event &gt; Stands tab; worker assignments show a read-only <strong>Stand #X</strong> chip on the detail page.</li>
<li class=""><strong>EventsView UX</strong> — filter sheet, color-zoned coverage bar (red under 50%, amber 50–79%, green 80% and up) with <code>X / Y workers</code> label, summary strip at the top of the list, temporal grouping (Today, This Week, Later this Month), state-aware card styling.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_P8ZN" id="family-events-enrichment">Family Events Enrichment<a href="https://www.standshare.app/docs/changelog/v0-3-0#family-events-enrichment" class="hash-link" aria-label="Direct link to Family Events Enrichment" title="Direct link to Family Events Enrichment" translate="no">​</a></h3>
<p>The family-side event list got richer cards and a new filter.</p>
<ul>
<li class=""><strong>Signed up / Not signed up / All</strong> filter chips below the search.</li>
<li class=""><strong>Worked pill</strong> on completed and settled events the family attended.</li>
<li class=""><strong>Rate display</strong> on settled events shows the configured per-worker rate.</li>
<li class=""><strong>Capacity display</strong> — "X spots left" or "Full" when Max Workers is set.</li>
<li class=""><strong>Cursor-based pagination</strong> with a Load More button replacing Previous/Next controls.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_P8ZN" id="family-worker-management--credentials">Family Worker Management + Credentials<a href="https://www.standshare.app/docs/changelog/v0-3-0#family-worker-management--credentials" class="hash-link" aria-label="Direct link to Family Worker Management + Credentials" title="Direct link to Family Worker Management + Credentials" translate="no">​</a></h3>
<p>Family leads can now manage workers and credentials for workers they sponsor without admin intervention.</p>
<ul>
<li class=""><strong>Family Workers panel</strong> in profile settings lists every worker with credential status badges (Registered / Invited / No Login).</li>
<li class=""><strong>Send Registration Link</strong> — invite a worker to create their own login.</li>
<li class=""><strong>Send Password Reset</strong> — email a reset link to a worker who's locked out.</li>
<li class=""><strong>Set Temporary Password</strong> — hand a temporary password in person when email is unavailable; forces the worker to change on next login.</li>
<li class=""><strong>Worker avatar upload</strong> in the Edit Worker modal for registered workers.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_P8ZN" id="adminhub-redesign">AdminHub Redesign<a href="https://www.standshare.app/docs/changelog/v0-3-0#adminhub-redesign" class="hash-link" aria-label="Direct link to AdminHub Redesign" title="Direct link to AdminHub Redesign" translate="no">​</a></h3>
<p>Admin tooling moves from a flat sidebar into a tabbed workspace at <code>/admin/hub</code>.</p>
<ul>
<li class=""><strong>Five tabs</strong>: People, Events, Finance, Content, Org Settings.</li>
<li class=""><strong>Two-tier card layout</strong>: featured cards (horizontal, 2-col) for the 1–2 most-used tools; supporting cards (vertical, 3-col) for the rest.</li>
<li class=""><strong>Per-tab icon color</strong> (violet / amber / emerald / sky / slate) for visual scanning.</li>
<li class=""><strong>Permission gating</strong> — tabs and cards only appear for users with the matching permission; mid-session demotion redirects with a toast.</li>
<li class=""><strong>Branding and Landing Page</strong> moved from Content to Org Settings (configuration, not content).</li>
<li class=""><strong>Payees</strong> added as a Finance tab card with a standalone <code>/admin/payees</code> page.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_P8ZN" id="automation-rules-hook-rules-engine">Automation Rules (Hook Rules Engine)<a href="https://www.standshare.app/docs/changelog/v0-3-0#automation-rules-hook-rules-engine" class="hash-link" aria-label="Direct link to Automation Rules (Hook Rules Engine)" title="Direct link to Automation Rules (Hook Rules Engine)" translate="no">​</a></h3>
<p>Configurable WHEN/IF/THEN automation for org admins on the Full/Professional tier.</p>
<ul>
<li class=""><strong>18 trigger types</strong> across worker, event, waitlist, scholarship, and document categories.</li>
<li class=""><strong>5 built-in metrics</strong> per org (cancellation_count, late_cancellation_count, no_show_count, events_worked_count, volunteer_hours) plus support for custom metrics.</li>
<li class=""><strong>Actions</strong>: notification, email, or ledger penalty — all with variable substitution in message templates.</li>
<li class=""><strong>Execution log</strong> with chain tree visualization when one rule's action triggers another.</li>
<li class=""><strong>Dry-run preview</strong> before enabling a rule.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_P8ZN" id="join-qr-invite-landing-page">/join QR Invite Landing Page<a href="https://www.standshare.app/docs/changelog/v0-3-0#join-qr-invite-landing-page" class="hash-link" aria-label="Direct link to /join QR Invite Landing Page" title="Direct link to /join QR Invite Landing Page" translate="no">​</a></h3>
<p>Public landing page for QR-code and link invites — <code>{tenant}.standshare.app/join?token=…</code>.</p>
<ul>
<li class="">Shows org name, inviter, expiry, and intent (new family vs help-my-family).</li>
<li class="">Handles unauthenticated (register-and-accept) and authenticated (accept/decline) states.</li>
<li class="">Friendly error copy for expired, revoked, already-used, and not-found invites.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_P8ZN" id="unified-push-notifications">Unified Push Notifications<a href="https://www.standshare.app/docs/changelog/v0-3-0#unified-push-notifications" class="hash-link" aria-label="Direct link to Unified Push Notifications" title="Direct link to Unified Push Notifications" translate="no">​</a></h3>
<p>Web browser push via Ably — in addition to in-app and email notifications.</p>
<ul>
<li class="">Enable from the Notifications tab of Profile.</li>
<li class="">Foreground suppression — no duplicate banner when the tab is focused.</li>
<li class="">Supported on Chrome, Edge, Firefox, and Safari on desktop and Android. iOS Safari deferred.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_P8ZN" id="nav-cleanup">Nav Cleanup<a href="https://www.standshare.app/docs/changelog/v0-3-0#nav-cleanup" class="hash-link" aria-label="Direct link to Nav Cleanup" title="Direct link to Nav Cleanup" translate="no">​</a></h3>
<p>Header primary links are now role-aware.</p>
<ul>
<li class="">Family Lead / Coordinator / Treasurer: <strong>Dashboard · Events · Scholarships</strong></li>
<li class="">Admin: <strong>Dashboard · Events · Admin Hub</strong></li>
<li class="">Guest Worker: <strong>Dashboard · Events</strong></li>
<li class="">Secondary pages live behind an icon-only <strong>overflow</strong> button.</li>
<li class="">Avatar menu replaces the old name/email/gear strip — holds profile, org switcher, and sign-out.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_P8ZN" id="stand--slot-terminology">Stand ↔ Slot Terminology<a href="https://www.standshare.app/docs/changelog/v0-3-0#stand--slot-terminology" class="hash-link" aria-label="Direct link to Stand ↔ Slot Terminology" title="Direct link to Stand ↔ Slot Terminology" translate="no">​</a></h3>
<p>Event capacity is now measured in <strong>slots</strong> (worker positions), not stands (physical booths).</p>
<ul>
<li class=""><code>filledSlots</code> and <code>totalSlots</code> are the canonical capacity fields.</li>
<li class="">Family cards say "X spots left" or "Full"; admin cards show "X / Y workers" with the coverage bar.</li>
<li class="">One physical stand can still be staffed by multiple workers — stands are the booth, slots are the seats.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_P8ZN" id="document-model-unification-and-template-versioning">Document Model Unification and Template Versioning<a href="https://www.standshare.app/docs/changelog/v0-3-0#document-model-unification-and-template-versioning" class="hash-link" aria-label="Direct link to Document Model Unification and Template Versioning" title="Direct link to Document Model Unification and Template Versioning" translate="no">​</a></h3>
<ul>
<li class=""><strong>Document requirements</strong> are now per-org scoped (<code>tenant_org_id</code>); cross-tenant requirement leakage is fixed.</li>
<li class=""><strong><code>documents.type</code> is extensible</strong> — converted from a PG enum to <code>varchar(50)</code> backed by the shared <code>DOCUMENT_TYPES</code> list. New types no longer require a schema migration.</li>
<li class=""><strong>Template version history Sheet</strong> — slide-over panel on template rows showing up to 50 previous versions with archived date, instance count, and signed count.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_P8ZN" id="improvements">Improvements<a href="https://www.standshare.app/docs/changelog/v0-3-0#improvements" class="hash-link" aria-label="Direct link to Improvements" title="Direct link to Improvements" translate="no">​</a></h2>
<ul>
<li class=""><strong>Event templates</strong> can now store signup window day offsets (opens N days before, closes M days before event date), so generated events get appropriate windows automatically.</li>
<li class=""><strong>Group-aware signup windows</strong> — tiered signup honors Dynamic Group membership with OR semantics across multi-family workers.</li>
<li class=""><strong>Session expiration UX</strong> — 401 intercepts now show a modal and redirect back to the original destination after login.</li>
<li class=""><strong>OAuth and magic link login</strong> preserve the redirect destination, so shared deep links work for logged-out recipients.</li>
<li class=""><strong>Payee enrichment migration</strong> — additive only (new columns with defaults/nullable). Safe to deploy without downtime.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_P8ZN" id="help-center">Help Center<a href="https://www.standshare.app/docs/changelog/v0-3-0#help-center" class="hash-link" aria-label="Direct link to Help Center" title="Direct link to Help Center" translate="no">​</a></h2>
<p>All of the above is documented in the Help Center — see the new how-to pages under Account &amp; Profile, Events, Treasurer, Scholarships, and Administration for the specifics.</p>
<hr>
<p><a href="https://github.com/GraditiPro/StandShare/releases/tag/v0.3.0" target="_blank" rel="noopener noreferrer" class="">View on GitHub</a></p>]]></content:encoded>
            <category>Release</category>
        </item>
        <item>
            <title><![CDATA[v0.2.0]]></title>
            <link>https://www.standshare.app/docs/changelog/v0-2-0</link>
            <guid>https://www.standshare.app/docs/changelog/v0-2-0</guid>
            <pubDate>Sat, 21 Mar 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[StandShare becomes a full operations platform: QR check-in, training and certification, operator portal, IRS Form 990 reporting, venue discovery, tiering and billing, and more.]]></description>
            <content:encoded><![CDATA[<p>StandShare becomes a full operations platform: QR check-in, training and certification, operator portal, IRS Form 990 reporting, venue discovery, tiering and billing, and more.</p>
<h2 class="anchor anchorTargetStickyNavbar_P8ZN" id="highlights">Highlights<a href="https://www.standshare.app/docs/changelog/v0-2-0#highlights" class="hash-link" aria-label="Direct link to Highlights" title="Direct link to Highlights" translate="no">​</a></h2>
<p>This release transforms StandShare from a core fundraising tool into a full operations platform. Organizations can now train workers with built-in video courses, check in workers with QR codes, manage venue operator relationships, and generate IRS compliance reports — all from one place.</p>
<h2 class="anchor anchorTargetStickyNavbar_P8ZN" id="new-features">New Features<a href="https://www.standshare.app/docs/changelog/v0-2-0#new-features" class="hash-link" aria-label="Direct link to New Features" title="Direct link to New Features" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_P8ZN" id="qr-check-in-system">QR Check-In System<a href="https://www.standshare.app/docs/changelog/v0-2-0#qr-check-in-system" class="hash-link" aria-label="Direct link to QR Check-In System" title="Direct link to QR Check-In System" translate="no">​</a></h3>
<p>Workers can now check in to events by showing a QR code on their phone. Coordinators and operators scan the code using StandShare's built-in camera scanner, and the check-in is recorded instantly.</p>
<ul>
<li class=""><strong>Worker QR credentials</strong> — secure, auto-refreshing QR codes generated per event</li>
<li class=""><strong>Camera-based scanner</strong> — works in any modern browser, no app install needed</li>
<li class=""><strong>Real-time check-in dashboard</strong> — live stats showing checked-in count, no-shows, late arrivals, coverage by stand, arrival timeline, and a searchable check-in feed</li>
<li class=""><strong>Offline support</strong> — the scanner caches event data and worker rosters locally, queues scans when offline, and syncs automatically when connectivity returns</li>
<li class=""><strong>CSV export</strong> — download check-in data from the dashboard</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_P8ZN" id="training-and-certification">Training and Certification<a href="https://www.standshare.app/docs/changelog/v0-2-0#training-and-certification" class="hash-link" aria-label="Direct link to Training and Certification" title="Direct link to Training and Certification" translate="no">​</a></h3>
<p>A complete learning management system for training concession stand workers before they work events.</p>
<ul>
<li class=""><strong>Training modules</strong> — create modules with uploaded or linked video content (YouTube, Vimeo, or direct upload to S3)</li>
<li class=""><strong>Video progress tracking</strong> — segment-based progress with skip prevention, auto-resume, and visual segment bar</li>
<li class=""><strong>Assessments</strong> — multiple choice, true/false, matching, and attestation question types with configurable passing scores and retry limits</li>
<li class=""><strong>Training programs</strong> — bundle modules into ordered programs for comprehensive onboarding</li>
<li class=""><strong>Assignment management</strong> — assign modules or programs to individuals with due dates and required flags</li>
<li class=""><strong>Completion tracking and export</strong> — view completions per module, export to CSV for compliance records</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_P8ZN" id="operator-portal">Operator Portal<a href="https://www.standshare.app/docs/changelog/v0-2-0#operator-portal" class="hash-link" aria-label="Direct link to Operator Portal" title="Direct link to Operator Portal" translate="no">​</a></h3>
<p>Venue operators now have their own portal with dedicated tools for managing concession operations across multiple organizations.</p>
<ul>
<li class=""><strong>Operator dashboard</strong> — overview of venue operations, agreements, and compliance status</li>
<li class=""><strong>Agreements and compliance</strong> — manage operator-organization agreements, track compliance requirements</li>
<li class=""><strong>Venue notices</strong> — post and manage notices for organizations operating at your venues</li>
<li class=""><strong>Worker compliance view</strong> — operators can verify worker compliance status</li>
<li class=""><strong>Operator-scoped QR check-in</strong> — scanner and dashboard access for operator staff</li>
<li class=""><strong>Group management</strong> — organize venues and users into operator groups</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_P8ZN" id="irs-form-990-reporting">IRS Form 990 Reporting<a href="https://www.standshare.app/docs/changelog/v0-2-0#irs-form-990-reporting" class="hash-link" aria-label="Direct link to IRS Form 990 Reporting" title="Direct link to IRS Form 990 Reporting" translate="no">​</a></h3>
<p>Nonprofit organizations can now generate IRS Form 990 data directly from StandShare.</p>
<ul>
<li class=""><strong>Fiscal year configuration</strong> — define your organization's fiscal year</li>
<li class=""><strong>Allocation mapping</strong> — map StandShare transaction types to Form 990 categories</li>
<li class=""><strong>Report generation</strong> — produce Form 990-ready financial summaries</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_P8ZN" id="organization-join-policy">Organization Join Policy<a href="https://www.standshare.app/docs/changelog/v0-2-0#organization-join-policy" class="hash-link" aria-label="Direct link to Organization Join Policy" title="Direct link to Organization Join Policy" translate="no">​</a></h3>
<p>Admins can now control how new members join their organization.</p>
<ul>
<li class=""><strong>Open registration</strong> — anyone can join with an organization link</li>
<li class=""><strong>Invite-only</strong> — only users with an invitation can join</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_P8ZN" id="venue-discovery">Venue Discovery<a href="https://www.standshare.app/docs/changelog/v0-2-0#venue-discovery" class="hash-link" aria-label="Direct link to Venue Discovery" title="Direct link to Venue Discovery" translate="no">​</a></h3>
<p>A platform-wide directory for browsing venues that are seeking staffing partners.</p>
<ul>
<li class=""><strong>Venue directory</strong> — searchable list of venues on the StandShare platform</li>
<li class=""><strong>Filters</strong> — search by city, state, and venue type (stadium, arena, amphitheater, convention center, fairground)</li>
<li class=""><strong>Venue details</strong> — view capacity, location, verification status, and managing organization</li>
<li class=""><strong>Pagination</strong> — browse large result sets across multiple pages</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_P8ZN" id="tier-catalog-and-billing">Tier Catalog and Billing<a href="https://www.standshare.app/docs/changelog/v0-2-0#tier-catalog-and-billing" class="hash-link" aria-label="Direct link to Tier Catalog and Billing" title="Direct link to Tier Catalog and Billing" translate="no">​</a></h3>
<p>Subscription management and feature gating for organizations.</p>
<ul>
<li class=""><strong>Subscription tiers</strong> — organizations can view and manage their subscription level</li>
<li class=""><strong>Feature gates</strong> — access to advanced features is controlled by subscription tier</li>
<li class=""><strong>Upgrade prompts</strong> — users see contextual upgrade messages when accessing gated features</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_P8ZN" id="landing-page-customization">Landing Page Customization<a href="https://www.standshare.app/docs/changelog/v0-2-0#landing-page-customization" class="hash-link" aria-label="Direct link to Landing Page Customization" title="Direct link to Landing Page Customization" translate="no">​</a></h3>
<p>Admins can now customize their organization's public-facing landing page with branding, messaging, and layout options.</p>
<h3 class="anchor anchorTargetStickyNavbar_P8ZN" id="data-export-download-my-data">Data Export (Download My Data)<a href="https://www.standshare.app/docs/changelog/v0-2-0#data-export-download-my-data" class="hash-link" aria-label="Direct link to Data Export (Download My Data)" title="Direct link to Data Export (Download My Data)" translate="no">​</a></h3>
<p>Users can download a copy of their personal data from StandShare, including profile information, transaction history, and event participation records.</p>
<h3 class="anchor anchorTargetStickyNavbar_P8ZN" id="worker-performance-dashboard">Worker Performance Dashboard<a href="https://www.standshare.app/docs/changelog/v0-2-0#worker-performance-dashboard" class="hash-link" aria-label="Direct link to Worker Performance Dashboard" title="Direct link to Worker Performance Dashboard" translate="no">​</a></h3>
<p>Admins can view worker performance metrics including attendance rates, events worked, and reliability scores to help with staffing decisions.</p>
<h3 class="anchor anchorTargetStickyNavbar_P8ZN" id="leaderboard-and-gamification">Leaderboard and Gamification<a href="https://www.standshare.app/docs/changelog/v0-2-0#leaderboard-and-gamification" class="hash-link" aria-label="Direct link to Leaderboard and Gamification" title="Direct link to Leaderboard and Gamification" translate="no">​</a></h3>
<p>A family leaderboard that ranks families by events worked, total earnings, and attendance rate. Includes medal icons for top performers and sortable columns.</p>
<h2 class="anchor anchorTargetStickyNavbar_P8ZN" id="improvements">Improvements<a href="https://www.standshare.app/docs/changelog/v0-2-0#improvements" class="hash-link" aria-label="Direct link to Improvements" title="Direct link to Improvements" translate="no">​</a></h2>
<ul>
<li class="">Centralized environment variable validation with Zod for safer deployments</li>
<li class="">Platform venue directory with suggest-edit workflow and claim process</li>
<li class="">Tenant discovery heatmap and platform privacy settings</li>
<li class="">Enhanced E2E test suite: RBAC matrix tests, settlement calculation assertions, API response verification, resilient locators replacing CSS selectors</li>
<li class="">Rate limit integration tests for API security</li>
<li class="">Auth middleware unit tests and refreshed-auth verification</li>
<li class="">Name alias and attendance import support</li>
<li class="">Demo seed pipeline stabilization and validation improvements</li>
<li class="">Venue-scoped access enforcement</li>
<li class="">Blog site with launch posts</li>
<li class="">Shared brand package for consistent Header, Footer, and Logo across web properties</li>
<li class="">Docs site restructured with updated navigation and base URL</li>
</ul>
<hr>
<p><a href="https://github.com/GraditiPro/StandShare/releases/tag/v0.2.0" target="_blank" rel="noopener noreferrer" class="">View on GitHub</a></p>]]></content:encoded>
            <category>Release</category>
        </item>
        <item>
            <title><![CDATA[v0.1.0]]></title>
            <link>https://www.standshare.app/docs/changelog/v0-1-0</link>
            <guid>https://www.standshare.app/docs/changelog/v0-1-0</guid>
            <pubDate>Fri, 20 Feb 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Initial platform foundations: calendar feeds, attendance import, profile extensions, release infrastructure.]]></description>
            <content:encoded><![CDATA[<p>Initial platform foundations: calendar feeds, attendance import, profile extensions, release infrastructure.</p>
<h2 class="anchor anchorTargetStickyNavbar_P8ZN" id="new-features">New Features<a href="https://www.standshare.app/docs/changelog/v0-1-0#new-features" class="hash-link" aria-label="Direct link to New Features" title="Direct link to New Features" translate="no">​</a></h2>
<ul>
<li class="">add create-release job to promote-demo workflow (<code>4983fe3</code>)</li>
<li class="">add changelog section to docs site (<code>92b69bc</code>)</li>
<li class="">add changelog page generation script (<code>375d0af</code>)</li>
<li class="">add version calculation script for release pipeline (<code>d652a78</code>)</li>
<li class="">add FEATURES.md gate for feat() commits in CI (<code>176c241</code>)</li>
<li class="">add ElastiCache Redis + fix CI deploy order (<code>cfd6536</code>)</li>
<li class="">add Cloudflare DNS Custom Resource for automated DNS lifecycle (<code>f7def85</code>)</li>
<li class="">add ElastiCache Redis t4g.micro to all environments (<code>47e09ea</code>)</li>
<li class="">POST /funds endpoint + correct org slugs in seed (#448) (<code>420a554</code>)</li>
<li class="">pulse entire in-progress wave row during seed import (<code>9ea822b</code>)</li>
<li class="">live SSE progress for seed import (<code>432e7b1</code>)</li>
<li class="">name alias system and attendance import matching (#442) (<code>6f7502b</code>)</li>
<li class="">auto-update OpenAPI spec in CI instead of failing (<code>827cba5</code>)</li>
<li class="">add admin UI for iCal feed management (ICAL-395-14) (#444) (<code>83d1e41</code>)</li>
<li class="">expanded user profiles, custom fields, and profile images (#441) (<code>625570b</code>)</li>
<li class="">Auto-create events from iCal feed subscriptions (#439) (<code>a8275a6</code>)</li>
<li class="">name mapping/alias system for attendance imports (#436) (<code>24d1a3e</code>)</li>
<li class="">custom calendar feeds — iCal subscriptions for events (#430) (<code>33b7140</code>)</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_P8ZN" id="bug-fixes">Bug Fixes<a href="https://www.standshare.app/docs/changelog/v0-1-0#bug-fixes" class="hash-link" aria-label="Direct link to Bug Fixes" title="Direct link to Bug Fixes" translate="no">​</a></h2>
<ul>
<li class="">increase fetch depth, add changelog to navbar, validate VERSION input (<code>6d704c5</code>)</li>
<li class="">rename formula→expression in settlement template calculationConfig (#462) (<code>1611761</code>)</li>
<li class="">guard w.records against undefined in SeedManagement failures derivation (#461) (<code>afe287c</code>)</li>
<li class="">surface real Redis/DB status — never silently pass on infra failures (<code>9981d63</code>)</li>
<li class="">stabilise Redis CF state — DeletionPolicy<!-- -->:Retain<!-- --> + remove cross-stack ref (<code>4634299</code>)</li>
<li class="">rename RedisSecret construct to force fresh CF logical ID (<code>c2536c4</code>)</li>
<li class="">use per-wave Redis keys instead of one growing array (<code>09b8338</code>)</li>
<li class="">log poll errors instead of silently swallowing them (<code>61b1135</code>)</li>
<li class="">switch seed progress from SSE to Redis polling (<code>979b7c5</code>)</li>
<li class="">manually set CORS headers on SSE stream route (<code>d177830</code>)</li>
<li class="">separate concurrency groups for fast-path deploy jobs (<code>4f315a1</code>)</li>
<li class="">SSE stream endpoint is GET not POST (<code>86064eb</code>)</li>
<li class="">profile XSS sanitization, phone validation, avg completeness, batch transaction (#447) (<code>7d083ee</code>)</li>
<li class="">change AJV removeAdditional from 'all' to true (<code>b997da6</code>)</li>
<li class="">correct Wave 2 branding orgRefs — NPO-00x → ctysa/acf/wbb (<code>9ef507d</code>)</li>
<li class="">correct Reset Tenant deletion order — clear all org child tables before organizations (<code>79c8894</code>)</li>
<li class="">handle null advisories in pnpm audit JSON output (#438) (<code>c285bd9</code>)</li>
<li class="">surface platform<!-- -->:manage<!-- --> denial reason + protect <a href="mailto:admin@standshare.app" target="_blank" rel="noopener noreferrer" class="">admin@standshare.app</a> (#437) (<code>342a5c2</code>)</li>
<li class="">drop audit_logs user FK to allow user deletion without cascade (#435) (<code>4a8ad8e</code>)</li>
<li class="">remove /api prefix from inject URLs + correct API_STANDARDS (#433) (<code>748848c</code>)</li>
<li class="">wave handler bugs + SSE streaming (#428) (<code>9db1f72</code>)</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_P8ZN" id="maintenance">Maintenance<a href="https://www.standshare.app/docs/changelog/v0-1-0#maintenance" class="hash-link" aria-label="Direct link to Maintenance" title="Direct link to Maintenance" translate="no">​</a></h2>
<ul>
<li class="">update FEATURES.md with calendar feeds, name aliases, attendance import; add PLATFORM_RELEASE_API_KEY to SECRETS.md (<code>80f465f</code>)</li>
<li class="">add version_override input to promote-demo workflow (<code>1e30a2e</code>)</li>
<li class="">fill ~100% feature docs gap — 15 new pages, 4 updates, private admin-docs Docusaurus instance (#449) (<code>4cc1a25</code>)</li>
<li class="">add Map View and charity enrichment design doc (<code>f1c3baf</code>)</li>
<li class="">add PRD and TRD for docs coverage epic (#445) (<code>b20d497</code>)</li>
<li class="">add favicons to all sites (web, admin, marketing, docs) (<code>71806f9</code>)</li>
<li class="">add Tailscale subnet router setup details to DATABASE_ACCESS.md (<code>8c808ed</code>)</li>
<li class="">update DATABASE_ACCESS.md — direct psql via Tailscale subnet routing, no SSH needed (<code>a3e3a9b</code>)</li>
<li class="">add .env.dev refresh command to DATABASE_ACCESS.md (<code>38a31ab</code>)</li>
<li class="">add DATABASE_ACCESS.md — Tailscale/bastion guide for dev/demo DB (<code>026a8da</code>)</li>
<li class="">add task completion speech notification rule to CLAUDE.md (<code>d9e5bd7</code>)</li>
</ul>
<hr>
<p><a href="https://github.com/GraditiPro/StandShare/releases/tag/v0.1.0" target="_blank" rel="noopener noreferrer" class="">View on GitHub</a></p>]]></content:encoded>
            <category>Release</category>
        </item>
    </channel>
</rss>