01 Background
Thomas Tyler Hill.
I'm an American developer and operator based in Bali, working GMT+8 with deliberate overlap into Australian hours. I run SSTIEM, a boutique that builds business operating systems — platforms, orchestration engines, automation layers, and the applications sitting on top of them. I'm not an agency, and I'm not a marketplace freelancer. With me you get my time, my projects, and my judgment on every architectural call.
GMT+8AU-hours overlap
Full-timeOne project, dedicated
9 liveProduction platforms
BoutiqueCustom development
Before software, I ran operations.
From 2014 to 2018 I worked with NASA in data systems and field research for agricultural and soil programs — growing from field technician into technical manager. I deployed environmental monitoring hardware, pulled soil samples in the field, ran the analysis back at the lab, and helped turn raw field telemetry into research-grade data for white papers. When a measurement has to be right, the process around it matters more than any one clever part — that lesson has shaped everything I've built since.
After NASA, I went on to direct operations for residential housing in Seattle — running logistics and vendor budgets across 300+ tenants. From there I started businesses of my own, built some, sold some, and moved into service businesses, platforms, and media companies in Bali. That's where SSTIEM began.
SSTIEM was born out of need.
SSTIEM has been alive for three years, and it started because I kept watching good businesses lose time to software that wasn't custom, wasn't navigable, and wasn't theirs. So I started building my own: infrastructures, operating systems, orchestration engines, and multi-tenant platforms that fit the way a business actually runs, not the way a template assumes it does.
We started with business owners, and now that same discipline runs across every vertical I build in — websites, applications, automations, and the protocols and engines underneath them. The nine platforms in the live-work section below are all live, all open to inspection, right now.
References available on request, including client contacts who can speak to delivery and communication directly.
03 Live work
Every one of these is a business operating system
I call them BOS builds, and they all carry the same four layers — which is exactly the four layers your brief describes. Across them I've worked custom databases, Postgres, SQLite and Supabase, multi-tenant payment infrastructure, hosting and security, and engines running large datasets concurrently.
Backend + business rules
The engine underneath: data model, orchestration between third-party systems, and the rules that decide what a user is allowed to do. Never hardcoded. Always settings an operator can change.
Operations dashboard
The staff-facing side. ATX Notary runs ten modules: appointments, clients, messages, finance, compliance, automation, SEO, audit logs, users. That is the shape of your admin portal.
User dashboard / portal
The customer-facing account: bookings, history, documents, payments, support threads. Your member dashboard is this layer.
Multi-tenant capability
Built so a second location, brand, or business runs on the same architecture with different settings — I've run tenant infrastructure past 10,000 tenants. Your Section 5 requires exactly this: the presales engine reused at the next site.
A few more run the same way, even without their own card above. OMNIONE ingests continuously at high volume, with throughput, queueing, and state that stays correct under sustained concurrent load — the nearest thing I've built to your capacity-cap problem. Silk Route is a wholesale trade platform whose inventory and cross-border logistics had to stay accurate while the business moved under it. The Lead Intelligence Pipeline resolves identity across records that disagree with each other, the same shape as your HubSpot trial-abuse dedup. And TOMYLER takes a trend all the way through generative design into CAD and manufacturing output. Different industries, same discipline — I design every build as the operating system underneath a business, not a page for it to sit on.
04 How this actually gets built
You're not buying a gym app. You're buying the platform that runs the gym.
Reading your brief carefully, the member app is actually the smallest piece. The real build is everything behind it: the backend where every rule lives, the glue that keeps GymMaster, HubSpot, and Stripe perfectly in sync, and the engine that makes the hard moments (a launch rush, a membership handoff) behave. Here it is in plain terms, month by month.
The short version
Not a front-end and a back-end bolted together — one complete platform. What members touch is the smallest piece: booking, paying, opening the door, referring friends. Underneath it is an admin portal that is a real internal operating system, not a login page — members, capacity, tickets, waitlists, campaigns, analytics, all in a browser. Underneath that is the backend platform doing almost all the actual work: one member upgrades their tier and eight things fire in order, validate, GymMaster, Stripe, HubSpot, app, notification, log, dashboard, and the backend conducts that every time, for every event. GymMaster, HubSpot, and Stripe stay exactly where they are; I build around them, which is realistically a third or more of the total engineering effort. And every rule that decides what a member is allowed to do ships as a setting you can change, not code you have to pay someone to rewrite.
With me, none of that gets lost in translation. I read a spec for its contradictions before they become change requests, I write the process documentation as the system takes shape, and I'll tell you when something won't work as written before it costs you a month. The person who decides how a rule gets enforced is the same person who builds it, tests it under load, and explains it to you afterward — and I'm treating this as the start of a relationship, not a single transaction. You have future locations and future ideas coming; what you get with me is a vendor you can call on for both.
Month by month
Month 1 · FoundationsOne home for all your information — members, memberships, payments, bookings — wired to GymMaster, HubSpot, and Stripe test environments. You'll see: the skeleton working, and weekly demos begin.
Month 2 · Money + membershipWeekly billing across your three tiers, the one-off access pass, personal-training add-ons and casual packs, the trial logic, and failed payments handled gracefully — everything staying in sync with GymMaster. You'll see: a member sign up, pay, and appear correctly everywhere.
Month 3 · The capacity engineThe presale — waitlist, tokens, the 1,000 founding cap, and the 15%-for-life fallback — plus the ongoing 1,700 ceiling. Built as settings, not hardcoded, so your next location reuses it. You'll see: a simulated launch rush that refuses to oversell.
Month 4 · Doors + bookingsTap-to-open at the door, the QR fallback, tiered booking windows for the recovery zone, the referral system, and the Google-review reward. You'll see: a door opening from the app, and bookings obeying tier rules.
Month 5 · The apps take shapeThe member app on both platforms built from your Figma files, the web dashboard, the membership transfer flow, the feedback loop, and member stats. You'll see: the real app on your own phone.
Month 6 · Hardening + launchIndependent security review, load testing, App Store and Play submission with buffer for review cycles, documentation, and handoff. You'll get: the full package, live.
Point by point
Your specification runs seventeen sections. Here is what each one asks for, what it means in practice, and how I would build it.
1 · ArchitectureSetup
What it asks forYour three systems stay exactly where they are — I don't replace anything you already pay for.
How I would build itI build the member app, the dashboards, and the orchestration layer underneath that keeps GymMaster, HubSpot, and Stripe talking to each other correctly. Your Figma designs get built as drawn.
2 · GymMaster integrationMonths 1 & 4
What it asks forEvery membership event stays in sync both ways, and the app opens your doors through GymMaster's own system.
How I would build itJoining, upgrading, downgrading, pausing, cancelling — all flow both ways between the app and GymMaster through webhook-driven sync, so the two never disagree and GymMaster stays the system of record. For the door, the primary path is phone-near-door, member taps, the app calls GymMaster's door trigger. The rotating QR code is the fallback for when the internet at the door is patchy — I'll pressure-test the handoff between the two hardest, because 5am at a locked door is the moment a member judges the whole app.
3 · HubSpot integrationMonths 1–2
What it asks forHubSpot becomes your memory — waitlist, lead lifecycle, and who's already used a trial.
How I would build itI've built inside HubSpot with custom code actions before, so identity dedup against HubSpot's record — not my own database — is the default pattern, exactly as your brief specifies. Nobody earns a second trial by signing up with a new email address.
4 · Stripe integrationMonth 2
What it asks forAll the money: weekly memberships across three tiers, the joining fee, add-ons, casual packs, Apple and Google Pay.
How I would build itI've shipped live Stripe subscription billing before. Every charge carries an idempotency key so a retry can never double-bill, and every webhook updates membership status the instant it fires — that discipline is my default for payments now, not something I'm learning on this build.
5 · Presales campaignMonth 3
What it asks forYour launch day has to sell exactly 1,000 memberships, not 1,001, no matter how many people hit buy in the same second.
How I would build itThis is the engine I take most seriously in your whole brief. The only referee that can't be fooled is the database itself, so I enforce the cap at the database level — row-level locking, a checkout hold that reserves a slot only while someone is actually paying, released the instant they don't finish. Cap number, token window, and fallback percentage all live as settings, because you told me this campaign runs again at your next site.
6 · Ongoing capacityMonth 3
What it asks forThe gym never sells past 1,700 members, and a cancelled spot opens instantly for the next person in line.
How I would build itSame locking discipline as the presale, running continuously instead of once. A slot releases the moment GymMaster confirms a cancellation, and a new signup can't claim it until the database says it's actually free — the same transaction-safe pattern, not a second system.
7 · Booking windowsMonth 4
What it asks forDifferent membership tiers get different advance-booking windows for the sauna and cold plunge.
How I would build itFeature-gated by tier, config-driven by design — this is how I build tier logic by default, specifically so changing 7 days to 5 later never means touching code.
8 · Free trialMonth 2
What it asks forOne free week per person, for life — not per email address.
How I would build itDedup runs against HubSpot's record, exactly as specified, with a backend toggle controlling whether trials are even offered. The day-8 conversion to paid runs on a scheduled job, not a hope, and a caught duplicate routes straight to your team.
9 · Referral systemMonth 4
What it asks forA member invites a friend; when the friend joins and pays, the member gets a free month.
How I would build itA referral system is a feature gate plus a reward trigger — I've built several. The part that actually matters is making sure the reward only fires once the referred member has genuinely paid, not just signed up, and that the referring member's ID lands on the new profile in GymMaster.
10 · Feedback moduleMonth 5
What it asks forA real two-way conversation, not a one-way contact form.
How I would build itBuilt as a ticketing model with a thread and a status, the same pattern I use for any two-way messaging system — media goes to object storage, and a reply from your team fires a notification straight back into the member's app.
11 · Google review integrationMonth 4
What it asks forA rating captured in-app, synced out to your Google listing, with an automatic reward.
How I would build itStraightforward — a rating capture with a reward trigger attached. I've built the same shape before for review-incentive flows. Four or five stars applies 7 days free to the next bill automatically.
12 · Peer-to-peer membership transferMonth 5
What it asks forOne member hands their membership to another, cleanly, without breaking continuity or the capacity count.
How I would build itI treat this as a state machine, not a form — the real engineering here is defining who's allowed to give, who's allowed to receive, the exact moment the handoff becomes final, and what happens if either side drops it mid-pass. Every transition writes an audit row, and the capacity count gets read and written inside the same transaction as the transfer, so it can never drift mid-handoff. In GymMaster it lands as a profile transfer, not a cancel-and-rejoin, so membership history stays intact. The incoming member sets up their own payment method, per your own recommendation — cleaner billing history.
13 · Member dashboard & pushMonth 5
What it asks forTenure, check-ins, and referrals, plus a reusable onboarding walkthrough and push notifications.
How I would build itRead-only views pulling from data the backend already tracks, so there's no second source of truth to keep in sync. The onboarding walkthrough is a component you can edit and reuse at the next location, which is how I build onboarding by default now. Push runs through Firebase for class reminders, billing, capacity openings, and lifecycle events.
14 · Native applications & web portalMonths 5–6
What it asks foriOS and Android apps from your Figma files, plus a browser dashboard sharing the same backend.
How I would build itMy recommendation is React Native, built with Expo — one shared TypeScript codebase compiled for both stores, sharing real code with the web dashboard instead of two teams building the same logic twice. Against a fixed February date, that's the business logic written once, not twice, with genuine native performance and direct Bluetooth and push access at the door, not a compromise version of either. Gate access stays native-app-only, deliberately, exactly as your brief specifies. If any single piece needs native code beyond that, that piece goes native — the build serves the spec, not a framework preference.
15 · The engineering standardsThroughout
What it asks forSeparated environments, Australian hosting, independent security review, and full testing including a simulated launch rush.
How I would build itMy recommendation is Cloudflare on the edge for DNS, CDN, and security, with a dedicated VPS in OVHcloud's Sydney region underneath it — the one provider in my usual toolkit with an actual Australian datacenter, which matters directly for your members' health-waiver data. The VPS runs a self-managed Postgres instance configured specifically for the row-level locking items 5 and 6 depend on; that's more hands-on than a fully managed database, and I'd rather say that plainly than imply otherwise — the trade-off buys lower cost and keeps me directly responsible for how the locking is configured. Before launch, someone who isn't me tries to break the caps, the money, and the transfer — I already have that reviewer in mind and will name them on request, because a builder marking their own homework isn't a review. Staging and production stay fully separated, everything encrypted in transit and at rest, and the concurrent-load test happens on a simulated presale before your real one.
16 · The timelineConfirmed
What it asks forMid-August start, delivered by end of February.
How I would build itReal, because it's already sequenced month by month above — store review time is built into the schedule, not hoped for at the end. The one thing that moves it is a late handoff of the Figma files or the GymMaster, HubSpot, and Stripe sandbox credentials.
One line answers section 17 directly: the technical approach and hosting provider are named above with reasoning, the total cost is in section 06, kickoff assumptions are in section 07, and the timeline is confirmed in item 16 above.
06 Compensation
Total estimated cost: US$45,000.
That's the full scope in your brief, delivered inside your fixed window — roughly a thousand hours, full-time, across six months. The arithmetic is open on purpose: the price is built from the scope, not guessed at it.
Where the thousand hours go
Foundations + integrations~170 hours — the data model, GymMaster / HubSpot / Stripe wiring, and separated test and live environments
Billing + membership~150 hours — weekly billing across tiers, the access pass, add-ons and casual packs, trial logic, failed-payment handling
The capacity engine~160 hours — presale tokens, both caps enforced at the database, the fallback offer, and simulated launch-rush testing
Doors, bookings, referrals~150 hours — tap-to-open, the QR fallback, tiered booking windows, referral and review rewards
Apps, portal, transfer~220 hours — the member app from your Figma, the admin portal, the membership-transfer workflow, the feedback loop
Hardening + launch~150 hours — security review, load testing, store submission with review buffer, documentation, handoff
Roughly 1,000 hours at an effective US$45 an hour, all in. Billed as a simple monthly retainer, so you never bet the budget on trust — you pay for the month in front of you, and you watch it get built.
The build
$7,500 / month × 6
Engineering, architecture, integrations, testing, and deployment of a production-ready platform — everything needed to deliver is included, no separate line items to negotiate later. No 50% deposit, no invoice ambush. The first month starts it, and every month after that you've already seen what the last one produced. Weekly written updates, a weekly call if you want one, and a live build you can open any time. If a phase ever genuinely needs an extra pair of hands, we talk first. Nothing changes without your sign-off.
If you already have a team
Different conversation
If you have developers you'd like on this, or you'd rather bring me in as a technical lead inside your team, that's a different scope and a fair conversation — happy to have it.
What's included
Everything required to deliver the platform end to end — the full build, every integration, and production deployment.
Also separate
Apple and Google developer accounts, store fees, and the work of getting the app live in both stores. A small, defined extra scope we agree together.
After launch
Ongoing maintenance and technical stewardship: a retainer conversation for later, once you've seen how I work.
For context: at published Australian agency rates of AUD $150–330 an hour, this scope prices out well past AUD $150,000. The judgment, the architecture, and the accountability stay senior, and stay mine.