Three ways into SmallWorld. Flow A keeps the admin-driven invite but adds a delivery
channel: an invite can be DM'd from the SmallWorld Slack app instead of (or alongside) email, and the
Slack link carries through onboarding into a notification-channel preference.
Flow B rethinks invites entirely — a single shareable join link where the person
identifies themselves and we do the lookup work for them.
Flow C drops email from the invite altogether: the users:read scope we
already hold gives us the workspace directory, so the admin picks people out of Slack, the invitee
accepts in a Slack modal, and a magic link signs them in.
Admin invites from Settings → the invitee accepts in Slack → onboarding and preferences.
No per-person invite. One link per account, self-serve identification, admin approval optional.
Admin picks from the synced Slack directory → the invitee accepts inside Slack → the App Home tab carries the rest.
Every page carries a dark prototype bar with its target production URL, a state switcher, and prev/next
navigation. States are deep-linkable via ?state=<id>. Fixture data (Acme, Ava Chen,
the three invitees) lives in shared/slack-invite-onboarding-data.js.
Flow C keeps its sample data inline in each page; only its map entries live in
shared/slack-invite-flow-c.js.