Slack-native invite & onboarding

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.

Flow A — Slack-native invite

Admin invites from Settings → the invitee accepts in Slack → onboarding and preferences.

    Flow B — Generic join link

    No per-person invite. One link per account, self-serve identification, admin approval optional.

      Flow C — Slack-first (no email needed)

      Admin picks from the synced Slack directory → the invitee accepts inside Slack → the App Home tab carries the rest.

        Notes

        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.