DashPilot¶
DashPilot is a native, local-first iOS companion for delivery drivers. It measures shifts, deliveries, routes, recorded mileage and gross earnings on device, so a driver can see how their work actually performed without handing that history to a server.
It is a general delivery-driver tool. It has no integration with DoorDash or any other delivery platform, it does not observe, automate or interfere with those apps, and anything that cannot be derived legitimately from device sensors and stored history is either typed by the driver or left out.
Who it is for¶
Drivers who want a truthful record of their own work: how long a shift ran, how much of it was recorded, what it paid, and what those two facts imply per hour and per recorded mile. It is also a worked example of a small SwiftUI and SwiftData application that takes persistence, permissions, monetary precision and honest wording seriously.
The workflow that exists today¶
flowchart LR
A[Start shift] --> B[Route capture, in the app and off screen]
B --> C[Record deliveries, one tap per event]
C --> D[End shift]
D --> E[Enter gross earnings]
E --> F[Review deliveries, mileage and rates]
One shift runs at a time, and as many deliveries within it as the driver is actually working. While the shift runs, accepted positions are recorded against it, and recording started with DashPilot open carries on while the driver is in another app or the phone is locked. Each delivery in progress gets its own large control offering only its own next step. When the shift ends, the driver may type what it paid, and the completed shift's detail screen states what each delivery recorded, how much of the shift a delivery was active for, the shift's recorded mileage, the shape of its route, and three derived rates together with the reason any of them could not be derived.
Read the shift workflow Read the delivery lifecycle See what is and is not implemented
Engineering characteristics¶
- First-party frameworks only. SwiftUI, SwiftData, Core Location, App Intents, ActivityKit, WidgetKit, OSLog, Swift Testing and XCUITest. There are no third-party runtime dependencies.
- Versioned persistence. The schema has been versioned since v1 and carries a migration plan exercised by tests that open stores written under every older version. See Migrations.
- Nothing derived is stored. Recorded mileage, a delivery's state, delivery active time and all three rates are recomputed from the stored route, timestamps, deliveries and amount every time they are shown, so the store never holds two answers to the same question.
- Decimal money. No monetary value passes through binary floating point, in memory or in the store. See Money and metrics.
- Deliberate location handling. Authorization, accuracy, the system-wide Location Services switch, sample filtering and capture continuity are modelled separately and tested separately. See Location.
- Testable without the UI. Domain types import neither SwiftUI nor SwiftData, so every calculation is verified without a container or a rendered view.
What it deliberately does not do¶
- No delivery-platform account, credential, import, scraping or automation of any kind.
- No accounts, no sync, no analytics, no telemetry, no advertising and no network code at all.
- No guaranteed continuous recording. A recording can only be started with the app open, iOS may suspend or end the app at any time, and nothing relaunches it, so a route can still have a gap in it. DashPilot says so instead of guessing across it.
- No claim that recorded mileage equals the miles driven, and no tax or deduction figure.
- No profit, take-home or net earnings. Gross earnings are one number the driver typed, and the one place a cost is subtracted, a period's net after recorded expenses, is one recorded subtotal less another rather than a profit figure.
- No estimated costs. An expense exists because the driver entered it; nothing is derived from mileage, hours or a vehicle model, and no expense is attributed to a shift or a delivery.
- No automatic delivery detection. Every delivery event is one the driver recorded.
- No machine learning, no offer recommendations and no automated decisions.
The full list, including the parts that are simply not built yet, is on Limitations.
Where to go next¶
| Section | What it covers |
|---|---|
| Product | What the app does today, screen by screen, and what it does not claim |
| Architecture | Layering, persistence, location, measurement, money and privacy |
| Development | Building, testing and how the repository is organised |
| Reference | The stored data model and the current limitations |
Documentation status
This site documents schema v14 and the shift, route, earnings, metrics, detail, delivery lifecycle, offer grouping, pickup identity, pickup wait, per-delivery earnings, additional tips, expected pay, period summary, period comparison, history export, recorded expense, estimated fuel and net, shift pause and Live Activity work completed so far. Every amount, coordinate, route, note and business name in it is synthetic.