English

What we build

One product, four client platforms, and the services underneath them. All of it is written and run by us.

Mobile

An Android application in Kotlin, on Google Play and as per-architecture packages for direct installation, and an iOS application on the App Store. Both talk to the same API and share one account.

Desktop

Written in Rust, with a compiled interface. It ships as a signed Windows installer and an MSIX package, and for Linux as deb, rpm and AppImage builds. The app updates itself, but only against a manifest it has checked.

Services

A Python API on PostgreSQL, behind a connection pooler and a reverse proxy. Accounts, entitlements, device registration, subscription state, usage counters and the administration console all live here.

Infrastructure

Servers in five countries, configured from our own tooling. Changes go out to one half at a time so a connected customer never notices, health comes back to one screen, and TLS certificates renew without downtime.

Billing

Written by us rather than bought in: regional price books, prorated upgrades, account balance, retry rules, receipt validation against Apple and Google, and reconciliation with the card processor.

Support tooling

Chat from inside the apps and from the website, email, and a console that shows the agent the customer's subscription and device history while they answer.

How we ship

Old clients keep working

The API only gains fields

A client released a year ago gets the same responses it was written against. That is why we can update the server on a Tuesday afternoon without waiting on four app stores.

Everything is signed. Windows installers and MSIX packages carry a signature, Android builds are signed with the store upload key, Linux packages carry checksums, and the desktop updater checks a manifest over TLS before installing anything.

Someone is watching it

Deployments we can undo

Health checks run against every production machine all the time. When a change turns out badly we roll it back, rather than patching forward in a hurry at two in the morning.

The translations hold up. The product ships in English, Russian and Simplified Chinese. A missing translation falls back to English instead of leaving a blank screen, and that rule is enforced in code on every platform.