Projectsv1.10.0

// ANDROID · FLUTTER · LOCAL-FIRST

Tempo

Two jobs, four units, one brain.

The dashboard — money, workload and today, with a booking clash caught automatically

// WHY IT EXISTS

A student working casual retail lives across four systems that don't talk: a roster app, a payslip portal, a university LMS, and a calendar. None of them knows the others exist  so a shift gets booked over a seminar, an assignment moves and nobody notices, and the only way to know what a week actually paid is to wait for the payslip. 

Tempo is the join. One database, one calendar, one set of numbers. 

The dashboard — money, workload and today, with a booking clash caught automatically
01/ 09

Home

The dashboard — money, workload and today, with a booking clash caught automatically

Tax that shows its working, instead of asserting a number

// THE MONEY ENGINE

Money maths that survives an audit.

Every amount is integer cents end to end — no floating point anywhere in the money path, one rounding step, at the end. Pay is costed against effective-dated rule sets, so a shift worked in June is priced at June's rate even after July's rise; a “recalculate” pass re-prices history when you backfill old rates, and skips anything you typed in by hand.

Withholding follows the same method an employer uses: annualise the pay period, tax the annual figure against the 2024-25 resident brackets plus the Medicare levy phase-in, then take one period's share back out. That shape is why a heavy week is withheld harder than a quiet one — and why the app shows its working rather than asserting a number.

integer centseffective-dated rates2024-25 bracketsMedicare levy

// FROM ROSTER TO BANK BALANCE

Four steps from a shift to what lands.

01

Log

One date, two times

Start, end, meal break.

one screen

02

Cost

Against the award

Penalties, loadings and effective-dated rates.

integer cents

03

Withhold

PAYG, the employer's way

Annualise → tax → de-annualise.

AU brackets

04

Alarm

Four, at alarm volume

Start, end, and both ends of the break.

exact alarms

Study, grouped by unit — with OnTrack's own statuses carried through

// STUDY

OnTrack, without the tab.

Tempo speaks to Deakin's OnTrack (Doubtfire) directly — pulling every task for the units you're actually enrolled in this trimester, filtered by teaching period so a decade of finished units stays out.

Sync is one-directional and opinionated: it creates what's new, updates due dates that moved, and closes what OnTrack marks complete. It never reopens something you've ticked off, and never writes back. Each task wears OnTrack's own status — submitted, fix and resubmit, submitted late — in OnTrack's own colour language.

Connecting is a one-time act. Doubtfire access tokens expire in two hours, so Tempo holds a refresh token instead and renews itself in the background, capturing each rotation so the connection never lapses.

// CAPABILITIES

What it actually does.

Award interpreter

Saturday, Sunday, evening, overnight and overnight-Saturday penalties, casual loading and super — effective-dated, so rates can change.

integer centsdecimal/rational

PAYG withholding

Per-employer pay cycle and tax-free threshold, withholding derived per period and shown with its working.

AU tax bracketsMedicare levy

Four shift alarms

Start, end and both ends of the meal break, on a dedicated channel using the system alarm tone at alarm volume.

exact alarmsfull-screen intent

Live OnTrack sync

Automatic on open, manual on demand, with statuses and units carried through.

Doubtfire APIrefresh tokens

Conflict radar

Catches a shift booked over a class before it happens.

pure domainunit-tested

Encrypted backup

AES-256-GCM with PBKDF2, exported to a file you hold. Biometric app lock.

cryptographylocal_auth

// UNDER THE HOOD

Serious machinery, no servers.

App

  • Flutter 3.44
  • Dart 3.12
  • Material 3

State & routing

  • Riverpod 3 (codegen)
  • go_router 17

Data

  • drift / SQLite
  • 18 migrations

Money

  • decimal
  • rational
  • integer cents

Platform

  • flutter_local_notifications 22
  • home_widget
  • local_auth
  • speech_to_text
  • flutter_secure_storage

Quality

  • very_good_analysis (strict)
  • 324 tests
  • 0 analyzer issues

324

tests, green on every release

18

schema migrations, zero data loss

26

releases, shipped from daily use

0

servers, accounts or trackers

Built for one person. Held to production standards.

15,700 lines of hand-written Dart across 145 files, 324 tests, 18 schema migrations applied in place without losing a row, and 26 releases cut from real daily use — every bug on this page was found by living with the app, not by testing it.