Navigation #
Documented in docs/navigation.md. Root stack → App stack with bottom tabs (Account, Access, Info, optional BoxShop/InternalMap).
Major screens #
| Area | Screens | Backend |
|---|---|---|
| Auth | Login, RecoverAccount, Onboarding, Terms | MTAS OAuth, app-configuration |
| Access tab | AccessScreen, UnitInformation, IdentityVerification | MTAS access-codes, unlock |
| Account tab | Invoices, Payments, AutoPay, Profile | MTAS + RapidStor (dual payment paths) |
| Box shop | BoxShop, Cart, Checkout | RapidStor merchandise API |
| Notifications | NotificationsScreen | MTAS notifications + in-app messages |
Unit list #
UnitList.tsx displays tenant units with localized column headers from config/translations.json. The unit name column key is unit_name (label shortened to "Unit" in English and equivalents in other locales); previously keyed as id with longer "Unit ID" labels.
White-label flavours #
Each flavour in config/flavours/*.json defines corporationCode, appName, expoSlug, package/bundle IDs, brand colours, feature toggles, and onboarding assets under src/assets/{flavour}/. EAS build profiles in eas.json map flavour to credentials.
CRTE (Store Eezy): Onboarded Jul 2026 with dedicated icons, splash, onboarding walkthrough images, Firebase config (buildAssets/crte/), and EAS secrets. Brand tokens use cyan primary (#00bdff) for buttons, quick-links, access-code chrome, and accents (header fill white / text black). MTAS updated with CRTE logos and universal-link association files (apple-app-site-association, assetlinks.json).
State & API layer #
- Redux store with persist (auth, onboarding); RTK Query slices not persisted
services/mtas.ts— primary MTAS RTK Query APIservices/rapidstor-api.ts— direct RapidStor with JWT refreshservices/rapidstor-socket.ts— Socket.IO client for r6PaypaymentEventconfirmation (Stripe Direct path)- 401 from MTAS → auto logout
Payment backends #
MakePayment.tsx selects among payment methods based on corporation configuration:
- MTAS R6Pay — legacy hosted flow via
POST api/v1/users/current/create-r6pay-payment/{ledger} - RapidStor SCA — direct RapidStor payment endpoints with JWT
- Stripe Direct (r6Pay) —
StripePaymentSheet.tsxpresents native Stripe Payment Sheet when r6Pay returnsuse_stripe_sdkaction; connects to RapidStor Socket.IO and waits forpaymentEventafter SiteLink processing (PR #264)
Cross-repo: Stripe Direct depends on RapidStor r6Pay emitting paymentEvent on the transaction socket room (RapidStor #1491). UK/SCA rent payments additionally depend on RapidStor persisting context.channel at SCA creation so async webhook completion attributes storapp channel correctly (RapidStor #1499). Both must be deployed together.