Skip to content

Platform

The part that is already built.

Most studios start each app from an empty project and then rebuild the same five things: who the user is, what they have paid for, how the model gets called, what gets measured, and where the private data stops. nexapps built those once — a Swift SDK, a Kotlin SDK and a Python backend — and every app starts with them already written. What is left to build is the product.

  1. Why the platform came first
  2. Identity
  3. Entitlements
  4. AI gateway
  5. Analytics
  6. The privacy boundary
  7. What is running today
  8. What the platform deliberately leaves out

Why the platform came first

A studio with one engineer cannot afford to solve identity, billing and privacy twice. Building the shared layer first costs more before the first app and less on every app after it — it is the reason the second app begins at the product instead of at the plumbing.

It also fixes the hard parts in one place. Server-owned entitlements, keys that never ship inside a binary, and a privacy boundary drawn in code are decided once, in the platform, rather than re-argued in every app by whoever is closest to the deadline.

01 / 05

Identity — a person is signed in before they have signed up.

Every app opens signed in. The SDK issues a durable anonymous identity on first launch, so there is no wall between someone opening the app and using it. Sign in with Apple exists for people who want their data to survive a new phone, and switching accounts is treated as a first-class case — including when the Keychain cannot be read.

NexappsKit (Swift) · NexappsCore (Kotlin) · shared backend

02 / 05

Entitlements — the server owns the answer.

Trial, purchase, restore, renewal and expiry are decided in one place. Both platforms read the same answer and expire on the same second; StoreKit 2 and Play Billing are adapters into that decision, not two competing sources of truth. A paywall bug is fixed once, not three times.

StoreKit 2 · Play Billing · server-side expiry

03 / 05

AI gateway — no model key ever ships inside an app.

Apps call the platform and the platform calls the model. Provider keys stay on the server, and prompts are versioned there too, so the writing an app produces can be re-tuned without an App Store release. The gateway currently calls Anthropic.

server-held keys · versioned prompts

04 / 05

Analytics — one event schema, one endpoint, every app.

First-party ingest, built into both SDKs, writing to this studio’s own backend. No third-party analytics or advertising SDK is embedded in a nexapps app, so there is no second set of eyes on a user by construction rather than by promise. It measures the product, not the person.

shared schema · first-party ingest

05 / 05

The privacy boundary — architecture, not a policy page.

Each app decides on the device what may cross to a server, and that decision is code. In Pausa the daily entries never leave the phone; what crosses is a de-identified weekly summary — counts and averages, never a name and never free text.

The policy pages describe that boundary. They do not create it, and they cannot be more generous than it is.

What is running today

Precision is more useful here than enthusiasm, so:

  • The backend is deployed and in production. It is what the first app is built against.
  • The iOS SDK ships as a versioned package and the first app consumes it as a dependency, not as copied source.
  • The Android SDK carries the same contracts and a template app. No nexapps Android app has shipped yet.
  • Infrastructure is provisioned from code, with its own operations tooling.
  • The first app, Pausa, has not launched. It is in build.

What the platform deliberately leaves out

  • No third-party analytics or advertising SDK in any nexapps app.
  • No profile of a person assembled across apps.
  • No growth code a user cannot see the effect of.
  • This website is held to the same standard: it makes zero third-party requests, sets no cookies, and loads no external font, script or image. That is checkable in about ten seconds with the network tab open.