A personal car maintenance companion. Oil changes, tyre rotations, filters, MOT and registration, and even the car wash — tracked in one place, with reminders that account for how much you actually drive.
Status: planning. No code yet. This repo currently holds the plan.
Most maintenance reminders are wrong because they're calendar-based, while half of car maintenance is distance-based — and nobody knows their odometer reading offhand. DriveKeeper keeps a running estimate of your mileage from occasional check-ins, then converts every interval, distance or calendar, into a single answer: what needs attention, and when.
- No app stores. Distributed as an installable web app (PWA), which is also what makes external billing possible — Apple and Google mandate their own in-app purchase systems for digital subscriptions.
- The second vehicle is the paywall: free is one car, Pro unlocks the garage.
- ≥10 paying customers is the success condition, so the roadmap is ordered by shortest path to a paid invoice, and distribution is planned as a deliverable.
- US, UK, and EU units and regulations from launch — including the fact that the UK measures distance in miles, fuel in litres, and economy in imperial mpg.
| Doc | What's in it |
|---|---|
docs/PLAN.md |
The master plan — platform recommendation, scope, the garage and paywall, units and regions, the reminder strategy, billing and VAT, milestones, risks, open questions |
docs/DATA_MODEL.md |
Postgres schema and the core algorithms: distance estimation, due calculation, reminder planning |
docs/DECISIONS.md |
16 ADRs, including the four that later decisions superseded |
data/schedule-templates/ |
Maintenance interval templates (imperial + metric) and per-region legal task packs |
Split by surface, served from one origin:
| Path | Stack |
|---|---|
/, /pricing, /legal |
Next.js, statically exported — SEO decides whether strangers convert |
/checkin/[token] |
Next.js — the odometer check-in, must open instantly |
/app/* |
Flutter Web — the logged-in product |
| API, cron, webhooks | Supabase Edge Functions — this is the backend |
Hosted on Cloudflare Workers (static assets). Supabase for Postgres, magic-link auth, and storage (first-class SDKs in both TypeScript and Dart). Resend for the email reminder backbone, scheduled by GitHub Actions cron. Billing starts as a payment link plus a manually granted entitlement, and becomes Polar (merchant of record, so EU VAT is never yours) once ten people have paid.
Running cost: $0/month, plus ~$12/year for a domain. Every tier used permits commercial use — that constraint drove the hosting choices (ADR-018).
The maintenance engine lives server-side in TypeScript, not in the Flutter client — the reminder cron needs it too, and one implementation beats two.
Start reading at docs/PLAN.md.