You will fully own the application layer of Neybo's device firmware, writing C++ user-space code for a Linux-based OS.
The objective is to develop the core application that governs the product's functionality across all usage scenarios: the device's state machine, secure local storage of user data, operating modes such as Wi-Fi/initial device setup, the OTA mechanism, and the factory reset mechanism, as well as the device's normal operation: conversations with UI rendering or interactive content displayed on the screen. All application code must be written in C++ and optimized for tight resource constraints (CPU, GPU, NPU, and RAM). All application logic must be cross-platform to ensure seamless migration across different hardware platforms, including Linux-based computers. The software must be fully compatible with the system layer API of the target device and be built as a single firmware image for the device.
Application layer
- Design and implement the device's state machine: operating modes such as Wi-Fi pairing, conversation, and error or recovery, with explicit transitions and timeout handling
- Build the UI and rendering layer in C++, keeping product logic separate from platform-specific code so it ports directly to the target device
- Get the application running end to end on a laptop or tablet under Linux, ahead of real hardware being available
- Implement the Wi-Fi onboarding and pairing flow as part of the state machine, integrated with the device's network stack
- Implement the OTA mechanism
- Implement the factory reset mechanism
- Integrate third-party components (wake-word recognizer, voice quality enhancement, etc.)
- Implement telemetry and crash reporting to the backend
- Support the device security audit
- Support QA regression testing and system benchmarking procedures (display performance indicators, etc.)
Designing for the target device and the system layer
- Design within the memory and performance constraints of the final embedded target from the start
- Prototype the early application versions on a Linux computer
- Coordinate interfaces with the Firmware Lead Engineer so the application and system layers combine cleanly into a single firmware image
- 4+ years of commercial C++ development
- Modern C++ in production: object lifetime, RAII, STL, threading and concurrency, error handling
- User-space application development on Linux or POSIX
- Event-driven or state machine design: explicit states and transitions, event loops, timeout and recovery handling
- Experience building a GUI or application-layer UI; Qt/QML is the clearest signal, but other C++ UI stacks count
- Platform-independent code: separating product logic from platform adapters, including experience running part of a product on desktop or x86 ahead of target hardware
- Practical TCP/IP and Wi-Fi onboarding or provisioning experience, for example NetworkManager/D-Bus, wpa_supplicant, or a SoftAP/captive portal flow
- English B2+, written and spoken
- Qt 5/6, QML/Qt Quick, Qt State Machine, or SCXML
- ARM cross-compilation and integration experience with Yocto or Buildroot
- D-Bus, systemd, hostapd, mDNS/DNS/DHCP beyond a basic Wi-Fi pairing flow
- AOSP/Android TV or JNI/NDK experience
- OTA, rollback, crash dumps, or remote diagnostics on a device in the field
- A consumer device you helped ship into production
- C++ on Linux/POSIX user-space
- Qt/QML or a comparable C++ UI stack
- TCP/IP and Wi-Fi provisioning stack: NetworkManager/D-Bus, wpa_supplicant, or equivalent
- Application running end to end on a laptop or tablet under Linux, ahead of real hardware
- State machine covering core operating modes, including Wi-Fi pairing and conversation mode, implemented and stable
- Code that moves onto the embedded target directly, once hardware is ready