Senior Android (Kotlin/Compose) engineer with React Native + Node for a digital photo frame
Worldwide
We're building a Frameo-style digital photo frame: a 10.1" Android device (Android 9+, 2 GB RAM; older Android 7-8 units should keep working) that runs our own full-screen kiosk app, paired with a companion mobile app and a small backend. An MVP already exists and works end-to-end, with rough edges. You'll take it over: stabilize it, ship a sellable v1, then build the "Plus" feature set (family sharing, auto-sync from the phone's camera roll, multiple frames per account, remote management, cloud storage). The MVP stack you'll inherit: - Frame app: Kotlin + Jetpack Compose, minSdk 24. Device Owner / lock task kiosk mode, BLE GATT pairing (Nordic BLE library), Wi-Fi provisioning, an embedded Ktor HTTP server + mDNS for LAN control and photo upload, WorkManager, DataStore, Coil, Firebase Crashlytics. About 6k lines, no tests yet. - Companion app: React Native 0.83 + Expo SDK 55 (expo-router, TypeScript, new architecture) with two custom Expo modules written in Kotlin (BLE central, mDNS discovery). Android today; iOS is a natural next step. - API: NestJS + TypeScript, MySQL (Sequelize), JWT auth, Swagger, migrations, Docker Compose. Deliberately minimal. What you'll do: - Frame app: make kiosk mode, autostart and self-recovery bullet-proof on cheap hardware without Play Services; slideshow of photos and video; brightness and sleep schedule; QR onboarding and BLE Wi-Fi provisioning; fast LAN photo transfer; offline-first behaviour; OTA self-update of the app. - Companion app: pairing and Wi-Fi setup flows, uploads from the gallery, frame settings, one product toggle for our background cloud feature; later family sharing and multi-frame management, then iOS. - Backend: extend the NestJS API with cloud storage (S3-compatible), sync to several frames, remote management beyond the LAN, push notifications. We may add a dedicated backend engineer for the cloud phase, but you should be comfortable owning the API design. - Test on real low-cost hardware (we ship you sample units), profile memory and CPU on 1-2 GB devices, keep the app running for weeks without a restart, and add the tests the MVP doesn't have. You: - 5+ years of Android, Kotlin, Coroutines/Flow, Jetpack Compose, WorkManager, Room/DataStore, Media3/ExoPlayer, Coil/Glide. - Have shipped device-style apps: kiosk, launcher, digital signage, POS or similar. Hands-on with DevicePolicyManager / Device Owner, lock task mode, BOOT_COMPLETED, foreground services, watchdogs, silent APK install via PackageInstaller. - BLE GATT (peripheral and central), Wi-Fi APIs across Android versions (legacy WifiManager vs WifiNetworkSuggestion), NSD/mDNS, an embedded HTTP server on the device, QR generation and scanning. - React Native + Expo in TypeScript: expo-router, native modules via the Expo Modules API, release builds without EAS if needed. - Node backend experience (NestJS or similar) with MySQL/PostgreSQL, JWT auth and migrations; S3-compatible storage; push via FCM. - Care about API 24-35 compatibility and low-RAM behaviour: bitmap downsampling, caches, ANR/OOM hygiene, battery and thermal limits. - English or Russian; async remote work with at least 4 hours of overlap with CET. Nice to have: iOS builds with Expo, AOSP or ODM firmware experience, WebRTC / P2P transfers, photo-frame or smart-display products, experience talking to Chinese ODMs. Engagement: paid onboarding milestone first (2-3 weeks: audit the three repos, fix known issues including Android below 9, set up CI and a test baseline), then milestone-based or hourly, long-term. To apply, please include: links to published apps or repos (device / kiosk apps and Expo apps especially) and what exactly you did; availability and earliest start; one paragraph on how you would make a kiosk app recover from crashes and reboots on a device without Google Play Services. Put the words "lock task" at the top of your proposal.
- More than 30 hrs/weekHourly
- 6+ monthsDuration
- ExpertExperience Level
$35.00
-
$65.00
Hourly- Remote Job
- Complex projectProject Type
Skills and Expertise
Activity on this job
- Proposals:50+
- Interviewing:0
- Invites sent:0
- Unanswered invites:0
About the client
- NetherlandsMeppel6:29 PM
- $379K total spent271 hires, 56 active
- 9,427 hours
- Tech & ITMid-sized company (10-99 people)
Explore similar jobs on Upwork
How it works
Create your free profileHighlight your skills and experience, show your portfolio, and set your ideal pay rate.
Work the way you wantApply for jobs, create easy-to-by projects, or access exclusive opportunities that come to you.
Get paid securelyFrom contract to payment, we help you work safely and get paid securely.
About Upwork
- 4.9/5(Average rating of clients by professionals)
- G2 2021#1 freelance platform
- 49,000+Signed contract every week
- $2.3BFreelancers earned on Upwork in 2020
Find the best freelance jobs
Growing your career is as easy as creating a free profile and finding work like this that fits your skills.
Trusted by