April 2026
I built a Miniature Painting Tracker mobile app designed for tabletop gaming hobbyists to document their entire creative journey from assembly to final touches. The application serves as a visual companion that allows users to track their project progress, log notes, and manage their physical paint collections in an organized environment.

Hobbyists need to log detailed data and photos on the go, often without a stable internet connection. The main hurdle was creating a robust offline-first architecture that guarantees seamless local data persistence and automatic cloud synchronization, ensuring users never lose their progress or experience UI disruptions when working offline.
The cross-platform app is built with Flutter and Dart using a clean architecture structured around Riverpod for predictable state management and go_router for navigation. For the offline challenge, the application utilizes a hybrid storage approach where project data is saved locally via Drift SQLite and a custom PendingUploadManager service automatically syncs changes to Firebase Firestore once back online. Media tracking is powered by Cloudinary for image hosting with cached_network_image for fast offline viewing, while paint inventory management is driven by mobile_scanner for barcode reading and shared_preferences for lightweight persistence. The entire experience is rounded out with a custom dark theme to reduce eye strain, automated code generation via build_runner, and built-in PDF generation for easy project exporting.
The project delivers a highly reliable, production-ready mobile application that successfully bridges complex offline synchronization with an intuitive user experience. It provides hobbyists with a seamless utility that keeps their data secure and accessible regardless of connectivity, showcasing a strong implementation of modern mobile development best practices.
