I designed, built and now maintain the point-of-sale app that runs Studio 57 Nail Bar & Spa from an iPad at the front desk. This is the story from version 1, through what broke once the salon depended on it every day, to the redesign that fixes it.




The first version replaced paper tickets with an iPad app: staff log in with a PIN, ring up services, and every sale is sent to a Google Sheet. I designed it in Figma, built it in React, and connected it to a Google Apps Script that stores the data in Google Sheets.
Version 1 worked well for one stylist and one client at a time. The cracks showed once the whole team used it on busy days.
About four months of real use showed that the app’s biggest problem was invisible: sales had stopped reaching the Google Sheet, so the business records were incomplete. Everything else came from watching how the team actually works, several stylists and clients at the same time.
The full list is below.
| What we saw at the salon | Why it happened | Impact |
|---|---|---|
| The Google Sheet stopped showing new sales | Each day was saved in the script’s private settings, which have a size limit; it was about 80% full | The owner asked for every transaction to date and the Sheet couldn’t provide it |
| Two stylists working at once got in each other’s way | The app held only one open ticket | One stylist waited, or kept services in her head until the other checked out |
| Opening cash showed $200 every morning | The server sent $200 for any day not saved yet, overriding the carried-forward amount | The admin retyped it daily; when they forgot, cash totals were wrong |
| Monthly and quarterly reports didn’t match reality | They multiplied today’s figures instead of adding up real tickets | No trustworthy report for any date range |
| A forgotten ticket stayed forgotten | Past days could be viewed but not added to | Missed sales never reached the books |
| The admin screen broke on an upright iPad | The layout assumed a wide screen | Tabs and cards overlapped and the table was cut off |
| I got locked out | The salon changed the passcodes after launch | I couldn’t get in to support them |
| Staff struggled with small text and dropdowns | The team is in their 40s to 60s | Slower checkout and more mistakes |






















I fixed the storage before touching the design, so no sale could be lost while the salon kept working.
That fixed the records. The rest of the list needed a redesign.
The core question was how several stylists can each keep a ticket open without crowding the screen. I sketched three answers, in a new visual style at first, and showed them to the owner.
The owner picked A and asked for B’s sense of who is busy. Two pieces of feedback then shaped everything after:
Keep the fonts and colors the same.The staff already knew the app, so the final screens use version 1’s system font, grays, pink and green, and keep familiar pieces such as the receipt rows, the amber massage control and the discount box.
Make it as big and simple as it can be.Big tiles, one decision per screen, and strong color for whatever is selected.
In version 1 the stylist was a dropdown inside the receipt, easy to skip or pick wrong, and there was no record of what kind of client it was. The owner also wanted to know how many clients are walk-ins, regulars or appointments.
A first screen asks “Who is this ticket for?” with big stylist tiles and a required client type. Nothing is pre-selected, so no one can tap straight through. The client’s name is optional, and “View Tickets” skips straight to the open tickets.
With one ticket at a time, a second stylist had to wait or remember her services.
Open tickets sit as tabs across the top, with a count badge. The active tab turns pink so it’s clear whose client you’re on. Services added turn pink with “✓ ADDED”, and each ticket saves itself on the iPad, so nothing is lost if the app closes. Tips and payment wait until checkout, because services get added while the client is still in the chair.
Clients often get a manicure from one stylist and a pedicure from another, and the stylist dropdowns were hard to use.
Each service has a “Done by ▾” button that opens the same big stylist tiles. The ticket becomes Multi-Staff, and tips and commission still split the way they always did.
Version 1 put everything on one long panel and never confirmed the sale reached the Sheet, which is how the missing records went unnoticed.
“Ready to check out” opens a short checkout (payment, discount, tip, LOG TICKET), then a confirm step. The receipt says “Saved to Google Sheet ✓” only once the Sheet has the ticket. Until then the ticket waits on the iPad and is sent again if needed.
The audit log was one long table of every ticket. To fix one stylist’s ticket, the owner had to scan everyone’s, and editing meant typing into small cells.
A tab per stylist with a ticket count, newest ticket first. Tapping a ticket opens it with the same receipt rows staff use, and saving changes only that one ticket, so an edit can never wipe tickets another device saved.
On busy days a sale sometimes wasn’t logged, and past days couldn’t be changed.
Pick any past day on the calendar and tap “Add a missed ticket”. It saves to that day and the Sheet, marked “Added later by admin” so it’s easy to audit.
Opening cash reset to $200 every morning, and closing was a two-button popup that never asked how much cash was actually in the drawer.
Closing now asks for the counted cash, shows the difference from what’s expected, and says “$247.00 tomorrow’s opening cash”. The next morning starts with that amount automatically, with a drawer history to check against. A new Cash in Hand card shows the day’s own cash: cash sales minus card tips and commissions paid out of the drawer.
The owner asked for every transaction to date, and the old monthly figures were estimates.
A Reports tab with any date range, real totals, payment methods, stylists, services and every transaction, plus Download and Email Report. Analytics adds Walk-in, Regular and Appointment by day, month and year.
The iPad is sometimes stood upright, where version 1 overlapped. The client also asked for a dark mode. And after the salon changed its passcodes, I had no way to get in to support them.
On an upright iPad the calendar folds into a date bar and the tabs sit in two rows. A Light and Dark switch sits next to Font Size, and both are remembered. A developer PIN is kept only in the server’s private settings, never in the app or the Sheet.
The new version had to pass one test above all: every past and present transaction stays exactly as it was.
The salon’s records are complete again, and the redesign the owner approved fixes every problem found in real use.
The most important problems only showed up after weeks of real use with the whole team.
The most valuable work was invisible: making sure no sale could be lost.
For staff in their 40s to 60s, bigger targets, fewer choices per screen and clear feedback like “Saved ✓” mattered more than new features.
Keeping version 1’s fonts, colors and familiar controls made a big change feel small to the staff.
Looking for the design side of this project? See the full Studio 57 website and booking app case studies.
← Back to all work