Senior Android (Kotlin/Compose) engineer with React Native + Node for a digital photo frame
Budget: $35.0 - $65.0
HOURLY / FULL_TIME
⭐ 4.75 (148)
Netherlands
typescript, android-app-development, react-native, kotlin, nest.js
Qualifications préférées
- Expérience : Expert
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.
Ouvrir sur Upwork
AI proposal draft
Generate a short cover letter for this job. Edit before sending.
Sign in to generate an AI proposal draft.
Connexion