The mobile companion for SoftwareONE Marketplace — manage your cloud subscriptions, orders, invoices, and agreements on the go. Built with React Native and Expo for iOS and Android.
- Passwordless sign-in — Email + OTP, no passwords to remember
- Your whole Marketplace in your pocket — Orders, subscriptions, agreements, invoices, credit memos, statements, programs, and more
- Spotlight dashboard — See what matters at a glance
- Multi-account switching — Jump between accounts without signing out
- Cross-platform — One codebase, native experience on both iOS and Android
You'll need Node.js 20+ and either Xcode (iOS) or Android Studio (Android).
git clone <repository-url>
cd mpt-mobile-platform
# Set up environment
cp app/.env.example app/.env
# Fill in Auth0 credentials — grab them from Keeper Vault or ask a teammate
# Install and run
cd app
npm install
npm run ios # or: npm run androidThat's it. The app should launch in your simulator.
Using private
@swopackages? Runnpm install -g vsts-npm-auth && vsts-npm-auth -config .npmrcfirst.
Changed
.envvalues? Clear the Metro cache withnpx expo start --clear, then rebuild.
Once running, sign in with your SoftwareONE email. You'll receive a one-time code — enter it and you're in.
From there you can browse your Spotlight dashboard, view and search orders, subscriptions, agreements, invoices, and more — everything you'd find on the web portal, optimized for mobile.
All source code lives under app/src/:
app/src/
├── components/ # Reusable UI components
├── screens/ # Screen components (one per route)
├── services/ # API and business logic
├── hooks/ # Custom hooks and query hooks
├── context/ # React Context providers
├── styles/ # Design tokens and component styles
├── i18n/ # Internationalization
├── types/ # TypeScript definitions
├── config/ # App configuration and feature flags
├── lib/ # Core libraries (API client, token provider)
├── constants/ # App-wide constants
└── utils/ # Utility functions
| Framework | React Native 0.81 · Expo SDK 54 · React 19 (New Architecture) |
| Language | TypeScript 5.9 (strict mode) |
| Navigation | React Navigation v7 |
| State | React Context + TanStack React Query |
| Auth | Auth0 (passwordless OTP) |
| API | Axios |
| i18n | i18next |
| Testing | Jest · Appium (E2E) |
Run from the repository root. npm commands run from app/.
# Quick start
./scripts/hot-reload.sh # Dev server with hot reload (press i/a/r)
./scripts/deploy-ios.sh --verbose # Full iOS Simulator build + deploy
# Build
npm run ios # iOS Simulator
npm run android # Android emulator
# Quality
npm test # Unit tests
npm run lint # Lint check
npm run lint:fix # Auto-fix lint errors
# Cleanup
./scripts/cleanup.sh # Clean build artifacts
./scripts/cleanup.sh --deep # Nuclear option (removes node_modules)
# E2E
./scripts/run-local-test.sh --platform ios welcome
./scripts/run-local-test.sh --platform android --build allGitHub Actions handle validation and builds automatically.
| Workflow | Trigger | Duration |
|---|---|---|
| PR Build | Pull request to main |
~2–5 min |
| Main CI | Push to main |
~25–35 min |
| iOS / Android Build | Auto on main + manual |
~15–30 min |
| TestFlight | Manual only | ~30–45 min |
Every push to main runs lint + tests, then builds iOS and Android artifacts in parallel. TestFlight deployment is manual — see the Deployment Guide for the full test → QA → prod promotion flow, and TestFlight Setup for secrets and first-time configuration.
We welcome contributions! Here's the quick version:
- Branch off
main:feature/MPT-XXXX/short-description - Read CONVENTIONS.md — it's enforced on every PR
- Write tests for new code
- Open a PR with a Conventional Commits title (e.g.,
feat: add biometric login) - Wait for CI to go green (lint, tests, SonarCloud quality gate)
Found a bug or have an idea? Open an issue — we'd love to hear from you.
| Topic | Link |
|---|---|
| Coding conventions | CONVENTIONS.md |
| Design system | app/src/styles/README.md |
| iOS local build | documents/LOCAL_BUILD_IOS.md |
| Android local build | documents/LOCAL_BUILD_ANDROID.md |
| Logging | documents/LOGGING.md |
| E2E testing (iOS) | documents/APPIUM_IOS_TESTING.md |
| E2E testing (Android) | documents/APPIUM_ANDROID_TESTING.md |
| Writing E2E tests | documents/EXTENDING_TEST_FRAMEWORK.md |
| Deployment guide (test/QA/prod) | .github/DEPLOYMENT_GUIDE.md |
| TestFlight setup | .github/TESTFLIGHT_SETUP.md |
Licensed under the Apache License 2.0.
Built with ❤️ by the SoftwareONE Marketplace team.