Senior Android (Kotlin/Compose) engineer with React Native + Node for a digital photo frame

Posted yesterday

Worldwide

Summary

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/week
    Hourly
  • 6+ months
    Duration
  • Expert
    Experience Level
  • $35.00

    -

    $65.00

    Hourly
  • Remote Job
  • Complex project
    Project Type
Skills and Expertise
Mandatory skills
TypeScript
Android App Development
Activity on this job
  • Proposals:50+
  • Interviewing:
    0
  • Invites sent:
    0
  • Unanswered invites:
    0
About the client
Member since May 2, 2020
  • Netherlands
    Meppel6:29 PM
  • $379K total spent
    271 hires, 56 active
  • 9,427 hours
  • Tech & IT
    Mid-sized company (10-99 people)

Explore similar jobs on Upwork

iOS
Android
iOS Development
Mobile App Development
Stripe
TypeScript
JavaScript
Smartphone
Tablet
React Native
iOS
Android
REST API

How it works

  • Post a job icon
    Create your free profile
    Highlight your skills and experience, show your portfolio, and set your ideal pay rate.
  • Talent comes to you icon
    Work the way you want
    Apply for jobs, create easy-to-by projects, or access exclusive opportunities that come to you.
  • Payment simplified icon
    Get paid securely
    From contract to payment, we help you work safely and get paid securely.
Want to get started? Create a profile

About Upwork

  • Rating is 4.9 out of 5.
    4.9/5
    (Average rating of clients by professionals)
  • G2 2021
    #1 freelance platform
  • 49,000+
    Signed contract every week
  • $2.3B
    Freelancers 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

  • Microsoft Logo
  • Airbnb Logo
  • Bissell Logo
  • GoDaddy Logo