Inspiration
The inspiration for Chuck'it is deeply personal. When browsing on our phones—jumping between apps, scrolling feeds, researching topics—we constantly stumble upon things worth saving. Articles to read later. Recipes to try. Travel inspiration. Research for projects.
Capturing is effortless. Organizing is exhausting.
We found ourselves with hundreds of saved items scattered everywhere, impossible to find when we actually needed them. But the bigger frustration? Every existing solution breaks your flow. You're deep into browsing, find something interesting, and suddenly you're expected to open another app, choose folders, add tags, write notes. By the time you're done "saving," you've completely lost your train of thought.
We wanted something different: save and move on. Take a screenshot, share it, and immediately resume what you were doing. The organizing happens later, automatically, without your involvement.
Existing solutions also forced uncomfortable trade-offs:
- Cloud-based apps like Pocket or Raindrop work well, but our data lives on someone else's servers. We never quite know who's analyzing our browsing habits or what happens to our "private" collections.
- Privacy-focused alternatives exist, but they're either expensive beyond basic usage or lack intelligent search—turning "save for later" into "lose forever."
- All of them still expect manual organization at some point, which defeats the purpose of quick capture.
We asked ourselves: What if saving something was as simple as throwing it into a basket? What if you could capture anything mid-browse—screenshot, link, text—and trust that it would be organized and searchable when you come back later?
That question became Chuck'it: chuck it now, find it later, never break your flow.
What it does
Chuck'it is a bookmark organizer that sorts itself—entirely offline, entirely private, entirely on your device.
The name says it all: just chuck your data into baskets and stop worrying about sorting it.
Core Features:
Universal Capture: Share text, URLs, images, or screenshots from any app using your phone's native share sheet. No need to open Chuck'it or break your current workflow—save and continue browsing in under a second.
AI Auto-Tagging: On-device machine learning understands what you've saved and automatically assigns it to your custom "baskets" (categories). Save a cooking video? It goes to "Recipes." Screenshot a travel destination? Filed under "Travel Ideas."
Semantic Search: Find items by meaning, not just keywords. Search "healthy dinner ideas" and discover that smoothie recipe you saved three months ago, even if "healthy" or "dinner" never appeared in the original content.
Complete Privacy: Zero cloud dependencies. Zero data transmission. Works perfectly in airplane mode because it was designed that way. Your saves are yours—period.
Cross-Platform: Native experience on both iOS and Android with seamless share sheet integration that feels like part of the operating system.
How we built it
Building sophisticated AI that runs entirely on-device within mobile constraints required creative engineering across multiple layers:
Cross-Platform Foundation
- Flutter for the core UI/UX, ensuring consistent experience across iOS and Android
- Native Extensions in Kotlin (Android) and Swift (iOS) for share sheet integration that works without launching the main app
On-Device AI Pipeline
- Nomic Embed Text v1.5 (INT8 quantized) generates 768-dimensional embeddings for text content
- Nomic Embed Vision v1.5 (FP16) handles image understanding
- ONNX Runtime executes models efficiently on Arm mobile processors
- Rust-based tokenizer via FFI provides fast text preprocessing—critical for keeping inference snappy
Hybrid Embedding Enrichment (Our Novel Approach) We discovered that text and image embeddings don't naturally align well—the "modality gap" problem. Our solution combines multiple signals:
- Google ML Kit Image Labelling extracts labels from images (e.g., "food," "beach," "document")
- These labels become text, which we embed alongside the visual features
- Google ML Kit OCR extracts texts from screenshots
- The text from the OCR is embedded alongside the visual features
- GloVe word vectors expand short category names into richer semantic representations
- The combined approach achieves accurate cross-modal matching that neither technique achieves alone
Local Vector Database
- ObjectBox with HNSW indexing stores embeddings and enables semantic similarity search
- Queries across thousands of items complete in milliseconds, entirely on-device
Challenges we ran into
Performance vs. Space: The Mobile AI Dilemma
The biggest challenge was the performance-to-space ratio. Larger models yield better accuracy, but on mobile devices, a 2GB model would destroy user experience—slow installs, storage warnings, and poor inference speed. We needed sophisticated AI in a package users would actually accept.
LLM Dreams vs. Mobile Reality
Our initial plan was ambitious: use an LLM to analyze each item and generate tags contextually. We spent days building a prototype before accepting the hard truth—models capable of this task are simply too heavy for mobile deployment today. This realization forced our pivot to embedding models, which proved more practical and ultimately more elegant.
Embedding Models Aren't Magic
Even after switching to embeddings, accuracy disappointed—especially for images. A photo of pasta might not match a "Recipes" category because the vectors lived in different semantic spaces. We refused to accept "good enough."
The Modality Gap
This was our most frustrating discovery: even using the same Nomic model family for text and vision, image and text vectors don't naturally align. A picture of a beach would score poorly against the text "Travel" regardless of obvious relevance. The vectors speak different languages.
Our breakthrough came from combining signals: convert images to text via ML Kit labels, expand category names with GloVe vectors, then match in a unified embedding space. It's not elegant in theory, but it works remarkably well in practice.
Native Share Extensions
Getting share extensions to work seamlessly on both platforms—saving data without launching the app, providing instant feedback, handling multiple item types—required deep dives into platform-specific APIs that Flutter doesn't abstract away.
Accomplishments that we're proud of
Under 500MB with Multiple AI Models
We bundled a text embedding model, a vision embedding model, a word vector database (GloVe), and ML Kit integration—all while keeping the app under 500MB. Users don't need to download additional model packs or wait for "AI initialization."
Sub-Second Everything
- Share sheet capture: instant feedback
- Embedding generation: <500ms on modern devices
- Semantic search: <100ms across thousands of items
- Cold start: ~2 seconds to fully usable
Truly Offline AI
All AI functionality runs entirely on-device—your phone's processor does all the thinking. The only network activity is fetching link metadata (titles, descriptions, thumbnails), and Chuck'it works perfectly without it. No connection? Your content still saves, still gets tagged, still becomes searchable.
Native Share Integration That Feels Native
On both iOS and Android, sharing to Chuck'it feels like sharing to any system app. The confirmation appears, you continue what you were doing, and the AI processing happens silently in the background.
Solving the Modality Gap
Our hybrid embedding enrichment approach—combining vision embeddings, image labels, and expanded text vectors—is something we haven't seen documented elsewhere. It's a genuine contribution that others building on-device multimodal AI can learn from.
Complete Data Portability
We implemented comprehensive backup and restore functionality that maintains our privacy-first philosophy:
- Markdown Export: Export your entire collection as human-readable markdown files, organized by baskets—perfect for archiving or migrating to other tools
- JSON Import/Export: Full-fidelity backup format that preserves all metadata, embeddings, and basket assignments
The backup system ensures users never feel locked into Chuck'it. Your data is yours, in formats you can actually use.
What we learned
Mobile AI is Viable—With Constraints
Before this project, we assumed sophisticated AI required cloud infrastructure. We learned that careful model selection, quantization, and creative architecture can deliver genuinely useful AI entirely on-device. The gap between "cloud AI" and "edge AI" is narrower than we expected.
Platform APIs Are Deep
Building native share extensions pushed us into Kotlin and Swift territory that Flutter tutorials don't cover. We gained real appreciation for platform-specific capabilities and the work required to make cross-platform apps feel truly native.
Embeddings Are Powerful but Imperfect
Vector embeddings feel like magic until you hit their limitations. The modality gap taught us that no single model solves everything—sometimes the best solution combines multiple imperfect tools intelligently.
Privacy Is a Feature, Not a Limitation
We initially framed offline operation as a constraint we had to work around. By the end, we realized it's a genuine feature users want. In an era of data breaches and surveillance capitalism, "your data never leaves your device" is a meaningful value proposition.
Awe for the Future
Working with on-device AI gave us a glimpse of where mobile computing is heading. If we can do this today with careful optimization, imagine what's possible as Arm processors and model efficiency continue improving. 100% accuracy auto-tagging feels achievable within a few years.
What's next for Chuck'it
Accuracy Improvements
Our auto-tagging works well but isn't perfect. We're exploring:
- Fine-tuned embedding models trained specifically for categorization tasks
- User feedback loops that learn from corrections
- Ensemble approaches that combine multiple signals more intelligently
Quality-of-Life Features
- Direct Capture: Create new items directly within the app, not just via sharing
- Local Sync: Share your collection across your own devices without cloud intermediaries
- Backup Enhancements: Scheduled auto-exports, versioning, and restore from specific timestamps
Expanded Content Support
- PDF documents with text extraction
- Audio clips with transcription
- Web page archiving (save full content, not just links)
Platform Expansion
- Desktop companion apps for macOS and Windows
- Browser extensions for one-click saving from desktop browsers
The Bigger Picture
Chuck'it proves that the "AI requires cloud" assumption is outdated. Every technique we developed—hybrid embedding enrichment, on-device vector search, cross-platform ML deployment—can be applied to countless privacy-sensitive domains: personal health tracking, financial management, private journaling, encrypted communication, and more.
We're not just building a bookmarking app. We're demonstrating a paradigm for the next generation of AI applications: powerful, personal, and private.
Log in or sign up for Devpost to join the conversation.