MobiSkan: Mobile WMS
MobiSkan is an offline-first Android Warehouse Management System app for CipherLab data collectors, built for warehouse staff who need to scan, receive, issue, transfer and count stock on the shop floor without depending on a network connection.
Stack and structure
- Language and platform: Android, Java, targeting CipherLab handheld scanners.
- Persistence: Room over SQLite for structured local storage, encrypted at rest with SQLCipher.
- Scanning: ZXing for barcode capture, paired with CipherLab's own device SDK.
- UI and media: Material Design components, Glide for image loading and caching, Facebook Shimmer for progressive-loading placeholders.
- Security: Android Security Crypto for encrypted local secrets, bcrypt for credential hashing, a symmetric UUID and HMAC scheme for license validation.
- Testing: JUnit and Mockito for unit tests, Espresso and UIAutomator for instrumented UI tests.
How it's built
The application covers the core transactional warehouse flows: goods receipt, goods issue, stock transfer between locations, inventory reconciliation, and ERP data exchange, all designed to work fully offline and sync once connectivity is available. The architecture follows a standard layered Android structure, Activities and Fragments backed by Room DAOs and repositories.
Data at rest is protected end to end: the Room database itself is encrypted with SQLCipher, and credentials and other local secrets go through Android Security Crypto and bcrypt hashing rather than plain SharedPreferences. Licensing relies on a symmetric UUID plus HMAC scheme validated on-device.
Test coverage spans both layers of the pyramid: JUnit and Mockito exercise business logic in isolation, while Espresso and UIAutomator drive the actual scanning and document flows end to end on device, which mattered for an app whose main failure mode, a barcode scan resolving to the wrong stock movement, is expensive to get wrong in a live warehouse.

















