URLs: /assemblies/ (index), /assemblies/[slug]/ (detail)
Files: src/pages/assemblies/index.astro, src/pages/assemblies/[slug].astro
The /assemblies/ index page is a product explanation page followed by assembly listings. It explains what Assemblies are, why they exist, and how they work — then lists active and completed assemblies.
The index page has these sections in order:
| Section | Component | Content type |
|---|---|---|
| Hero | Hero |
Static — "Ask a Question. Get the Industry's Answer." headline and body |
| Upcoming Assemblies | Inline <section id="active"> |
Dynamic — from assemblies.json (only shown if active assemblies exist) |
| What Harmony Does | FeatureGrid (3 cols, bordered) |
Static — 3 accountability features |
| What is an Assembly | TextWithImage |
Static — explanation + image |
| Assembly Types | FeatureGrid (3 cols, cards) |
Static — Private / Public / Open (Open has CTA to enquiry form) |
| How It Works | VerticalPipeline |
Static — 6-step Harmony process |
| The Problem | FeatureGrid (3 cols, cards) |
Static — 3 barriers to consensus |
| Who Gets Access | FeatureGrid (2 cols, cards) |
Static — 4 access tiers |
| Completed Assemblies | Inline <section> |
Dynamic — from assemblies.json (only shown if completed exist) |
| FAQ | Inline <section> with <details> accordion |
Static — 10 questions |
| CTA Banner | CTABanner |
Static — links to /membership/ |
All assembly data comes from src/data/assemblies.json, fetched from the Notion Assemblies database. See Notion doc for database properties.
The fetch script also extracts the Notion page body content: anything below a "Details" heading is converted to HTML and stored in the detailsHtml field.
Assembly status is a Notion "status" type property (not "select"). The exact values and their effects:
| Status | Visible on site? | Where shown | Application form? |
|---|---|---|---|
Apply now |
Yes | "Upcoming assemblies" | Yes — full application form |
Register interest |
Yes | "Upcoming assemblies" | Yes — interest registration form |
Upcoming |
Yes | "Upcoming assemblies" | Yes — interest registration form |
In Progress |
Yes | "Upcoming assemblies" | No |
Done |
Yes | "Completed assemblies" | No — shows report link if available |
Pending |
Hidden | Not shown | — |
Backlog |
Hidden | Not shown | — |
The fetch script sorts assemblies by status priority: Apply now (0) → Register interest (1) → In Progress (2) → Upcoming (3) → Done (4) → Pending (5) → Backlog (6), then alphabetical by name.
- Visible: all assemblies except
BacklogandPending - Active section: statuses
Apply now,Register interest,Upcoming,In Progress - Completed section: status
Done, sorted by end date (most recent first)
Only visible assemblies (not Backlog or Pending) generate detail pages.
Each assembly has an optional Visibility field:
| Visibility | Badge colour | Meaning |
|---|---|---|
Public |
Green (accent) | Open to anyone |
GSF Members Only |
Teal (primary) | Members-only |
Invite Only |
Dark teal (primary-darker) | By invitation |
The "See active assemblies" CTA button only appears if there are active assemblies, to avoid a dead anchor link. The "Propose an Assembly" CTA always links to /membership/enquire/.
Inline <section> using native <details>/<summary> HTML for zero-JS accordion behaviour. 10 questions covering Harmony's role, human accountability, consensus model, energy use, and participation. Content is static — update it directly in the page file.
The form appears on detail pages (not the index) when status is Apply now, Register interest, or Upcoming.
*About you (required marked with ):
- Full name *
- Work email *
- Organisation *
- Job title
- LinkedIn profile URL
- GitHub username
- Sector/Industry (dropdown: Cloud & Infrastructure, AI & ML, Financial Services, Energy & Utilities, Government, Healthcare, Manufacturing, Telecommunications, Consulting, Academia & Research, Non-profit/NGO, Other)
- Timezone
- Years of experience (dropdown: 0–2, 3–5, 5–10, 10–15, 15+)
Your contribution:
- Relevant expertise * (textarea)
- Motivation * (textarea)
- Previous GSF involvement (textarea)
- How did you hear about this assembly?
Confirmations:
- Attendance commitment checkbox *
- Stay informed checkbox (optional)
- Privacy policy consent checkbox *
- Method: Netlify Forms (
data-netlify="true") - Action: posts to the assembly's own URL
- Hidden fields:
form-name,assembly-name,assembly-id - Spam protection: honeypot field (
bot-field) - Client-side handling: JavaScript intercepts submission, shows success/error state, tracks
assembly_applicationGA4 event withassembly_nameparameter
- For
Apply now: "Application submitted" message - For
Register interest/Upcoming: "Interest registered" message
When status is Done:
- Hero uses a light grey background (instead of dark teal)
- "Completed" badge shown
- If
reportUrlis set, a "Read the report" CTA button appears - If no
reportUrl, shows "Report incoming — check back soon" - Date range and participant count shown on the card
The detail page displays available metadata in a compact grid:
- Deliverable, Purpose, Stage, Facilitator
- Start Date, End Date, Applications Open, Application Deadline
- Seats, Participants (average attendees)
If the assembly has a workingGroup relation (resolved from Notion PWCIs), a "Governing Body" section appears with the working group name and optional directory link.
| Change | Where |
|---|---|
| Create new assembly | Add to Notion Assemblies DB |
| Open/close applications | Change Status in Notion |
| Add details content | Add content directly to the Notion page body |
| Set report URL | Set Report URL field in Notion |
| Change visibility | Set Visibility field in Notion |
| Update FAQ answers | Edit the inline array in src/pages/assemblies/index.astro section 9 |
| Update static section text (harmony, what is, types, problem, access) | Edit the component props directly in src/pages/assemblies/index.astro |
See Notion doc for the full list of Assemblies DB properties.