Wave is Future Demand’s campaign activation surface. Where Lookout tells you what to focus on, Wave is how partners act on it: configure and publish campaigns against an event’s taste-cluster audiences, edit them while they run, and read attribution results.

The pages you’ll rebuild

PageWhat it showsGuide
Wave listThe Wave version of the events list — same data, campaign-state-centric framing.Wave list
Campaign detailA single event’s Wave view: stats, taste clusters, and the campaign setup wizard.Campaign detail
Campaigns lifecycleThe setup_processes/{eid} state machine — create, edit, publish, edit-running.Campaigns lifecycle
AttributionPer-event campaign results and the attribution-model selector.Attribution
1

Wave list

Same /events/ endpoint as Lookout — your existing code is half the work.
2

Campaign detail (read-only)

Read the existing setup_process if any, the campaigns, the Meta auth status. Defer the wizard.
3

Campaigns lifecycle (the wizard)

The hardest part. Get this right and you have Wave.
4

Attribution

Wire the Statistics tab via the Meta integration endpoints.

What’s tricky in Wave

  • One setup_process per event. No setupId in the URL. Concurrent edits across tabs race. The reference webapp uses a module-level AbortController to drop stale PUTs — replicate or you’ll get flicker and lost edits.
  • POST /campaigns_setupPUT /setup_processes/{eid}. Different endpoints, different lifecycle stages. /campaigns_setup is for editing a published cluster’s creative + targeting; the setup_processes PUT is for draft edits.
  • Goal values are enum-style: UTILIZATION, ROAS, VISIBILITY, LINK_CLICKS — not tickets / revenue / reach.
  • Attribution lives on the Facebook integration endpoint/integrations/facebook/events/{eid}/campaign_results, not the generic /campaign_results/.
  • Debounce autosave + abort prior PUTs. Without both, the user’s “I changed two fields quickly” becomes a race.
Each Wave guide flags the specific gotchas relevant to that page.

What you don’t need to rebuild

  • The cross-tenant /messages/partner/{partner_id} admin endpoints.
  • The /campaigns/by_partner_id endpoint (admin-only — returns auth errors for partner tokens).
  • The generic /campaign_results/ endpoint (use the Facebook integration endpoint instead).
  • The /prompts/* admin endpoints (read prompts/custom_prompt only).
  • The CR-side bulk ingest pipelines unless your integration owns sales-data delivery.

How Wave depends on Lookout

Wave shares the events list, the taste-cluster endpoints, and the event detail components. If you’ve already built Lookout, you’ve already built roughly half of Wave. The new code is the campaign wizard (the setup_processes state machine) and the Statistics tab.