Skip to content
JAMMtronics
← All work

In-house product · SaaS · Mobile

TymTracker: invoicing SaaS with iOS and Android apps

A time-tracking and invoicing product built to replace a tool whose price rose 20×. A multi-tenant web platform with online card payments, and a companion iOS/Android app for invoices, estimates and clients on the go, with push notifications when invoices are opened, accepted and paid.

The TymTracker iPhone app showing the home screen with this week's hours and money owed, the open invoices list, and the weekly timesheet. Client names and amounts are illustrative.

Why it exists

My invoicing tool’s price went from about $100 to about $2,000 a year, so I built a replacement, and then turned it into a product for other freelancers and small consultancies.

The platform

  • Time and billing: weekly timesheet, projects and clients across multiple businesses, a four-step invoice wizard that pulls only uninvoiced time and billable expenses, PDF invoices by email, estimates, recurring invoices, prepaid-hour retainers, late fees, automatic past-due reminders, client statement links and a profitability report.
  • Getting paid: online card payments through Stripe Connect, where each business connects its own Stripe account, and opt-in card-fee surcharging that follows the US rules: credit cards only (never debit), at most 3%, and blocked in the states that don’t allow it. Invoice mail can go out from the business’s own domain.
  • Fits the rest of the business: QuickBooks and Xero exports, a self-serve import from Harvest, and public API keys plus an MCP server, so AI assistants can work with the account.
  • Multi-tenant SaaS foundation: workspaces with owner, admin, member and accountant roles; email, Google and Apple sign-in, with two-step verification on email sign-in; invitations bound to the invited address; and a time zone and week start per workspace, so scheduled jobs decide “today” for each workspace rather than for the server.
  • Installable web app, with a timer that keeps running offline.
  • Money handled as integer cents everywhere, converted in exactly one place, with server-side total recalculation, because invoicing bugs are the ones customers notice.

The mobile app

A companion iOS and Android app built with Expo and React Native on the same API, now in internal TestFlight testing on iOS:

  • Email, Google and Apple sign-in, with two-step verification for email sign-in.
  • Home, invoices, projects, expenses, clients and reports, plus account, security and workspace-member settings.
  • Invoice from the phone: pick a client with unbilled work, create the draft and send it.
  • Estimates: follow up, share the accept link, and turn accepted estimates into invoices.
  • Push notifications when an invoice is opened, an estimate is accepted or a payment arrives; tapping one opens the item.
  • Offline: the last-loaded data stays available without a connection.

Security as a feature

An audit of the first version found forgeable sessions from a placeholder secret and publicly reachable uploads with a stored-XSS path. Both were fixed and verified from outside the network, and the app now refuses to start with a weak secret. That review habit is part of every engagement.

Hosting other businesses’ data raised the bar again:

  • Abuse and race protection: rate limits, an origin check on every state-changing request, and plan and seat limits that can’t be raced, enforced under Postgres advisory locks.
  • An audit log: history on every invoice and estimate and an Activity page, on the web and the phone. Entries name the fields that changed, never their values.
  • Production-ready hosting: uploads in private object storage, served through 5-minute signed links after an ownership check, and error reporting with personal data scrubbed before it leaves the server.
  • Tested where it matters: about 300 automated tests, 176 of them against a real Postgres database, plus an end-to-end suite that tries to reach one workspace’s data from another. The interface has also had a dedicated accessibility pass.

Status

The single-user version runs my own invoicing every day. The hosted service runs on a private staging server and the iOS app is in internal TestFlight; neither is publicly launched yet.

Client names, projects and amounts in the phone screenshots have been changed to protect client confidentiality.

The TymTracker iPhone app's timer screen and account screen.
The phone timer, and the account screen with projects, clients, expenses, estimates and notification settings.
The TymTracker web dashboard with demo data.
The web dashboard on the same account and API.
Weekly timesheet where invoiced cells are locked.
The weekly timesheet. Time already on an invoice locks so billing can't drift. Demo data.
The top of a generated PDF invoice.
Generated PDF invoices, sent by email from the web or the phone.

Have a board, a spec or a problem in mind?

Start with a free 30-minute call. You’ll leave with a clear next step, whether or not we work together.