FELFEL POS 2023

As one of the critical components of the Felfel operation loop, the development of FELFEL POS has been a prominent and continuous effort. Prior hardware and software enhancements led to the 2023 iteration of this IoT device's software, which included remodeling our inventory representation and a complete rewrite of our logistic-related backend APIs and frontend UI.

Lee, Joao and Borut happily checking the inventory accuracy!
Lee, Joao and Borut happily checking the inventory accuracy!
  • Engineering: Tech team at Felfel AG (Project team: Borut Kolar, Lee J Martin-McDonald, Joao Andre Coelho, Romain Gioux, Sussance Hallauer, Behrooz Tahanzadeh)
  • Project management: Product team at Felfel AG (Scoping and management: Yacine Brahmi)
  • Stakeholders: Operation team at Felfel AG (Saskia Milde, Dominik Lawall, Corina Brändle)

Jetpack Compose

This iteration marked a complete migration from the legacy XML-based view system to Jetpack Compose. The shift brought immediate benefits: less boilerplate, more intuitive state management, and powerful preview tooling for rapid prototyping. Our architecture emphasized stateless composables with unidirectional data flow, making components reusable and easy to test. This allowed us to iterate quickly on feedback from the operations team—changes that once required coordination across multiple XML files could now live in a single composable.

GraphQL type safety

We adopted GraphQL with the Apollo Kotlin client, and it proved to be a strong fit. Apollo's code generation produced type-safe Kotlin models that caught integration errors at compile time rather than runtime. The normalized cache kept the UI responsive and consistent—related entities updated automatically when new data arrived, eliminating stale-data bugs. This tight integration allowed backend and frontend teams to iterate in lockstep with confidence.

Configuration improvement

We designed a hierarchical configuration system that let us define defaults at the global level, override them for specific regions or device groups, and fine-tune individual units when necessary. This gave us precise control over feature rollouts.

Setting page for hardware team

Field devices interact with various peripherals—barcode scanners, temperature sensors, payment terminals—and diagnosing issues remotely can be challenging. We built a diagnostics page that let the hardware team exercise each peripheral directly on the device, without needing development tools or logs. This reduced back-and-forth with engineering and shortened time to resolution.