Mobile Point of Sale System with React Native and Stripe
Regional Franchised Salon Business Project
TLDR Summary:
This project aimed to enhance the salon employee experience by creating an in-store Point of Sale system through a mobile payment app for iOS and Android, along with physical card readers. The app integrated with Stripe API, utilized React Native for cross-platform development, and employed Location and Bluetooth APIs for card reader pairing. However, due to the 2019 pandemic, the launch was halted. The app allowed employees to handle transactions, while the client received a fee. The system was designed for seamless onboarding, integrating with an existing web app, providing analytics, and offering customer payment features. Responsibilities included requirement documentation, UI design, error tracking, analytics implementation, and more. Challenges included consistent branding, tonal alignment, and catering to various user roles. The project benefited from clear requirements, meticulous documentation, efficient design cycles, and experienced team collaboration. The app was well-received, improving employee and admin experiences and boosting business revenue.
Project Description:
My employer and I had already rebuilt a new front-to-back business system for this long-term, ongoing Client. They planned to improve their salon Employee experience by providing an in-store Point of Sale system. This would include payment transaction mobile apps for iOS and Android and physical card readers to connect to their phones and interface with the app. The previous business model included Employees handling their own payment transactions, and this new system would be optional and included a small fee from which the business profited. This was a phase two feature addition as part of a more significant rebranding and redesign of the entire business and marketing push to increase Employee and Customer engagement. We were ahead of schedule at every stage and had a faster beta testing period than we thought. Ultimately the feature was never launched due to the global pandemic in 2020 and the Client being forced to make hard business decisions.
System Requirements: The app would be responsive on iOS and Android, supporting up to 5 and 4 versions, respectively. The app would use React Native, Stripe API for account creation, management, transaction processing, and Stripe client-side components to handle client credentials. The app would work with the phone's Location and Bluetooth Devices API to detect, pair to, and monitor a Bluetooth card reader. The app would automatically detect and pair to the card reader whenever it was near, making it an almost frictionless onboarding process as long as the device was powered on and the app was open. This system was intended to integrate into the existing business management web app, and stylists could opt-in to the service. The app would always be available on the App Stores, so a verification was implemented to guide the user from the web app to Stripe for account creation and back to the web app for an interim waiting period while Stripe verified bank account credentials. This could be expected to take anywhere from 5 minutes to 24 hours, so a notification system running on a NodeJS server was implemented to email the user about their verification status to be redirected back to the web app to view their Stripe account page and a link to their appropriate mobile App Store listing. Once the app was installed, the user was verified in our system as being 'Stripe account ready' and logged in. They could then view all their upcoming and past appointments as an invoice. They could initiate a payment from the invoice based on the booking fee for the Client, the appointment service price, taxes, and a small processing fee. The user experience was then intended to be passed over to the Client to input their card details, input tip amount, and confirm their email for a receipt. An employee could use the app to view a complete history of transactions in the mobile app and web app and be linked back to their Stripe page for more in-depth analytics and account management. There was already a Report system for employee and admin business analytics in the web app, so a new Report was added to monitor transaction statistics, income earned, and fees paid, and transaction analytics by employees, locations, and regions added to the administration side web app.
Technical Requirements: All documentation, design, and prototyping were done with Figma. The mobile app was built with the following:
- - React Native
- - Metro and Expo for building and testing
- - TypeScript
- - React Context for all state and physical device state management
- - Stripe API
- - Material UI and Axios for React Native
- - NodeJS server interfacing with Stripe and an existing proprietary SQL database.
- - Sentry for error tracking, beta testing feedback, and user feedback at production.
- - Google Analytics 4
Changes for system integration to the Employee and Admin web apps, as well as the public-facing site involved:
- - React
- - Redux and Redux Saga
- - Material UI
- - Axios
- - AWS Cognito and Amplify for user pools, permissions, and authentication
- - A current NodeJS server and proprietary SQL Database
And public-facing changes included:
- - A WordPress site with:
- - account management system
- - booking and down payment system
- - locations and stylist search system
- - Stylist business and services presentation
- - Figma for asset design and site design updates
Role and Responsibilities: I was to document all business requirements into technical/system requirements, design UI's for a brand new Mobile App using Material UI, develop all React and React Native user interfaces, document and implement custom error tracking using the Sentry API, and document and implement the Mobile Payment App analytics events tracking and monthly usage reports. The project leads had already met with the Client, who had worked out all legal, business, and terms-based requirements. I worked with one of the leads to discuss their discovery; I compiled the initial Design and Tech requirements documentation and went through a round of approval and editing. This was followed by diagramming the individual parts of the project:
- - The Employee Stripe onboarding flow
- - The Mobile App onboarding and transaction flows
- - The Client and Employee (Stylist) notification flows
- - The Customer booking and payment flow
As well as high-level views of the project:
- - The in-store interaction between the Client and the Employee (Stylist)
- - The Employee experience flow (all onboarding to Stripe account verification and mobile app access, including integration between the web app and mobile app and Stripe)
- - The entire Customer/Client experience, from booking online to receiving an emailed receipt at the end of the appointment.
After the flows were approved, and project leads, designers, and developers were on the same page, design began on the Mobile App page layout and UI, followed by the web app pages and UI updates. Once initial UI designs were approved, I started working on the React Native setup. I set up the Expo project, built the navigator, set up the global state and transaction state, and built the entire UI. My senior developer handled the server-side programming, front-end Bluetooth code, and state management for interfacing with the physical card reader. When the mobile app was finished and tested, I built the UI and Stripe integration with the Employee web app. At the same time, my senior developer worked on the server-side code to support the new transaction analytics reports for the Employee and Admin web apps. Once all UI was complete and tested manually, I began designing each App Store's marketing assets and icons. The business already had a logo, so this payment app used the same mark with a different color and a small credit card icon overlay. Next came UI design for public-facing changes to the WordPress site. Once completed, the project lead updated the booking process and any other UI changes. While the finishing touches were taking place on the back-end and WordPress systems, I could write articles and record screencast tutorial videos to be released for product launch. We were then able to test the product starting with the clients, then a small group of Employee volunteers to beta test the system. I implemented a beta bug reporting system using Sentry for custom messaging and labeling in our Sentry project.