{
    "version": "https://jsonfeed.org/version/1",
    "title": "StandShare Changelog",
    "home_page_url": "https://www.standshare.app/docs/changelog",
    "description": "Release notes for StandShare — concession stand fundraising platform.",
    "items": [
        {
            "id": "https://www.standshare.app/docs/changelog/v0-4-0",
            "content_html": "<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>\n<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>\n<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>\n<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>\n<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>\n<p>Upload up to 100 images (500 MB total on free tier) and arrange them in grid or masonry layouts.</p>\n<ul>\n<li class=\"\"><strong>Multiple layouts</strong>: 3-column grid, 4-column grid, or masonry</li>\n<li class=\"\"><strong>Lightbox preview</strong>: Click any image to see a full-screen viewer</li>\n<li class=\"\"><strong>Alt text for accessibility</strong>: Every image requires alt text to meet WCAG standards</li>\n<li class=\"\"><strong>Image library</strong>: Reuse images across sections without re-uploading</li>\n</ul>\n<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>\n<p>Create collapsible FAQ sections with rich text answers.</p>\n<ul>\n<li class=\"\"><strong>Drag-to-reorder</strong> questions for logical flow</li>\n<li class=\"\"><strong>Rich text support</strong>: Format answers with bold, italic, links, and headings</li>\n<li class=\"\"><strong>Auto-anchor nav</strong>: FAQ titles appear in the sticky sidebar for easy jumping</li>\n</ul>\n<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>\n<p>Showcase partner organizations with their logos and optional links.</p>\n<ul>\n<li class=\"\"><strong>Grid layout</strong> with customizable link targets</li>\n<li class=\"\"><strong>Image handling</strong>: Upload logos or paste external image URLs</li>\n<li class=\"\"><strong>Auto-sizing</strong>: Logos scale uniformly while maintaining aspect ratio</li>\n</ul>\n<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>\n<p>Embed YouTube and Vimeo videos directly on your microsite.</p>\n<ul>\n<li class=\"\"><strong>Supported providers</strong>: YouTube and Vimeo only (strict allowlist for security)</li>\n<li class=\"\"><strong>Responsive sizing</strong>: Videos scale to fit mobile and desktop screens</li>\n<li class=\"\"><strong>No raw URLs</strong>: Video IDs are extracted and stored; raw URLs never saved</li>\n</ul>\n<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>\n<p>Every section's title automatically appears in a sticky sidebar nav.</p>\n<ul>\n<li class=\"\"><strong>Smooth scrolling</strong>: Click any section title to jump to that section</li>\n<li class=\"\"><strong>Active highlight</strong>: Current section is highlighted as you scroll</li>\n<li class=\"\"><strong>Mobile-friendly</strong>: Nav collapses on small screens to save space</li>\n</ul>\n<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>\n<p>Tiptap-powered rich text in FAQ answers and custom text sections.</p>\n<ul>\n<li class=\"\"><strong>Inline formatting</strong>: Bold, italic, and links</li>\n<li class=\"\"><strong>Structured content</strong>: Headings and paragraphs</li>\n<li class=\"\"><strong>Safe sanitization</strong>: XSS protection via server-side allowlist</li>\n</ul>\n<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>\n<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>\n<p>We're tracking demand for per-section drafts — let us know if this workflow is a pain point for your team.</p>\n<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>\n<ul>\n<li class=\"\"><strong>Free tier</strong>: 100 images, 5 MB per image, 500 MB total per org</li>\n<li class=\"\"><strong>Paid tier</strong>: 500 images, 10 MB per image, 5 GB total per org</li>\n</ul>\n<p>Overages are rejected with a clear error message prompting you to delete unused images or upgrade your plan.</p>\n<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>\n<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>\n<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>\n<ul>\n<li class=\"\"><strong>Database</strong>: Page drafts tracked via <code>microsite_pages.published_at</code> (NULL = draft)</li>\n<li class=\"\"><strong>Sections</strong>: Stored as JSON in <code>microsite_sections.content</code>; validated against the section registry on save</li>\n<li class=\"\"><strong>Rich text</strong>: Stored as ProseMirror JSON; sanitized at write time, never with <code>dangerouslySetInnerHTML</code> at render</li>\n<li class=\"\"><strong>Public routes</strong>: Tenant resolution via subdomain-authoritative model (no X-Tenant-Slug trust)</li>\n</ul>\n<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>\n<ul>\n<li class=\"\">Per-section draft state (future version)</li>\n<li class=\"\">Section templates and cloning</li>\n<li class=\"\">Analytics dashboard integration</li>\n<li class=\"\">Scheduled publish dates</li>\n</ul>",
            "url": "https://www.standshare.app/docs/changelog/v0-4-0",
            "title": "v0.4.0 — Phase 1 Microsite",
            "summary": "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.",
            "date_modified": "2026-05-17T00:00:00.000Z",
            "author": {
                "name": "StandShare Team",
                "url": "https://www.standshare.app"
            },
            "tags": [
                "Release"
            ]
        },
        {
            "id": "https://www.standshare.app/docs/changelog/v0-3-0",
            "content_html": "<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>\n<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>\n<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>\n<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>\n<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>\n<p>Two orgs can now share workers for events — host and partner relationships with an explicit collaboration record.</p>\n<ul>\n<li class=\"\"><strong>Partnerships</strong> — either org invites the other; mutual acceptance required before any collaboration can happen.</li>\n<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>\n<li class=\"\"><strong>Cross-tenant worker assignment</strong> — partner-org workers show up on the host's event without leaving their home org.</li>\n<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>\n<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>\n<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>\n</ul>\n<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>\n<p>Real fiscal-year boundaries for the organization ledger.</p>\n<ul>\n<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>\n<li class=\"\"><strong>Header badge</strong> on the Ledger page shows the currently selected period; gear icon opens Period Settings for admins.</li>\n<li class=\"\"><strong>Rename, start a new period, or view period history</strong> from the settings modal.</li>\n<li class=\"\"><strong>Closed periods are read-only</strong> — historical entries stay fully queryable but totals are frozen.</li>\n<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>\n</ul>\n<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>\n<p>Admins and treasurers now have a dedicated <code>/ledger</code> page (separate from family account views).</p>\n<ul>\n<li class=\"\">Account selector groups org, family, and fund accounts.</li>\n<li class=\"\">Filterable, paginated entry table with URL-persisted filter state.</li>\n<li class=\"\">Every entry links back to the underlying event, family, settlement, or scholarship record that generated it.</li>\n<li class=\"\">Read-only when viewing a closed period.</li>\n</ul>\n<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>\n<p>Payees (the vendors, schools, and individuals your org sends checks to) are now rich records, not just names.</p>\n<ul>\n<li class=\"\"><strong>Manage Payees drawer</strong> from any scholarship page (requires <code>payees.manage</code>).</li>\n<li class=\"\"><strong>Create Payee modal</strong> with contact info, logo, default payment method, payment instructions, addresses, tax ID, and admin notes.</li>\n<li class=\"\"><strong>Reimburse Me</strong> shortcut — first option in every Payee dropdown, resolves to the system self-reimbursement payee.</li>\n<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>\n<li class=\"\"><strong>Masked tax IDs</strong> — only users with <code>payees.view_tax_id</code> see the unmasked value.</li>\n</ul>\n<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>\n<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>\n<ul>\n<li class=\"\"><strong>Events Hub</strong> with unified List and Calendar tabs.</li>\n<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>\n<li class=\"\"><strong>Roster drawer</strong> holds Check-In, Mark All Attended, assignments, and attendance edits in one place.</li>\n<li class=\"\"><strong>Settlement drawer</strong> replaces the old Settle Event page; read-only for already-settled events.</li>\n<li class=\"\"><strong>Tabbed Edit Event modal</strong> — Details and Stands tabs; AdminEventEdit page retired.</li>\n<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>\n<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>\n</ul>\n<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>\n<p>The family-side event list got richer cards and a new filter.</p>\n<ul>\n<li class=\"\"><strong>Signed up / Not signed up / All</strong> filter chips below the search.</li>\n<li class=\"\"><strong>Worked pill</strong> on completed and settled events the family attended.</li>\n<li class=\"\"><strong>Rate display</strong> on settled events shows the configured per-worker rate.</li>\n<li class=\"\"><strong>Capacity display</strong> — \"X spots left\" or \"Full\" when Max Workers is set.</li>\n<li class=\"\"><strong>Cursor-based pagination</strong> with a Load More button replacing Previous/Next controls.</li>\n</ul>\n<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>\n<p>Family leads can now manage workers and credentials for workers they sponsor without admin intervention.</p>\n<ul>\n<li class=\"\"><strong>Family Workers panel</strong> in profile settings lists every worker with credential status badges (Registered / Invited / No Login).</li>\n<li class=\"\"><strong>Send Registration Link</strong> — invite a worker to create their own login.</li>\n<li class=\"\"><strong>Send Password Reset</strong> — email a reset link to a worker who's locked out.</li>\n<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>\n<li class=\"\"><strong>Worker avatar upload</strong> in the Edit Worker modal for registered workers.</li>\n</ul>\n<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>\n<p>Admin tooling moves from a flat sidebar into a tabbed workspace at <code>/admin/hub</code>.</p>\n<ul>\n<li class=\"\"><strong>Five tabs</strong>: People, Events, Finance, Content, Org Settings.</li>\n<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>\n<li class=\"\"><strong>Per-tab icon color</strong> (violet / amber / emerald / sky / slate) for visual scanning.</li>\n<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>\n<li class=\"\"><strong>Branding and Landing Page</strong> moved from Content to Org Settings (configuration, not content).</li>\n<li class=\"\"><strong>Payees</strong> added as a Finance tab card with a standalone <code>/admin/payees</code> page.</li>\n</ul>\n<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>\n<p>Configurable WHEN/IF/THEN automation for org admins on the Full/Professional tier.</p>\n<ul>\n<li class=\"\"><strong>18 trigger types</strong> across worker, event, waitlist, scholarship, and document categories.</li>\n<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>\n<li class=\"\"><strong>Actions</strong>: notification, email, or ledger penalty — all with variable substitution in message templates.</li>\n<li class=\"\"><strong>Execution log</strong> with chain tree visualization when one rule's action triggers another.</li>\n<li class=\"\"><strong>Dry-run preview</strong> before enabling a rule.</li>\n</ul>\n<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>\n<p>Public landing page for QR-code and link invites — <code>{tenant}.standshare.app/join?token=…</code>.</p>\n<ul>\n<li class=\"\">Shows org name, inviter, expiry, and intent (new family vs help-my-family).</li>\n<li class=\"\">Handles unauthenticated (register-and-accept) and authenticated (accept/decline) states.</li>\n<li class=\"\">Friendly error copy for expired, revoked, already-used, and not-found invites.</li>\n</ul>\n<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>\n<p>Web browser push via Ably — in addition to in-app and email notifications.</p>\n<ul>\n<li class=\"\">Enable from the Notifications tab of Profile.</li>\n<li class=\"\">Foreground suppression — no duplicate banner when the tab is focused.</li>\n<li class=\"\">Supported on Chrome, Edge, Firefox, and Safari on desktop and Android. iOS Safari deferred.</li>\n</ul>\n<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>\n<p>Header primary links are now role-aware.</p>\n<ul>\n<li class=\"\">Family Lead / Coordinator / Treasurer: <strong>Dashboard · Events · Scholarships</strong></li>\n<li class=\"\">Admin: <strong>Dashboard · Events · Admin Hub</strong></li>\n<li class=\"\">Guest Worker: <strong>Dashboard · Events</strong></li>\n<li class=\"\">Secondary pages live behind an icon-only <strong>overflow</strong> button.</li>\n<li class=\"\">Avatar menu replaces the old name/email/gear strip — holds profile, org switcher, and sign-out.</li>\n</ul>\n<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>\n<p>Event capacity is now measured in <strong>slots</strong> (worker positions), not stands (physical booths).</p>\n<ul>\n<li class=\"\"><code>filledSlots</code> and <code>totalSlots</code> are the canonical capacity fields.</li>\n<li class=\"\">Family cards say \"X spots left\" or \"Full\"; admin cards show \"X / Y workers\" with the coverage bar.</li>\n<li class=\"\">One physical stand can still be staffed by multiple workers — stands are the booth, slots are the seats.</li>\n</ul>\n<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>\n<ul>\n<li class=\"\"><strong>Document requirements</strong> are now per-org scoped (<code>tenant_org_id</code>); cross-tenant requirement leakage is fixed.</li>\n<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>\n<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>\n</ul>\n<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>\n<ul>\n<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>\n<li class=\"\"><strong>Group-aware signup windows</strong> — tiered signup honors Dynamic Group membership with OR semantics across multi-family workers.</li>\n<li class=\"\"><strong>Session expiration UX</strong> — 401 intercepts now show a modal and redirect back to the original destination after login.</li>\n<li class=\"\"><strong>OAuth and magic link login</strong> preserve the redirect destination, so shared deep links work for logged-out recipients.</li>\n<li class=\"\"><strong>Payee enrichment migration</strong> — additive only (new columns with defaults/nullable). Safe to deploy without downtime.</li>\n</ul>\n<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>\n<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>\n<hr>\n<p><a href=\"https://github.com/GraditiPro/StandShare/releases/tag/v0.3.0\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">View on GitHub</a></p>",
            "url": "https://www.standshare.app/docs/changelog/v0-3-0",
            "title": "v0.3.0",
            "summary": "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.",
            "date_modified": "2026-04-17T00:00:00.000Z",
            "author": {
                "name": "StandShare Team",
                "url": "https://www.standshare.app"
            },
            "tags": [
                "Release"
            ]
        },
        {
            "id": "https://www.standshare.app/docs/changelog/v0-2-0",
            "content_html": "<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>\n<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>\n<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>\n<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>\n<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>\n<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>\n<ul>\n<li class=\"\"><strong>Worker QR credentials</strong> — secure, auto-refreshing QR codes generated per event</li>\n<li class=\"\"><strong>Camera-based scanner</strong> — works in any modern browser, no app install needed</li>\n<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>\n<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>\n<li class=\"\"><strong>CSV export</strong> — download check-in data from the dashboard</li>\n</ul>\n<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>\n<p>A complete learning management system for training concession stand workers before they work events.</p>\n<ul>\n<li class=\"\"><strong>Training modules</strong> — create modules with uploaded or linked video content (YouTube, Vimeo, or direct upload to S3)</li>\n<li class=\"\"><strong>Video progress tracking</strong> — segment-based progress with skip prevention, auto-resume, and visual segment bar</li>\n<li class=\"\"><strong>Assessments</strong> — multiple choice, true/false, matching, and attestation question types with configurable passing scores and retry limits</li>\n<li class=\"\"><strong>Training programs</strong> — bundle modules into ordered programs for comprehensive onboarding</li>\n<li class=\"\"><strong>Assignment management</strong> — assign modules or programs to individuals with due dates and required flags</li>\n<li class=\"\"><strong>Completion tracking and export</strong> — view completions per module, export to CSV for compliance records</li>\n</ul>\n<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>\n<p>Venue operators now have their own portal with dedicated tools for managing concession operations across multiple organizations.</p>\n<ul>\n<li class=\"\"><strong>Operator dashboard</strong> — overview of venue operations, agreements, and compliance status</li>\n<li class=\"\"><strong>Agreements and compliance</strong> — manage operator-organization agreements, track compliance requirements</li>\n<li class=\"\"><strong>Venue notices</strong> — post and manage notices for organizations operating at your venues</li>\n<li class=\"\"><strong>Worker compliance view</strong> — operators can verify worker compliance status</li>\n<li class=\"\"><strong>Operator-scoped QR check-in</strong> — scanner and dashboard access for operator staff</li>\n<li class=\"\"><strong>Group management</strong> — organize venues and users into operator groups</li>\n</ul>\n<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>\n<p>Nonprofit organizations can now generate IRS Form 990 data directly from StandShare.</p>\n<ul>\n<li class=\"\"><strong>Fiscal year configuration</strong> — define your organization's fiscal year</li>\n<li class=\"\"><strong>Allocation mapping</strong> — map StandShare transaction types to Form 990 categories</li>\n<li class=\"\"><strong>Report generation</strong> — produce Form 990-ready financial summaries</li>\n</ul>\n<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>\n<p>Admins can now control how new members join their organization.</p>\n<ul>\n<li class=\"\"><strong>Open registration</strong> — anyone can join with an organization link</li>\n<li class=\"\"><strong>Invite-only</strong> — only users with an invitation can join</li>\n</ul>\n<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>\n<p>A platform-wide directory for browsing venues that are seeking staffing partners.</p>\n<ul>\n<li class=\"\"><strong>Venue directory</strong> — searchable list of venues on the StandShare platform</li>\n<li class=\"\"><strong>Filters</strong> — search by city, state, and venue type (stadium, arena, amphitheater, convention center, fairground)</li>\n<li class=\"\"><strong>Venue details</strong> — view capacity, location, verification status, and managing organization</li>\n<li class=\"\"><strong>Pagination</strong> — browse large result sets across multiple pages</li>\n</ul>\n<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>\n<p>Subscription management and feature gating for organizations.</p>\n<ul>\n<li class=\"\"><strong>Subscription tiers</strong> — organizations can view and manage their subscription level</li>\n<li class=\"\"><strong>Feature gates</strong> — access to advanced features is controlled by subscription tier</li>\n<li class=\"\"><strong>Upgrade prompts</strong> — users see contextual upgrade messages when accessing gated features</li>\n</ul>\n<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>\n<p>Admins can now customize their organization's public-facing landing page with branding, messaging, and layout options.</p>\n<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>\n<p>Users can download a copy of their personal data from StandShare, including profile information, transaction history, and event participation records.</p>\n<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>\n<p>Admins can view worker performance metrics including attendance rates, events worked, and reliability scores to help with staffing decisions.</p>\n<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>\n<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>\n<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>\n<ul>\n<li class=\"\">Centralized environment variable validation with Zod for safer deployments</li>\n<li class=\"\">Platform venue directory with suggest-edit workflow and claim process</li>\n<li class=\"\">Tenant discovery heatmap and platform privacy settings</li>\n<li class=\"\">Enhanced E2E test suite: RBAC matrix tests, settlement calculation assertions, API response verification, resilient locators replacing CSS selectors</li>\n<li class=\"\">Rate limit integration tests for API security</li>\n<li class=\"\">Auth middleware unit tests and refreshed-auth verification</li>\n<li class=\"\">Name alias and attendance import support</li>\n<li class=\"\">Demo seed pipeline stabilization and validation improvements</li>\n<li class=\"\">Venue-scoped access enforcement</li>\n<li class=\"\">Blog site with launch posts</li>\n<li class=\"\">Shared brand package for consistent Header, Footer, and Logo across web properties</li>\n<li class=\"\">Docs site restructured with updated navigation and base URL</li>\n</ul>\n<hr>\n<p><a href=\"https://github.com/GraditiPro/StandShare/releases/tag/v0.2.0\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">View on GitHub</a></p>",
            "url": "https://www.standshare.app/docs/changelog/v0-2-0",
            "title": "v0.2.0",
            "summary": "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.",
            "date_modified": "2026-03-21T00:00:00.000Z",
            "author": {
                "name": "StandShare Team",
                "url": "https://www.standshare.app"
            },
            "tags": [
                "Release"
            ]
        },
        {
            "id": "https://www.standshare.app/docs/changelog/v0-1-0",
            "content_html": "<p>Initial platform foundations: calendar feeds, attendance import, profile extensions, release infrastructure.</p>\n<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>\n<ul>\n<li class=\"\">add create-release job to promote-demo workflow (<code>4983fe3</code>)</li>\n<li class=\"\">add changelog section to docs site (<code>92b69bc</code>)</li>\n<li class=\"\">add changelog page generation script (<code>375d0af</code>)</li>\n<li class=\"\">add version calculation script for release pipeline (<code>d652a78</code>)</li>\n<li class=\"\">add FEATURES.md gate for feat() commits in CI (<code>176c241</code>)</li>\n<li class=\"\">add ElastiCache Redis + fix CI deploy order (<code>cfd6536</code>)</li>\n<li class=\"\">add Cloudflare DNS Custom Resource for automated DNS lifecycle (<code>f7def85</code>)</li>\n<li class=\"\">add ElastiCache Redis t4g.micro to all environments (<code>47e09ea</code>)</li>\n<li class=\"\">POST /funds endpoint + correct org slugs in seed (#448) (<code>420a554</code>)</li>\n<li class=\"\">pulse entire in-progress wave row during seed import (<code>9ea822b</code>)</li>\n<li class=\"\">live SSE progress for seed import (<code>432e7b1</code>)</li>\n<li class=\"\">name alias system and attendance import matching (#442) (<code>6f7502b</code>)</li>\n<li class=\"\">auto-update OpenAPI spec in CI instead of failing (<code>827cba5</code>)</li>\n<li class=\"\">add admin UI for iCal feed management (ICAL-395-14) (#444) (<code>83d1e41</code>)</li>\n<li class=\"\">expanded user profiles, custom fields, and profile images (#441) (<code>625570b</code>)</li>\n<li class=\"\">Auto-create events from iCal feed subscriptions (#439) (<code>a8275a6</code>)</li>\n<li class=\"\">name mapping/alias system for attendance imports (#436) (<code>24d1a3e</code>)</li>\n<li class=\"\">custom calendar feeds — iCal subscriptions for events (#430) (<code>33b7140</code>)</li>\n</ul>\n<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>\n<ul>\n<li class=\"\">increase fetch depth, add changelog to navbar, validate VERSION input (<code>6d704c5</code>)</li>\n<li class=\"\">rename formula→expression in settlement template calculationConfig (#462) (<code>1611761</code>)</li>\n<li class=\"\">guard w.records against undefined in SeedManagement failures derivation (#461) (<code>afe287c</code>)</li>\n<li class=\"\">surface real Redis/DB status — never silently pass on infra failures (<code>9981d63</code>)</li>\n<li class=\"\">stabilise Redis CF state — DeletionPolicy<!-- -->:Retain<!-- --> + remove cross-stack ref (<code>4634299</code>)</li>\n<li class=\"\">rename RedisSecret construct to force fresh CF logical ID (<code>c2536c4</code>)</li>\n<li class=\"\">use per-wave Redis keys instead of one growing array (<code>09b8338</code>)</li>\n<li class=\"\">log poll errors instead of silently swallowing them (<code>61b1135</code>)</li>\n<li class=\"\">switch seed progress from SSE to Redis polling (<code>979b7c5</code>)</li>\n<li class=\"\">manually set CORS headers on SSE stream route (<code>d177830</code>)</li>\n<li class=\"\">separate concurrency groups for fast-path deploy jobs (<code>4f315a1</code>)</li>\n<li class=\"\">SSE stream endpoint is GET not POST (<code>86064eb</code>)</li>\n<li class=\"\">profile XSS sanitization, phone validation, avg completeness, batch transaction (#447) (<code>7d083ee</code>)</li>\n<li class=\"\">change AJV removeAdditional from 'all' to true (<code>b997da6</code>)</li>\n<li class=\"\">correct Wave 2 branding orgRefs — NPO-00x → ctysa/acf/wbb (<code>9ef507d</code>)</li>\n<li class=\"\">correct Reset Tenant deletion order — clear all org child tables before organizations (<code>79c8894</code>)</li>\n<li class=\"\">handle null advisories in pnpm audit JSON output (#438) (<code>c285bd9</code>)</li>\n<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>\n<li class=\"\">drop audit_logs user FK to allow user deletion without cascade (#435) (<code>4a8ad8e</code>)</li>\n<li class=\"\">remove /api prefix from inject URLs + correct API_STANDARDS (#433) (<code>748848c</code>)</li>\n<li class=\"\">wave handler bugs + SSE streaming (#428) (<code>9db1f72</code>)</li>\n</ul>\n<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>\n<ul>\n<li class=\"\">update FEATURES.md with calendar feeds, name aliases, attendance import; add PLATFORM_RELEASE_API_KEY to SECRETS.md (<code>80f465f</code>)</li>\n<li class=\"\">add version_override input to promote-demo workflow (<code>1e30a2e</code>)</li>\n<li class=\"\">fill ~100% feature docs gap — 15 new pages, 4 updates, private admin-docs Docusaurus instance (#449) (<code>4cc1a25</code>)</li>\n<li class=\"\">add Map View and charity enrichment design doc (<code>f1c3baf</code>)</li>\n<li class=\"\">add PRD and TRD for docs coverage epic (#445) (<code>b20d497</code>)</li>\n<li class=\"\">add favicons to all sites (web, admin, marketing, docs) (<code>71806f9</code>)</li>\n<li class=\"\">add Tailscale subnet router setup details to DATABASE_ACCESS.md (<code>8c808ed</code>)</li>\n<li class=\"\">update DATABASE_ACCESS.md — direct psql via Tailscale subnet routing, no SSH needed (<code>a3e3a9b</code>)</li>\n<li class=\"\">add .env.dev refresh command to DATABASE_ACCESS.md (<code>38a31ab</code>)</li>\n<li class=\"\">add DATABASE_ACCESS.md — Tailscale/bastion guide for dev/demo DB (<code>026a8da</code>)</li>\n<li class=\"\">add task completion speech notification rule to CLAUDE.md (<code>d9e5bd7</code>)</li>\n</ul>\n<hr>\n<p><a href=\"https://github.com/GraditiPro/StandShare/releases/tag/v0.1.0\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">View on GitHub</a></p>",
            "url": "https://www.standshare.app/docs/changelog/v0-1-0",
            "title": "v0.1.0",
            "summary": "Initial platform foundations: calendar feeds, attendance import, profile extensions, release infrastructure.",
            "date_modified": "2026-02-20T00:00:00.000Z",
            "author": {
                "name": "StandShare Team",
                "url": "https://www.standshare.app"
            },
            "tags": [
                "Release"
            ]
        }
    ]
}