Android appApp & platform
Loci
A memory engine for the things you own: photograph an item, and the app tags it, indexes it and makes it searchable in plain words.
- Status
- Android, not yet on Google Play
- Platform
- Android, via Capacitor
- Built with
- React, FastAPI, SQLAlchemy, SQLite, YOLOv8n, CLIP ViT-B/32, IndexedDB
- Scope
- Mobile app, Machine learning, API & offline sync
The project
Take a photo of your keys on the kitchen counter. YOLOv8 detects the objects and CLIP turns the image into an embedding. Later, type “keys”, or “metal things in the kitchen”, and the query is compared against those embeddings, so exact keywords aren’t needed.
It had to work without cloud services or recurring costs, feel native on Android while built with web technology, and run two models without GPU infrastructure.
What we designed and built
- 01
Offline first
Changes made offline queue in IndexedDB and replay in order on reconnect, including awkward cases like delete-then-recreate and concurrent edits.
- 02
ML on a budget
YOLOv8n and CLIP ViT-B/32 are small enough to run on a single CPU instance. Auth moved to a custom JWT and bcrypt flow to remove an external dependency.
- 03
What was built
A 47-endpoint REST API with JWT auth, the sync engine with conflict handling, the semantic search pipeline and an Android home-screen widget.
Screens

NoteLoci is not yet published on Google Play.