AI-powered apps

AI features that are useful, not just demos

Chat assistants, document intelligence, OCR, and on-device ML — scoped honestly, built to run at a cost your business can live with.

AI app development that survives contact with production

An AI demo takes an afternoon. An AI feature that runs every day, for every user, at a cost you can defend and a failure rate you can live with, is a different piece of engineering — and it is mostly not about the model. It is about what happens when the model is slow, wrong, unavailable, or expensive.

So we scope AI features by what they replace. If a person currently retypes numbers from a photograph, document intelligence has an obvious floor and an obvious payoff. If the answer is "customers will love chatting with it", we would rather find that out in a week than build for three months on it.

Most of this work lands inside products that already exist — an existing Flutter or Android app, or a web application and its backend — whether or not we built the original. Adding AI is usually an integration problem, and integration problems live in someone else's codebase.

What an AI engagement covers

  • LLM integration — chat, assistants, summarisation, and extraction built on the Gemini API
  • Document intelligence: receipt and document OCR with structured data extraction using ML Kit
  • Recommendation and personalisation features grounded in your own data rather than generic output
  • Camera, vision, and speech features running as on-device ML
  • Honest AI feature scoping — what is feasible now, what it will cost to run, and what to skip
  • Cost-aware architecture: on-device inference, caching, prompt discipline, and sensible rate limits

Typical stack

Gemini APIML KitTensorFlow LitePythonFirebaseFlutter

Where to look next

Our published case studies cover web and mobile builds rather than AI features specifically — so rather than dress one up, here is the honest route in.

Browse our production work

Ask what we have built with LLMs

Where it pays

Where AI actually pays off — and where it doesn't

Strong candidates

  • A document-heavy workflow where someone retypes what a camera could read
  • Support or onboarding questions that are answered the same way hundreds of times a month
  • Unstructured text you already store and cannot currently search meaningfully
  • Classification or triage a person does quickly but constantly
  • An existing product with real users, where a narrow AI feature has a measurable before and after

Weak candidates

  • Anything where a wrong answer is unacceptable and no human reviews the output
  • Problems a database query, a rules engine, or better search would solve more cheaply and predictably
  • AI added because a competitor announced it, with no task behind it — the running cost outlives the press release
  • Work requiring a custom model trained from scratch; that is a research budget, and we will point you elsewhere
  • Regulated decisions — credit, hiring, medical — where explainability and audit obligations exceed what we can responsibly promise

Telling a client an AI feature is not worth building is a normal outcome of a scoping call, and cheaper for everyone than discovering it in month three.

Capabilities

LLM integration, document intelligence, and on-device ML

Three distinct engineering problems that get grouped under one word.

LLM

Gemini API integration

Chat, assistants, summarisation, and structured extraction. The engineering is in the scaffolding: grounding answers in your data so the model is not guessing, constraining output to a shape your code can parse, handling refusals and timeouts as normal states, and keeping prompts in version control where they can be reviewed like any other logic.

OCR

Document intelligence and extraction

Receipts, invoices, forms, and identity documents. Text recognition is the easy half; the hard half is turning a page of characters into the specific fields your system needs, knowing when a scan is too poor to trust, and routing low-confidence results to a human instead of silently writing bad data.

ON-DEVICE

ML Kit and TensorFlow Lite

Vision, OCR, and speech running on the handset. Nothing leaves the device, there is no per-request cost, and it works on a plane. Where a task fits an on-device model, this is almost always the better answer — cheaper, more private, and faster than a network round trip.

Engagement

How an AI feature gets built

Short loops, early evidence, and a decision point before the expensive part.

  1. Frame

    Which task, done by whom today, and what "good enough" means as a number. A feature without a success threshold cannot be finished.

  2. Prototype

    The narrowest version that touches real data — your documents, your questions, your edge cases. Days, not sprints.

  3. Evaluate

    Run it against a held-back set and count the failures. This is the honest decision point: build, reshape, or stop.

  4. Integrate

    Wire it into the product with the unglamorous parts — caching, rate limits, fallbacks, and a path for when the model is unavailable.

  5. Observe

    Log inputs, outputs, cost, and latency from day one, so quality and spend are things you can see rather than infer.

The evaluation step is the one most AI projects skip, and the reason so many arrive in production with no agreed definition of working. We would rather spend a week proving a feature is a bad idea than a quarter proving it slowly — which is the same bias toward early bad news described on our about page.

Cost, privacy, and reliability

Running cost is an architecture decision

Per-request pricing means a feature's cost scales with success, which is a strange thing to discover after launch. We design against it: on-device inference where a task allows it, caching for repeated questions, prompt and context discipline because tokens are the bill, cheaper models for the many easy cases with escalation reserved for the hard ones, and rate limits that cap the worst day rather than trusting the average. You see a projected running cost before the build, based on your own expected volumes.

Privacy decided per feature, not per company

The first question is whether the data needs to leave the device at all. Where on-device processing covers the task, it is the default — no third party involved, nothing to review. Where a hosted model is genuinely needed, we go through it with you explicitly: what is sent, what the provider's terms say about retention and training, what can be redacted or tokenised first, and what your own users are told. Sensitive fields are stripped before they travel where the feature still works without them.

Reliability when the model is the dependency

A hosted model is a third-party service that will occasionally be slow, rate-limited, or down, and unlike most dependencies it can also return confident nonsense. So AI paths are built to degrade: timeouts and retries with backoff, a defined behaviour when the call fails, output validated against an expected shape before anything acts on it, and confidence thresholds that route uncertain results to a person. The product should get less capable when the model is unavailable, not broken.

What you get at handover

  • Full source for the integration, in your repository
  • Prompts, schemas, and evaluation sets version-controlled alongside the code
  • Provider accounts and API keys registered to you, with billing under your control
  • The evaluation results and known failure modes, written down rather than remembered
  • Cost and latency instrumentation already wired into your analytics

Model independence

Model choice is a decision that ages badly, so integrations are written behind an interface rather than sprinkled through the codebase. Swapping providers, or moving a task on-device once a smaller model becomes good enough, should be a contained change — not a rewrite. Prompts and evaluation sets are yours and stay portable.

FAQ

AI development questions

Which AI models do you use?

Mostly Google's Gemini API for language features, and ML Kit or TensorFlow Lite for on-device vision, OCR, and speech. The choice is made per feature against quality, latency, privacy, and running cost rather than fixed in advance — and integrations are written so a provider can be changed later without a rewrite.

Won't AI features be expensive to run?

They can be, if built naively, because per-request pricing means cost scales with usage. We design around it: on-device inference where possible, caching, prompt and context discipline, cheaper models for easy cases, and rate limits. You see projected running costs against your own expected volumes before the build starts.

Can you add AI to our existing app?

Yes — it is our most common AI engagement. We integrate into your current web or mobile codebase whether or not we originally built it, starting with a read of how your data is stored and what the feature would actually need to reach.

How do you handle our data and our users' data?

The first question is whether data needs to leave the device at all; where on-device processing covers the task, that is the default. Where a hosted model is needed we review explicitly what is sent, what the provider's terms say about retention and training, and what can be redacted or tokenised first.

What is document intelligence, and how accurate is OCR?

It is turning documents — receipts, invoices, forms — into structured fields your system can use. Accuracy depends heavily on document quality and layout consistency, so rather than quote a number we measure it on your actual documents during evaluation and design a human review path for low-confidence results.

What does on-device ML give us that an API doesn't?

No data leaves the handset, there is no per-request cost, and it works without a connection. The trade-off is capability: on-device models are smaller and narrower. Where a task fits one, it is usually the better engineering answer on every axis that matters.

What if the AI gives a wrong answer?

It will, sometimes, so the product is designed for it. Output is validated against an expected shape before anything acts on it, confidence thresholds route uncertain cases to a person, and failure behaviour is defined rather than accidental. Features where a wrong answer is unacceptable and nobody reviews the output are ones we advise against building.

Can you train a custom model on our data?

Usually we will talk you out of it. Grounding a capable general model in your data through retrieval, or fine-tuning a small on-device model for a narrow task, solves most business problems faster and cheaper. Training from scratch is a research budget, and if that is genuinely what you need we will say so rather than take the work.

How do you know whether an AI feature is actually working?

We agree what "good enough" means as a number before building, then evaluate against a held-back set of real examples. That produces a decision point — build, reshape, or stop — before the expensive integration work. Cost, latency, and quality stay instrumented after launch.

Do you offer AI strategy advice if we're not sure what we need?

Yes, and it is a good use of a scoping call. Often the outcome is that one narrow workflow is worth automating and three others are not — which is a cheaper answer to receive early than late.

Next step

Ready to build something that grows?

Tell us about your product. You'll get a straight answer on approach, timeline, and cost — usually within 24 hours.