Rukon
HR Project Overview
iOS / MobileSeptember 2026 (web app on Vercel; iOS unpublished)Personal Project Case Study Ready
DriveKeep mark

DriveKeep

DriveKeep: photo-first fuel, mileage and maintenance log for iOS and the web

Core Value Proposition

A vehicle log where a refill starts with two photos and every number is labelled as measured or estimated, built as an iOS app, a web app and an API.

A personal log for running a car and a motorcycle. A refill starts with a receipt photo and an odometer photo; extraction fills in the form and the owner confirms. Economy is only reported when it was measured between two full tanks, estimates are labelled as estimates, and a vehicle with nothing to measure from shows "Not available" rather than a default. One repository: a SwiftUI iOS app with on-device extraction and opt-in Supabase sync, a Next.js web app with server-side OCR, and a standalone Express backend. Personal project; the web app is deployed on Vercel, the iOS app is not published.

Three phone screenshots of the DriveKeep web app: the car dashboard with odometer, estimated range and tank level; the motorcycle dashboard with its own 12 litre tank; and the vehicle spending card split into fuel, service and other costs.
The web app's dashboards for the car and the motorcycle, and total cost of ownership. Real app, synthetic demo data.
Role
Sole Developer

Product, iOS App, Web App, Backend API, Database & Security, Tests

Context / Client
Personal project, built for the author's own car and motorcycle
Timeline / Period
September 2026 (web app on Vercel; iOS unpublished)
Category
iOS / Mobile

Key Highlights & Practical Impact

Executive Scan
  • iOS extraction on the device with Apple Vision, and Apple's Foundation Models returning structured results on iOS 27+
  • Google sign-in through Supabase without the Google SDK; credentials in the Keychain; sync to row-level-secured tables, off by default
  • Economy only from full tanks, estimates labelled, and "Not available" instead of any default figure
  • Next.js web app with server-side OCR (sharp + Tesseract.js) and guards for backwards odometers and duplicate refills
  • Express 5 API over PGlite with JWT auth, versioned migrations, sync tombstones and backup tooling
  • 64 backend checks (database, API, security) and 21 engine checks passing on the latest commit
Technologies Used
SwiftSwiftUIApple VisionFoundation ModelsSupabaseNext.js 16TypeScriptExpress 5PostgreSQL
LEVEL 2 — DEEP TECHNICAL PROOF

Ready to explore the build?

A detailed look at the end-to-end architecture, process workflows, key engineering decisions, live production capabilities, challenges, and results.

Writing from this work

Two Ways I Use Supabase Row Level Security: Deny-All Behind a Server, or Per-Owner Policies

Across five projects, RLS does one of two jobs: close the Data API while a trusted server does the work, or let Postgres enforce who owns each row. When to pick which.

Google Sign-In on iOS Through Supabase, With PKCE and No Google SDK

Google sign-in on iOS through Supabase with ASWebAuthenticationSession and PKCE, no Google SDK or client secret, plus an identity bug RLS would reject.

Sharing One Supabase Project Between Two Apps Safely

A second app inside an existing Supabase project: prefixed tables, RLS on with no policies, revoked grants, server-only access and an admin check for a shared user list.

Defaults Are Claims: Removing Placeholder Numbers That Looked Like Measurements

A 75% tank, a 10 km/L economy, a hardcoded user id: defaults in DriveKeep that rendered as real data, what replaced them, and the same rule in SpenDrop.

Deletes That Don't Come Back: Tombstones and Last-Write-Wins in Offline Sync

In offline sync, a deleted record comes back when another copy is pushed. DriveKeep's soft deletes, tombstone list and timestamp merge, and its clock problem.

Reading an Odometer Photo: Preprocessing Variants, Tesseract.js and a Plausibility Check

DriveKeep's web app reads four sharp-preprocessed variants of an odometer photo with Tesseract.js and ranks every candidate against the previous reading.

Measured or Estimated: Calculating Fuel Economy Only From Full Tanks

Dividing a top-up into the distance driven gives a meaningless economy figure. How DriveKeep measures km/L only from full tanks and labels estimates.

Screens That Look Like Payments but Aren't: Parsing Malaysian Receipts Without Fake Expenses

Balance, credit-limit and reward screens all show RM amounts. How SpenDrop rejects them, and the Malaysian receipt formats two of my parsers read.

Generating an Xcode Project File From a Script, With Stable IDs

Both of my iOS apps write project.pbxproj from a script. How the object IDs are made, why hashing names beats a counter, and what it costs.

A Postgres-Backed Express 5 API With No Database Server: PGlite, JWT and Security Tests

DriveKeep's backend runs PostgreSQL in-process with PGlite, signs HS256 tokens and has 17 security checks. What it does well and what must change first.

Structured Receipt Extraction With Apple's Foundation Models and @Generable: A Code Walkthrough

How DriveKeep's iOS code asks Apple's on-device Foundation Models for typed receipt fields and fuses them with Vision OCR. A walkthrough of unverified code.