A mobile blockchain application that replaces mutable database records with an immutable decentralized ledger for logistics tracking. Built with Python and Kivy for Android, deployed on the Solana blockchain with QR-code scanning and NFT-based asset management.
Moving from mutable database records to an immutable decentralized ledger. Where legacy systems require trust between parties, the Solana blockchain enforces trust through code.
Mutable SQL Databases. Records can be altered, deleted, or disputed. Trust is required between all parties in the supply chain, creating friction and opportunities for fraud.
Immutable Blockchain Ledger. History is cryptographically verified. Trust is enforced by code, eliminating disputes and creating a single source of truth for the entire keg lifecycle.
New keg registered as NFT on the blockchain
Ownership transferred during shipping
QR code scanned to verify provenance
Keg NFT burned upon return to brewery
A decoupled architecture separating the user interface, business logic, and data persistence into three independent layers for maximum flexibility and testability.
Bridging Python to Solana through a four-step transaction pipeline.
Logic on the ledger — code that executes on network nodes, creating an immutable record of each keg's state.
Mints a new NFT representing a physical keg
Updates the owner address during custody transfer
Toggles the is_empty boolean for keg state
Real-world DevOps challenges encountered and resolved during the build process. Each "war story" demonstrates pragmatic problem-solving under constraint.
Build Failed. Error: jnius library deprecated. Incompatible binary.
The build environment auto-installed Cython 3.0, which broke compatibility with existing Kivy libraries that relied on Cython 0.29.x syntax.
Pinned dependency version in buildozer.spec to exclude version 3.0+ (cython<3)
Takeaway: Upstream updates break builds. Always pin dependency versions for reproducibility.
FAIL: Gradle requires Java 17. Linux default had OpenJDK 11 pre-installed.
Ubuntu 20.04 (WSL2) shipped with OpenJDK 11, but the Android Gradle plugin required Java 17 for APK compilation.
Installed openjdk-17-jdk and executed update-alternatives to switch system default.
Takeaway: Environment assumptions are dangerous. Always validate the full toolchain before building.
BLOCKED: Compilation of `solders` (Rust) library unstable on ARM architecture.
The ideal path was to compile the Rust-based Solana SDK directly for Android ARM, but cross-compilation proved unreliable.
Pivoted to direct RPC calls via httpx, using standard HTTP protocols to communicate with Solana nodes.
Takeaway: Pragmatism over perfection. Universal HTTP standards maintained velocity while keeping the 'Source of Truth' accessible.
Forced PC window to 360x640 to validate UI/UX flow rapidly without compilation time.
Simulated APK installation to check x86 vs ARM architecture compatibility.
Streamed real-time logs from physical hardware to catch crashes invisible to the Python console.
Automated Python-to-APK compilation using Buildozer and WSL2.
Decoupled Architecture: Kivy (UI) | Python (State) | Solana (Data).
Overcame dependency conflicts (Cython) and architecture gaps (Rust/ARM).
A functional MVP proving immutable tracking is accessible via standard mobile hardware.