Two Interconnected Cross-Platform Apps: React Native Frontend, Node/Express Backend
An Uber-style salon booking system — a client app that finds nearby vendors and books them for at-home visits, and a vendor app on the other side. Two React Native apps talking to one Node/Express backend.
The previous developer at my firm had left a half-baked Ionic Angular project behind. I wasn't going to pick up an Angular codebase I didn't understand, so I started fresh. In hindsight that was shooting myself in the foot — I probably could have finished from where it was — but the Ionic framework went over my head, so I rebuilt it on the React Native knowledge I actually had. The client's patience was already thinning by then.
React Native is still easier to work with than a lot of other frameworks, mostly because of how well it plays with the rest of the React package ecosystem.
The backend
Stack
- Node.js and TypeScript
- Drizzle ORM for MySQL
- AWS S3 for image storage
Hosting-wise this reused the setup from my earlier workforce app — Node on an Ubuntu VPS behind Nginx Proxy Manager. The TypeScript-to-JavaScript build flow that had felt experimental on that project was routine by now.
For a long time I'd been eyeing Go for the things it does that TypeScript can't, but with the deadline pressure I settled on Node and Express and moved on.
The backend leaned on a few specific pieces:
- GeoJSON for the nearby-vendor location search.
- aws-sdk with Multer for handling file uploads to S3.
- Puppeteer for generating invoice PDFs — the vendor creates an invoice, it renders to PDF and saves to S3.
- Socket.IO for the live booking handshake. This was the weirdest part: I needed to fire an alert dialog to the vendor a client had chosen. The socket implementation came out a bit hacky, but it worked.
The frontend, twice
This was the hardest stretch. Two apps — one for the vendor, one for the client. The client searches their nearby radius for vendors who are currently online, then books their hours. It's a quasi-live booking flow where a user buys a service and schedules it for an at-home visit.
What's next
A few frameworks are starting to look more appealing than rolling my own TypeScript server — NestJS on the Node side, and I keep coming back to Go for the next major projects. Either Go or Rust for the heavier, more complex work, while staying on Node in the near term until I've learned enough. Axum for Rust or Gin for Go wouldn't take me long to get comfortable with.