Frontend / App

Last generated 2026-07-13 · window 2026-07-12T18:02:00Z–2026-07-13T18:01:03Z

Documented in docs/navigation.md. Root stack → App stack with bottom tabs (Account, Access, Info, optional BoxShop/InternalMap).

Major screens #

AreaScreensBackend
AuthLogin, RecoverAccount, Onboarding, TermsMTAS OAuth, app-configuration
Access tabAccessScreen, UnitInformation, IdentityVerificationMTAS access-codes, unlock
Account tabInvoices, Payments, AutoPay, ProfileMTAS + RapidStor (dual payment paths)
Box shopBoxShop, Cart, CheckoutRapidStor merchandise API
NotificationsNotificationsScreenMTAS 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 API
  • services/rapidstor-api.ts — direct RapidStor with JWT refresh
  • services/rapidstor-socket.ts — Socket.IO client for r6Pay paymentEvent confirmation (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.tsx presents native Stripe Payment Sheet when r6Pay returns use_stripe_sdk action; connects to RapidStor Socket.IO and waits for paymentEvent after 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.