Software people use every day, built to survive real users.
Custom applications, multi-tenant platforms, mobile apps and the integrations that hold an estate together. We build the unglamorous parts — permissions, audit trails, migrations, tests — because those are what decide whether a system is still running in three years.
Every bullet below is work we have shipped. Where a line looks like filler on another company's site, it is here because a client needed it and we built it.
Custom business applications
Bespoke web and desktop software built around how your organisation actually works.
What this includes
Requirements captured from observing the work, not a wish list
Role-based permissions designed before the first screen
Reporting and export built in, not bolted on
Full test suite and CI pipeline
SaaS and multi-tenant platforms
Subscription products with the parts nobody puts in a demo: tenant isolation at row level, audit logging written on the way in, billing hooks, and a migration path that does not require downtime.
What this includes
Row-level tenant scoping on an organisation identifier
Audit trail on every access and change
Single sign-on through Entra ID or your provider
Zero-downtime migration strategy
Mobile applications
iOS and Android, including on-device inference and private distribution where an app is for one organisation rather than the public store.
What this includes
Native or cross-platform, chosen on your constraints
On-device models where connectivity is unreliable
App Store and unlisted distribution handled
Offline-first data handling
Integration and APIs
Connecting systems you already pay for.
What this includes
REST and GraphQL API design and versioning
Microsoft Graph, Firebase and Oracle experience
Webhook and event-driven patterns
Rate limiting, retries and idempotency
Web and e-commerce
Marketing sites, portals and storefronts that load fast on a mid-range phone and rank because the foundations are crawlable, not because someone stuffed keywords in afterwards.
What this includes
Core Web Vitals as a build constraint
Structured data and semantic markup
CMS or static, chosen on who edits it
WCAG 2.2 AA conformance
Legacy modernisation
Moving an ageing system forward without a rewrite-everything gamble.
What this includes
Strangler-pattern replacement, module by module
Data migration with reconciliation checks
Parallel running before cutover
Knowledge capture from the people who know it
What you receive
The deliverables, listed before you ask.
The same artefacts every time, regardless of project size.
Working software demonstrated fortnightly
Automated test suite and CI pipeline
Architecture and API documentation
Deployment scripts and environment configuration
Handover sessions until your team can run it
Thirty-day support window after go-live
Stack
What we build this with.
Deliberately narrow. A team our size claiming twenty frameworks is claiming one thing badly, twenty times over.
Answered as we would answer them on a call, including the ones with awkward answers.
Yes. We start with a short review of what is there, what is tested and what is load-bearing, then propose the smallest change that gets you moving. We do not open by recommending a rewrite.
That is the intent. Building for your team to maintain costs more up front and less over three years. Handover includes documentation, tests and sessions until your engineers are comfortable.
Then we write for that. Documentation aimed at whoever will actually operate it, plus a support agreement so there is someone to call.
Other practices
Most projects use more than one.
The reason a product is not working is rarely where the client first thought it was, so these three sit alongside this one more often than not.