Invitation and join
Four ways in. They differ enormously in build cost, and the PRD asks which is cheapest for a first release — so each card carries that answer rather than leaving it to a meeting.
Pick a path
A · Direct invite
Pick them from a list. The invite lands in their admin's notification centre and inbox. Accept, decline, or ignore.
Cheapest · recommended firstB · Email invite
Enter an address and company name. They get a branded invite, sign up, and membership activates when onboarding completes.
Costly · drags in onboardingC · Invite link
Generate a link with optional expiry, use cap and domain lock. Anyone using it raises a join request — never an automatic membership.
Moderate · needs abuse controlsD · Request to join
A business discovers the network in search, requests access, answers screening questions, and lands in the admin queue.
Moderate · needs discovery firstDirect invite
What happens next
Every path converges on the same state machine. The pending state is deliberately blind — that blindness is the whole trust argument.
A pending business can see
- Network name and description
- Rules they would be agreeing to
- How many members there are
A pending business cannot see
- Any inventory
- Who the other members are
- Any price, anywhere
Declined businesses are notified and may not re-request for 30 days. That cooling-off is the only thing standing between an open network and a queue full of repeat applicants.
Guardrails
| Control | Behaviour | What it prevents |
|---|---|---|
| Invitation expiry | Invites lapse after 15 days. | Stale invitations resurfacing into a network that has moved on. |
| Decline and block | An admin can refuse a network and stop all further invites from it. | One persistent network pestering a business indefinitely. |
| Daily rate limit | Caps invites sent per business per day. | Bulk invitation used as marketing. |
| Admin approval of member invites | Optional: every invite, including member-generated, needs an admin. | Membership drifting without the owner noticing. |
Illustrative placeholder data, in-memory state. Nothing is sent.