Skip to content

Info-exchange homepage + platform support (land EWYAIX) #269

@rustynwac

Description

@rustynwac

Add an info-exchange homepage for centers that publish observations and host weather stations but don't issue forecasts — landing EWYAIX (Eastern Wyoming Avalanche Info Exchange, ewyoavalanche.org) as the first one.

Instead of the default forecast homepage (forecast copy + upcoming-events block), provisionTenant writes an info-exchange variant: observation-focused copy + an ObservationsWidget block. Everything else below is plumbing to make that homepage reachable and correct. NAC already models these centers (EWYAIX, SOAIX); our schema parsing and "every tenant forecasts" provisioning assumption currently reject them.

Ships as one PR — the EWYAIX seed is the end-to-end test.

Re-scoped 2026-06-11 from the original "add Eastern Idaho" ask (now #1111) after a /grill-me session.

Constraint: no kind/discriminator field. "Info exchange" ≡ !platforms.forecasts && platforms.obs; all visibility is driven by NAC platforms flags.

The homepage variant (centerpiece)

In provisionTenant (src/collections/Tenants/endpoints/provisionTenant.ts), branch on !platforms.forecasts when creating the home page:

  • Copy — info-exchange highlightedContent (observation/safety-focused, not "avalanche forecasts, mountain weather conditions").
  • Layout — a single observationsWidget block instead of the default eventList block.
  • Block — new ObservationsWidget (src/blocks/ObservationsWidget/, slug observationsWidget, no fields): heading + Submit button + <ObservationsDisclaimer /> + <NACWidget widget="observations" />. Register in RenderBlocks.tsx + HomePages layout; migration add_observations_widget_block; regenerate types.

Plumbing to support it

  • Schema — relax avalancheCenterSchema (src/services/nac/types/schemas.ts) so info exchanges parse: city nullable, config nullable, add Other = 'other' to AvalancheCenterType. Fixture test: NWAC (full), EWYAIX + SOAIX (nulls).
  • Routing — gate homepage <NACWidget widget="warnings" /> (src/app/(frontend)/[center]/page.tsx) on platforms.warnings. Danger map unchanged (info-exchange zones render gray "no rating").
  • Other provisioning — when !platforms.forecasts: gate BUILT_IN_PAGES "Weather Stations" on platforms.stations; resolveBuiltInPages skips AFP zones fetch + stale "All Forecasts" fallback; reduced PAGES_TO_PROVISION = About Us, Donate/Membership, Volunteer.
  • Tenant — add ewyaix to AVALANCHE_CENTERS (src/utilities/tenancy/avalancheCenters.ts) with customDomain: 'ewyoavalanche.org' (config-only, does not flip DNS — EWY production cutover to NWAC platform #1110); update the stale "excluded" comment.
  • Seed — run provisionTenant for ewyaix (prod + pnpm seed).

Acceptance (smoke-check EWYAIX): homepage shows the observations widget, no forecasts/weather nav tabs; /observations, /observations/submit, /weather/stations/map work; /forecasts/avalanche, /weather/forecast 404; admin Pages list has About Us, Donate/Membership, Volunteer.

Follow-ups

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions