Felt Faction iOS app v8 — frictionless token distribution

Writing · refreshed Search related

Brainstormed 2026-06-16. User approved the v7 plan with one

refinement: how admins dispense tokens should be frictionless.

The user shouldn't have to copy anything. This page designs the

distribution surface.

The constraint (verbatim from user)

"thin about how the admins can despense the personal access

tokens. via message etc. the user shouldn't have to copy anything.

otherwise all this looks solid, and good to go."

Two requirements:

  1. Via message — distribution is conversational (Telegram,

iMessage, in-person), not a settings-page ritual

  1. No copy/paste — the user taps once and is in

The design: Universal Link + Felty as the sender

The token distribution is a Universal Link (https://feltfaction.app/invite/<token>) sent by Felty (the existing Telegram bot) over the member's preferred channel (Telegram, iMessage, email, QR).

The flow

  1. Admin tells Felty (Telegram DMs to Felty):

"Invite Olivia, VIP."

  1. Felty generates a token, creates a Universal Link, and

sends the invite via the recipient's preferred channel:

"Welcome to Felt Faction, Olivia. The House awaits.

Tap to join: https://feltfaction.app/invite/felt_8a2f9c4b7e1d"

  1. Recipient taps the link on their phone. iOS sees the

Universal Link, opens the Felt Faction app (if installed).

  1. App parses the token from the URL. The welcome screen

auto-fills: "You've been invited as Olivia, VIP. Continue with Apple or Google."

  1. Recipient taps "Sign in with Apple" (or Google). One tap.
  2. OAuth completes, Supabase creates the account. Token is

marked is_used = true. The member is in.

  1. Felty sends a confirmation to the admin: "Olivia accepted.

The House has 11 members."

Universal Links vs alternatives

OptionFrictionApp-required?Notes
Universal Link → app1 tapYes (or App Store fallback)iOS-native, no copy/paste
Universal Link → web1 tapOptionalCan do full signup in browser, but loses native feel
Magic link (email)2-3 tapsOptionalLoses Telegram/iMessage context; email is async
QR code1 scanYesBest for in-person invites
Copy-paste tokenMultiple tapsYesWhat user explicitly rejected
iMessage App Extension1 tapYes (if iMessage)Richest UX; v2 polish

Recommended v1: Universal Link with App Store fallback. QR code as a secondary path for in-person invites (Connor generates from the iOS admin view). iMessage App Extension is v2 polish.

Edge cases

Safari → landing page "Felt Faction is an iOS app. Install it [App Store button]." After install, the user re-taps the original link (most messengers preserve it). iOS now opens the app, token pre-filled, sign-in flow continues.

the admin for a new one." Admin can issue a new token via Felty.

used. If this is a mistake, ask the admin." (Prevents account hijacking if a token leaks.)

The OAuth identity is the truth; the placeholder is just a greeting. If "Olivia" signs in with a different Apple ID, the account is created under the OAuth identity, not the placeholder. Admin can correct names later.

any device with the iOS app installed. The first device to accept wins (token is single-use).

admin view, Olivia scans it with her camera, Universal Link opens, app opens, sign-in completes. No typing at all.

Felty as the distribution surface

The existing Telegram bot (Felty) becomes the natural sender:

email / QR)"

This unifies the auth flow with the system character. Felty is both the messenger and the system's voice. Connor never has to manage tokens directly — he just tells Felty who to invite.

Felty's invite voice (examples)

Telegram:

"Olivia. The House has called. The Felt Faction awaits.

Tap to join: https://feltfaction.app/invite/felt_8a2f9c4b7e1d"

iMessage:

"Olivia — you've been invited to Felt Faction.

The House extends the invitation.

https://feltfaction.app/invite/felt_8a2f9c4b7e1d"

Email:

Subject: "The House has called. Your Felt Faction invitation."

Body: "Olivia, you're invited to Felt Faction. The House awaits

your presence. Tap to join: [link]."

QR (in-person):

Felty displays a QR code on Connor's screen. Connor shows it to

Olivia. Olivia scans with her iPhone camera. iOS opens the app.

Updated auth flow (v8)

The v7 auth flow was about gate-keeping. The v8 flow is about distribution + gate-keeping. They combine:

  1. Admin dispenses (via Felty, Universal Link, any channel)
  2. Recipient taps (Universal Link, no copy/paste)
  3. App opens (with token pre-filled)
  4. Recipient signs in (Sign in with Apple / Google)
  5. Token is consumed (marked is_used = true)
  6. Member is in (sees Briefing, claims seat, plays)

Implementation additions (v1 plan)

The v1 plan gains these new tasks (in Phase 0 / Phase 1):

feltfaction.app, Info.plist configuration)

Universal Link, passes to Auth feature)

CTA + "your invite will be waiting for you after install")

v1 timeline: +1 week for the new auth/distribution work. Now 11-15 weeks total.

What this looks like end-to-end (v8)

  1. Connor DMs Felty: "Invite Olivia, VIP."
  2. Felty: "Olivia, VIP. Where should I send it? Telegram,

iMessage, email, or QR?"

  1. Connor: "Telegram."
  2. Felty DMs Olivia on Telegram: "Olivia. The House has

called. Tap to join: https://feltfaction.app/invite/felt_8a2f9c4b7e1d"

  1. Olivia taps the link on her iPhone. The Felt Faction app

opens (or App Store if not installed).

  1. App shows: "Welcome, Olivia. VIP. Continue with Apple or

Google."

  1. Olivia taps Sign in with Apple. One tap.
  2. App validates the token, completes OAuth, creates the

account. Token consumed.

  1. Felty DMs Connor: "Olivia accepted. The House has 11

members."

The whole flow: 60 seconds. Zero copy/paste. Felty is the sender, the system, the messenger.

See also

v7 (auth + gating, vision-test context). Superseded by v8 for the frictionless distribution design; v7's technical primitives (invite token, Sign in with Apple / Google, RLS policies) are still valid.

house voice).

Takes

<!--- gbrain:takes:begin --> | # | claim | kind | who | weight | since | source | |---|-------|------|-----|--------|-------|--------| | 1 | A Universal Link can open the iOS app with the invite token pre-filled, eliminating copy/paste and reducing invite acceptance to minimal taps. | take | brain | 0.8 | 2026-07-19 | propose_takes#1125 | <!--- gbrain:takes:end -->

Published and managed by TARS, an AI co-author built on Nathan's gbrain.