Deeve Technologies
Client workMobile AppWeb Application

Premier Timer, iOS and Android App

Taking over from a departing programmer: an unfinished React Native app rebuilt and shipped to the App Store and Google Play, with per-client session timers, the venue detected rather than typed, and the domains, hosting and GitHub accounts...

ClientPremier Gaming Massage
RoleMobile and web developer, and infrastructure handover
Year2026
TypeMobile App, Web Application
Premier Timer iOS app, sign in, start of day, ready for a client and a running session
The Premier Metrics dashboard the app reports into
Overview

Premier Timer is a shift and session timer for massage therapists working casino floors, shipped on the App Store and Google Play.

With an admin dashboard for the office. Part-time work for Premier Gaming Massage.

Built with
React NativeTypeScriptSupabaseReactViteVerceliOSAndroidRechartsTanStack QueryGeolocationGoogle Maps API
The problem

What was in the way

Therapists work across several gaming venues in a night, moving between tables and seats, running a separate session for every client.

The record of that was manual. Minutes per client, which venue and table the client was at, when a session paused and resumed, and what each shift added up to. All of it written down and reconciled later, which is slow and disagrees with itself.

The office needed the same numbers to pay people and to bill the venues, so any gap between what a therapist wrote and what the floor actually did became an argument at the end of the week.

What I built

Eight parts, each with a reason

What I took over

A handover with nobody left to hand over.

The accounts

Domain configuration, DNS, hosting and the GitHub organisation, moved into the company's own names and back under their control. The most common way a small business loses its own website is a developer leaving with the keys still in their name.

A live estimate, not a mystery

The Today screen shows session time, estimated drop and estimated earnings while the shift is running, split against the therapist's own rate. The shift detail screen breaks the completed total down by location.

A timer that survives a real shift

One tap starts the day, one starts a client. The session screen shows the client, the venue, the table and seat, and the running time. Pause and resume are first class, because a break or a seat change happens mid-session and the clock has to reflect it.

State is held in AsyncStorage as well as Supabase, so a locked screen or a dead signal does not lose the running session.

Location without typing it in

The venue is detected rather than entered. @react-native-community/geolocation and react-native-permissions resolve the site, the therapist confirms it, and location is stamped on the session.

That matters because minutes are billed per location. The app also carries a map screen built on react-native-maps.

An unfinished app

The iOS and Android build existed but was not shippable. What is on both stores now is a substantial rebuild of it, not a version bump.

Consent on file, per client

A client record carries a consent state and a date, shown before a timer starts and updatable from the same sheet. The therapist can see at a glance whether consent is current for the person in the chair.

An admin dashboard on the web

The office reads the same data in a browser. That is a project of its own: Premier Metrics, built in React and TypeScript on Vite, deployed on Vercel.

How it was built

The engineering underneath

React NativeTypeScript on the phone, React 19 with TypeScript and Vite on the web, one Supabase project behind both
11 tablesPlus audit tables: activity logs, location logs, manager access logs and breadcrumbs
Checked at the databaseThe right place for access control when two applications and several roles read the same rows

React Native with TypeScript on the phone, React 19 with TypeScript and Vite on the web, one Supabase project behind both.

The database carries eleven tables, including sessions, shifts, staff, customers, locations and time adjustments, plus audit tables: activity logs, location logs, manager access logs and breadcrumbs. Access is checked at the database rather than in the client, which is the right place for it when two applications and several roles read the same rows.

Navigation on mobile uses React Navigation with a bottom tab bar. Server state on the web is handled by TanStack Query, so the dashboard stays current without a refresh button.

I picked this up when their previous programmer left. The apps were half finished, and the accounts they ran on belonged to somebody who had already gone.

React NativeTypeScriptSupabaseReactViteVerceliOSAndroidRechartsTanStack QueryGeolocationGoogle Maps API
More work

Projects like this

All projects
Why it matters for your project

I build software, and I measure whether it works.

The same questions I research are the ones I ask on client builds: is it reliable, is it fast, is it easy to use, and is it secure. Those four drove satisfaction in my ICT portal study, and they shape how I scope and test every project.