Venyoo
Sole developer (iOS + Android) · iOS Dec 2018 – Feb 2019 · Android Oct 2018 – May 2019
The native iOS and Android companion clients for Venyoo, a website callback / live-chat lead-capture SaaS - turning the leads a business's site generates into a mobile inbox with push deep-linking, a per-project pipeline, and a rich filter builder.










Venyoo (venyoo.ru) is a SaaS that puts a callback / live-chat lead-capture widget on business websites. When a visitor requests a callback, sends an SMS, or messages through a social channel, the widget captures that as a lead. These two apps - one native iOS, one native Android - are the mobile companion clients for the business owner / sales agent, not the end consumer.
They turn the leads a website generates into a mobile inbox: browse an infinite-scroll feed of incoming leads, open one to see the prospect's contact details, question, region, and source, one-tap dial or email them, move each lead through a color-coded per-project pipeline status, and slice the stream with a rich date / project / status / device / social-network filter builder. Alongside the lead inbox they surface visitor conversations with saved response templates and quick replies for frequent questions.
Both apps were built solo and share the same REST backend, Firebase Cloud Messaging push with deep-linking straight to a lead, resource localization for the market, and Crashlytics reporting. The iOS client is 100% Swift on UIKit + storyboards in a classic MVC arrangement, with cross-cutting concerns behind singleton services and a NotificationCenter event bus; the Android client is Java on a single-Activity AndroidX Navigation Component architecture with fragment-centric MVC and greenrobot EventBus.
Architecture & engineering highlights
- Transparent 401 re-authentication with request replay (both platforms) - on any HTTP 401 the networking layer silently re-authenticates with stored credentials, swaps in the fresh token, and re-issues the original request so callers never see an expired session. iOS rewrites the stale token= query param via regex over a generic URLSession core; Android recursively retries the original Volley request.
- Generic, protocol-constrained networking core (iOS) - a single request<T: JSONDecodable> funnel powers the app's typed endpoints over the Gloss JSON library, with a dedicated empty-response sentinel.
- Push → deep-link → precise navigation (both) - parses a deep_link from the FCM payload and navigates to the exact lead detail screen while correctly handling every app state (cold launch, an already-showing detail, another tab/screen selected).
- CRC-8 deterministic avatar generator (Android) - computes a CRC-8 hash of a client's initial to index a 22-color × 48-animal-icon palette, producing stable placeholder avatars with no server round-trips.
- TLS-1.2 back-port + public-key-pinning scaffolding (Android) - installs a Play-Services security provider to force TLS 1.2 on KitKat; a hand-written X509TrustManager does RSA public-key pinning.
- Reusable composable cell system - InfoItem / EditableInfoItem / SpinnerItem primitives (on FlexibleAdapter on Android, a CellData-driven selection UI on iOS) compose both lead-detail and client-info screens, with PorterDuff-tinted status swatches drawn from server-supplied hex colors.
- Runtime EN/RU localization (iOS) - a custom LocalizationManager doing runtime language switching, not just NSLocalizedString; the Android app ships RU + RO localization. iOS also couples FCM token refresh and deferred server-side deletion to reachability and login state.
Tech stack
iOS
Android
Shared
Some information sourced from apkpure.com. All rights belong to their respective owners.