Snapdex is a modern iOS app built with SwiftUI and Swift 6, inspired by the idea of a personal Pokédex. Users can snap photos of Pokémon-themed merchandise (like plushes, trading cards, or figurines) and use AI to identify and catalog them in their collection.
While playful in concept, Snapdex is a serious, production-quality showcase of mobile architecture, design systems, offline-first strategies, and integration with real-world features like camera, authentication, and analytics.
✨ Looking for the Android version? Check out Snapdex – Compose Edition
Snapdex started as a personal project to explore SwiftUI and demonstrate how I approach mobile development as a Senior/Staff-level engineer.
It also served as a way to translate my experience from .NET MAUI and Xamarin — where I’ve built production apps using patterns like MVVM and MVU (via Fabulous, which I co-created) — into the Compose ecosystem. The architectural foundations remain the same: clean separation of concerns, unidirectional data flow, and a strong focus on long-term maintainability.
Rather than focus on flashy features, my goal was to create a well-architected, well-rounded, and production-ready app — the kind of project that goes beyond what demos well and instead shows the core engineering work that matters.
That includes things like:
- A clean, modular architecture
- Offline-first data access
- Navigation and UI structure that scales
- Proper authentication flows (login, register, forgot password)
- Custom UI components
- Dark mode support
- Secure API key handling
- Analytics and crash monitoring
- Maintainable design system
- Business validation and error handling
These aren’t the “shiny” parts of app development — but they’re essential to real-world mobile apps, and I wanted Snapdex to reflect that.
- 📸 Snap photos of Pokémon-themed merchandise in the real world
- 🧠 AI-powered recognition using TensorFlow Lite (on-device) and OpenAI API (cloud)
- 📶 Offline-first with automatic sync to Firebase Firestore
- 🧭 Intuitive navigation with persistent tab structure
- 🔐 Full authentication flow: register, login, password reset
- 🌙 System-aware dark mode support
- 🎨 Material 3 design, custom themed to match designer-provided Figma
🎨 Design by Rui Zhang
🧪 Pokémon detail page inspired by Junior Savaria’s Figma
Snapdex is structured using a modular, scalable architecture inspired by Clean Architecture principles:
- MVVM Pattern
- Separation of Concerns – Independent
UI
,Domain
,Data
, andApp
packages - Composable UI – Pure, testable composables with state managed externally
- Offline-first – SwiftData as source of truth, Firestore for cloud sync
- Custom Design System – Fully themed using
@Environment
👉 Read the full Architecture Guide →
- Swift 6
- SwiftUI
- Xcode
- Combine
- @Environment / @Observable
- SwiftData – Local persistence
- Firestore – Cloud synchronization
- Alamofire – Networking
- @AppStorage – Preferences storage
- TensorFlow Lite – On-device AI
- OpenAI API – Cloud-based recognition
- Kingfisher – Image loading
- Firebase Authentication
- Encrypted local storage for secure key handling
- Firebase Analytics
- Firebase Crashlytics
- Firebase App Distribution
🔧 Requirements: Xcode 16.2
TBA
Snapdex is localization-ready. All user-facing strings are externalized in Android resource files, making it easy to support new languages.
This project is licensed under the Apache 2.0 License – see the LICENSE file for details.