Native and cross-platform mobile apps that ship — and that you can keep shipping.
What we deliver
Kotlin Multiplatform (KMP) for shared business logic across iOS and Android with native UI — or React Native (Expo) when the team prefers a single JS codebase.
Native Swift (SwiftUI) and Kotlin (Jetpack Compose) when performance, system integrations, or platform features demand it.
iOS system integrations: Share Extensions, Call Directory, Widgets, Background Tasks — the surface area beyond a single app icon.
On-device ML for inference that must stay local (privacy, latency, offline) — CoreML / TensorFlow Lite with a cloud-fallback path for heavier models.
App Store and Play Store submissions with Fastlane automation, code signing, provisioning profiles, and staged rollouts.
Over-the-air (OTA) update channels for zero-downtime patching of JS bundles.
Offline-first sync strategies that keep your app usable without connectivity.
Permissions discipline — calls, contacts, SMS, location, notifications — scoped to the minimum the feature actually needs, with the right Info.plist / Manifest copy to clear store review.
Mobile observability: crash reporting, performance profiling, and device-level debugging.
When this fits
You have a web product and your users are asking for an iOS / Android companion.
You need both platforms shipped without doubling your engineering headcount.
Your user base is in the field and needs offline-capable tools.
Proven in practice
Reference builds from our own work that exercise this capability end to end.
Consumer — communications & fintech
Cross-Platform Communications & Payments App
The problem
People juggle separate apps to chat, call, and pay — and the constant context-switching is friction, especially when a payment means leaving the conversation to open a banking app and copy details across.
What we built
A cross-platform mobile app unifying real-time messaging, peer-to-peer video calling, and QR-code payments in a single Capacitor-wrapped codebase.
▸WebRTC peer-to-peer audio / video with real-time MediaPipe segmentation — live background blur and virtual backgrounds composited on a canvas stream.
▸One Next.js codebase shipped two ways: an installable, service-worker-cached PWA and an Android build with a native Java plugin that detects and launches other apps.
▸SGQR / PayNow QR scanning that parses the EMVCo payload and launches the right native bank app via an Android intent.
▸Supabase Realtime messaging with optimistic send and an offline outbox — failed sends queue in local storage and flush on reconnect.
▸Emergency SOS that captures and reverse-geocodes the user’s location and pushes it to contacts.
Next.js 16
React 19
Capacitor 8
Supabase
WebRTC (simple-peer)
Education — school administration
School Operations & Timetabling SaaS
The problem
Building a school timetable by hand takes weeks and still produces clashes, and covering a sudden teacher absence means hours of frantic phone calls — with no guarantee the cover load is shared fairly.
What we built
A multi-tenant SaaS for school timetabling, relief-teacher planning, and mobile attendance, powered by a constraint-solving scheduling engine.
▸An OR-Tools CP-SAT solver generating clash-free timetables — enforcing teacher, room, and class non-overlap plus full curriculum coverage, while respecting teacher qualifications.
▸Automated relief-teacher allocation: approving a leave writes a transactional outbox event a worker drains within seconds to a solver that optimises for teaching continuity and fair workload balance.
▸Privacy-preserving mobile attendance (React Native / Expo): the on-campus check is computed on-device by haversine distance and only a boolean is sent — raw coordinates are never persisted.
▸Database-per-tenant isolation with per-tenant KMS keys; the scheduling engine connects read-only under a least-privilege, RLS-scoped role.
▸Transactional outbox (at-least-once, SELECT … FOR UPDATE SKIP LOCKED) and an append-only audit trail that HMACs the actor identity under a per-tenant key.