The problem
The client needed a real VPN — not a wrapper around a third-party SDK, but a proper tunnel with native service integration, reliable connection state and store-compliant privacy handling. It also had to survive a full rebrand from Zerova to Zystra without breaking existing installs.
What we built
- Native Android tunnel via VpnService with the WireGuard core, Flutter UI as a thin state reflector.
- Full connection lifecycle — connect, disconnect, reconnect-on-network-change and a foreground notification.
- Multi-region server selection with latency-aware defaults.
- VPN service declaration, data-safety form and privacy policy written to match real behaviour.
- Signing-key continuity preserved through the rebrand so Play treated the new identity as an update.
Outcome
A production VPN client delivered through the full store lifecycle, including VPN declaration, data-safety compliance and a rebrand handled without losing update continuity.