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.