Mobile App case study
Hush
Our own product. Anonymous, ephemeral one-to-one chat in Flutter, with end-to-end encrypted messages and calls and no account to create.
The decision that shaped everything else
The code is the entire onboarding
On open, the device signs in anonymously in the background and gets a short code. Share it, and the moment the other person types it in, a private session opens between the two of you. There is no screen asking for a name, because there is no name. End the session, from either side, and the conversation is deleted for both.
Encrypt on the device, so the server only ever holds ciphertext
Message content is encrypted before it leaves the phone. Firestore stores scrambled bytes it cannot read, which means the security promise does not depend on trusting our own backend. It also means the security rules never need to inspect content, and can concentrate on the thing encryption cannot defend by itself.
The attack encryption cannot stop on its own
If anyone can overwrite the public key you published during the handshake, they can substitute their own and sit in the middle reading everything, and the maths will not notice. The Firestore rules exist to close that: nobody can overwrite someone else’s published key, the host identity cannot be rewritten, a guest seat once taken is fixed, and a message’s sender must match the writer’s own uid. Those rules ship in the app repository because they are part of the security model, not configuration.
Give people something to compare
Cryptographic guarantees are worth little if the two people cannot check them. Both sides see a safety code made of symbols they can read out loud to each other. It started at five symbols and moved to seven, because five is short enough to be worth brute-forcing and seven is not.
The numbers it holds
Hush ships as an Android APK and a web build from one Flutter codebase, currently at version 1.4.2.
The part we carry into client work is the discipline of writing down what a product promises and then hunting for every place the promise leaks. Encryption on the wire means nothing if the key exchange can be substituted. A deleted conversation means nothing if a device backup keeps a copy. A safety code means nothing if it is short enough to fake. None of those are cryptography problems, they are product problems, and they only surface if you go looking.
It is also our own product, so nothing here is a claim about a client we cannot name.
Hush is the clearest example of how we build for phones: one Flutter codebase, real platform integration, and a security model written down rather than assumed. That work sits under our mobile app development service, where the scope, timeline and starting price are published before you talk to anyone.
Tell us what’s slowing you down.
Fixed scope, quoted before kickoff, four to eight weeks to production. You talk to the engineer who writes your code.
Start a project