4 min readFintech
From empty repo to both app stores: building a US stock trading app in React Native
Lessons from building the Unlok app for US stocks and ETFs, as its only mobile engineer: architecture, live prices, the order ticket and store review.
I built Unlok's app for investing in US stocks and ETFs from an empty repo, as the only mobile engineer, and it's live on the App Store and Google Play. React Native with TypeScript was the right choice for one person shipping two platforms. The hard parts weren't the framework: they were prices that stay fresh, an order ticket nobody can misread, and getting a finance app through store review.
The stack, and why
- React Native and TypeScriptOne codebase for iOS and Android, and types on every number that matters.
- TanStack QueryServer data (quotes, positions, orders) with caching and refetching built in, so screens ask for data rather than manage it.
- ValtioFor the small amount of state that lives only in the app, like what the user is typing into a ticket.
- ReanimatedAnimations and gestures that stay smooth on mid-range Android phones.
- FirebasePush notifications, and test builds testers can install whenever they need one.
- fastlane and GitHub ActionsReleases to both stores from a merge. That pipeline has its own post.
The server owns the numbers
In a trading app, balances, positions and buying power belong to the server. The app shows them and asks again when it matters: when a screen comes back into view, and before an order. It never works out a balance on its own. That one rule removes a whole class of bugs where two screens disagree about how much money you have.
Data flows one way: an API client, one query hook per kind of data, and screens that use the hooks. When a quote updates, every screen showing that symbol updates with it, because they all read the same cached data.
Real-time quotes without draining the battery
- Update only what is on screen. A watchlist of fifty symbols needs live prices for the ten you can see.
- Pause when the app goes to the background, and refresh the moment it comes back.
- Limit how often a price redraws. Ten updates a second look like flicker, not information.
- Say clearly when the market is closed, and which price is shown, so a stale number never looks live.
The quote chart was the one part I ended up drawing myself, in SVG, after chasing crashes on Android in a charting library. Scrubbing across it shows the price at each point, the way the case study demo does.
An order ticket you can type into
Buy opens a keypad. You type an amount, and the ticket shows how many shares that buys and the total with fees included, before you confirm. The details that matter most are about preventing mistakes:
- Show the money and the shares together, so nobody confuses the two.
- Include fees in the total on the ticket, not only on the receipt.
- Disable the button the moment it is pressed, so a slow network can never send the order twice.
- Make it obvious when you're on a paper (practice) account and when it's real money.
Price alerts
The bell on any quote sets a price alert with one or more conditions. The app only creates and lists them; one event server decides when an alert fires and how each person hears about it, by push, email or in the app. Keeping that logic out of the app means it works the same on the web, and an alert never depends on the phone being awake.
Store review for a finance app
Apple and Google both look harder at apps that move money. Expect to show that the app comes from the regulated firm itself, published under its own developer account, to give reviewers a working demo login, and to fill in Google Play's financial features declaration. Plan the first submission weeks ahead of a launch date, not days.
What one engineer can do, and what I would do again
I designed the screens straight from product discussions, with no designer in between, and built and released both platforms. That works when the person building understands the product and the product team is close. What I would do again on day one: automate releases, so shipping is never the slow part, and agree with the backend which numbers the server owns.
If you are planning a fintech or trading app, I design and build new products from the first screen to both stores.
Questions people ask
- Is React Native good for a stock trading app?
- Yes, for most of it. Live prices, charts, the order ticket and alerts all work well in React Native with TypeScript. The work that decides success is the same in any framework: the server owns the numbers, and the ticket is built to prevent mistakes.
- Can one developer build a fintech app?
- One developer can build and ship the app, as I did for Unlok, when the backend, compliance and product decisions are handled with the company. A trading platform as a whole needs a licensed firm and a backend team behind it.
- How do you show real-time stock prices in React Native?
- Keep a live connection for prices, update only the symbols on screen, pause in the background, and limit how often prices redraw. A shared cache means every screen showing a symbol updates together.