Skip to content

Case study

An AI assistant at 225K+ users

Oi is an AI assistant on the App Store and Google Play. I have built the iOS app since 2023 and, since 2026, the backend behind both apps.

Client
Private client
Role
iOS developer, then backend for both apps
Period
Since 2023

The problem

An assistant is judged on the first answer. It has to start streaming immediately, survive a bad network, and keep the provider keys and the bill out of reach of anyone who decompiles the app.

What I did

  1. Streaming chat with several agents

    Token by token rendering with multiple agents, each configured remotely in Firestore, so a new assistant ships without a new app release.

  2. Beyond text

    Image generation and analysis, URL and PDF summaries, LaTeX rendering and text to speech, each with the upload and progress handling it needs.

  3. A new backend in 2026

    After a security review, a Cloud Functions backend for the iOS and Android apps: server-sent events for streaming, App Check, and server-side validation of StoreKit 2 and Google Play Billing.

  4. Rate limits that protect the bill

    Quotas per account so that usage, not an exposed endpoint, drives the provider cost.

Where it stands

  1. 225K+ users authenticated

    Through Firebase Auth, across the iOS and Android apps.

  2. Purchases validated on the server

    Paid features unlock after the server checks the receipt, on both stores.

Questions I get asked

Can you add an assistant to our existing app?
That is the usual request, and it is mostly a backend question. The app needs a streaming interface; the server needs the keys, the quotas and the purchase checks.
Who owns the prompts and the backend?
You do. I write them in your repository and your cloud project, and the provider can be swapped without shipping a new app version.

Stack

  • Swift
  • UIKit
  • SwiftUI
  • Firebase
  • Cloud Functions
  • App Check
  • StoreKit 2
  • OpenAI API

Other case studies

Want something like this built?

Book a 20-minute call and tell me about your app. I will tell you what I would do first.

Book a 20-min call