User
A user (also called a rider) is the primary actor in 95octane. All features are consumed by users.
Overview
Users sign in via the mobile app (iOS or Android) and are categorized by their subscription status.
User Types
| Type | Description |
|---|---|
free |
Default on account creation. Gets 4 Premium Ride starts (lifetime quota). Quota is consumed only when the user clicks START on a ride — RSVP does not consume quota. After the 4 Premium starts are used: can still RSVP and start rides, but gets Essential tier experience (no quota consumed). Cannot create rides, use navigation above Essential, or use intercom. Can view rides, RSVP, and join groups. Cannot create, own, or administer a group. A free user who still owns groups from a lapsed subscription has 7 days to transfer ownership to a subscriber or delete each group — after 7 days, untransferred groups are frozen and unavailable to members. Groups not resolved by day 30 are permanently deleted. See Access Policy. |
subscriber |
Paying users via App Store or Google Play (yearly). Always gets Premium tier at START — subscription overrides quota. Can own up to 4 pending rides at a time (separate from the free-tier quota). Full access to all features. Can create, own, and administer groups. Reverts to free on expiry. At expiry, the owner has 7 days to transfer owned groups and rides — after 7 days, untransferred assets are frozen and unavailable to members and participants. Assets not resolved by day 30 are permanently deleted. Re-subscribing before day 30 unfreezes all frozen assets immediately. See Subscription Notifications for the full notification timeline. |
For a full capability comparison, see User Capabilities. Access rules per type are defined in Access Policy.
User Status
| Status | Description |
|---|---|
onboarding |
Set on account creation. The user must complete the mandatory onboarding flow before reaching the home screen. Onboarding state persists across devices and sessions — the user resumes from the last incomplete step on any device. No app features are accessible until onboarding is complete. This status is also used for any future mandatory setup requirements. See Onboarding. |
active |
Set when onboarding is complete. User can sign in and use the app normally. |
banned |
(Wishlist) Set by a 95octane operator for platform misuse. The banned user can still sign in but is routed to the Ban screen — a hard wall showing the ban reason, an Appeal option, and a Delete Account option. The user can submit and continue an appeal chat with the operator. The operator can lift the ban (returns to active) or make it final (transitions to banned_final). Owned groups and rides operate normally for other members, but owner and admin actions are unavailable while banned. See Ban. |
banned_final |
(Wishlist) Set when an operator makes a ban permanent after the appeal process. The Ban screen no longer offers an appeal — only Delete Account remains. 95octane cancels the subscription for Google Play users via RevenueCat — access ends at the end of the current billing period. Apple users must cancel manually. Owned groups and rides continue to operate normally for other members. An operator can reverse a banned_final — status returns to active silently. No notification is sent to the user, and no admin roles, groups, rides, or invites are restored. See Ban. |
to_be_deleted |
Set when the user confirms account deletion after all owned assets are resolved. The user is signed out immediately. Hidden from all lists, searches, ride views, and buddy lists from this point. A 7-day grace period follows — the user can open the app to cancel and restore active status (admin roles are NOT restored). During the grace period the app shows only a deletion notice; no app features are accessible. If the user closes the app without cancelling, they remain in the grace period — the session is not force-ended. After 7 days, the account is permanently deleted — buddy relationships and pending buddy requests are removed at this point. An active subscription is not cancelled automatically — the deletion flow shows manual cancellation instructions in-app and sends them by email if an address is on file. |
Authentication
Users sign in using Google or Apple. A third provider — Mobile/OTP — exists solely for account recovery and cannot be used for regular sign-in.
| Provider | Regular sign-in | Account recovery | Platforms |
|---|---|---|---|
| ✓ | ✓ | iOS, Android | |
| Apple | ✓ | ✓ | iOS only |
| Mobile/OTP | ✗ | ✓ | iOS, Android |
| Email/password | ✗ | ✗ | Internal only |
- Apple is required on iOS by Apple policy whenever any third-party sign-in is offered.
- Email/password is hidden from users — used only for internal testing and App Store/Play Store review accounts. See App Review Process.
- Mobile/OTP is an optional provider the user links during onboarding or
from profile settings. It is only usable on the account recovery page
(
/recover) — not on the regular sign-in screen. See Add Authentication Provider. - Apple-only users on Android: a user who signed in with Apple and has not linked Google cannot sign in on Android — Apple Sign-In is iOS only. To avoid being locked out when switching devices, users should link Google from an iOS device before using the app on Android. See Add Authentication Provider.
Business Model
95octane's revenue model is based on annual subscriptions managed through the App Store and Google Play. See Subscription.
See User Schema for the Firestore document structure.
Actions
- Sign In — authenticate and create or resume an account
- Sign Out — end the current session
- Onboarding — mandatory setup screens before home screen
- Update Profile — change personal details and app preferences
- Ban — restricted access and appeal flow for banned users (wishlist)
- Delete Account — permanently remove the account after a grace period
- Manage Favorites — save and remove frequently used locations
- Verify Email — confirm a user-added email address (planned)
- Add Authentication Provider — link an additional sign-in method, recover an account, or merge two accounts (planned)
Sign Out
Signing out ends the current session and returns the user to the sign-in screen. It is a standard, non-destructive action: no data is removed, no account state changes, and the user can sign back in at any time with the same provider. There is no separate action page for it.
Sign-out is available in two contexts beyond the normal app:
- Banned users — a Sign Out button is available on the Ban screen.
- Onboarding users — there is no sign-out option during onboarding. The user must complete or abandon onboarding from the device.
Failure cases:
- Active navigation session — sign-out is blocked. The navigation screen is a locked screen; the user must explicitly end their ride to leave it, after which sign-out proceeds normally.
- Network failure — the local session is cleared and the user sees the sign-in screen. Server-side invalidation resolves automatically when connectivity returns.
- Session already expired server-side — sign-out completes cleanly with no error.
References
These are not actions — they describe rules and policies that govern the actions above.
- Access Policy — which features each user type can use, and how access changes when a subscription state changes
Riding Buddies
Riders can connect with each other as Riding Buddies — a mutual connection that surfaces shared ride participation and is visible on ride details before RSVPing.
Buddy management — sending requests, viewing, accepting, and removing connections — is accessible from the user's profile section in the app. Riders can discover each other in two ways:
- Ride participant list — visible after RSVPing YES or MAYBE to a ride. No city restriction applies here; riders from different cities on the same ride can send each other buddy requests.
- Search by email or phone — available from the Buddies section of the profile. This search only returns results when both the searcher and the result are in the same city.
A user's city is set during onboarding or updated explicitly with GPS verification — see Update Profile.
Banned users and users with to_be_deleted status do not appear in buddy search
results. Users with to_be_deleted status are hidden from buddy lists during
the grace period; their buddy relationships are permanently removed at actual
deletion.
- Add a Riding Buddy — send a buddy request (planned)
- Manage Riding Buddies — accept, decline, cancel, or remove connections (planned)