Services
We take on a small number of engagements at a time and see each one through from the first conversation to the thing running in production.
Mobile application development
iOS
Swift and React Native, built against the platform rather than around it: background transfer that continues after the app is terminated, photo and file access under the modern permission model, and the Keychain behaviour that decides whether your app works in somebody's pocket or only on a desk.
Android
Kotlin and React Native, with WorkManager scheduling that respects battery and metered-network constraints. Background work on Android is a negotiation with the operating system, and we write it as one.
Release and operations
App Store and Google Play submission, signing, staged rollout and the unglamorous follow-through: crash triage, store review responses, and the updates that keep an app installable a year later.
Web and backend engineering
APIs and data models
Python and FastAPI over PostgreSQL, designed multi-tenant from the first table so that adding a second customer is a configuration change rather than a rewrite.
Web clients
Interfaces that load quickly on real connections, degrade sensibly when a request fails, and do not require a rebuild of the universe to change a label.
Infrastructure
Docker Compose on rented hardware, object storage behind an S3-compatible API, TLS, offsite backups and restores that have actually been rehearsed. Sized to the workload, not to a diagram.
Applied AI and search
Semantic search
Embedding models with vector indexes in PostgreSQL via pgvector, so that a search box answers what somebody meant rather than which words they happened to type.
Vision and recognition
Face and object recognition, clustering and identity matching, tuned to refuse a guess rather than to make a confident mistake.
Self-hosted models
Quantised models served on your own hardware, where sending customer data to a third-party API is a cost, a compliance problem, or both. We will also tell you when a hosted API is plainly the better answer.
How an engagement runs
- Discovery
- A short, paid piece of work that ends in a written plan: what gets built, what it runs on, what it will cost to operate, and which parts are genuinely uncertain. You keep the plan whether or not you continue with us.
- Build
- Fixed scope, delivered in working increments to your repository. Something runs end to end early, and keeps running as it grows.
- Operate
- Optional. Monitoring, backups, dependency and platform updates, and store submissions — for teams that would rather not carry a pager.