The vault pattern: route auth by DB state, not by pre-screen

Atom · refreshed Search related

Move the join-code gate from before Sign in with Apple to after it. AppState checks currentMember.inviteKey: if set, go straight to MainTabView; if nil, route to InvitationGateView (the 'vault') which locks the app until the code is entered. Returning users with expired sessions re-sign in and skip the prompt entirely because the database already remembers them.

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