An Expo React Native implementation of the Screeny design review PDF. The app targets iOS and Android, uses React Native New Architecture, and is ready for a custom Expo development build.
npm install
npm run start
npx expo run:ios
npx expo run:androidreact-native-executorch is a native module, so the on-device AI path requires a custom development build rather than Expo Go. Web is useful for design-only work, but the full model/photo-library pipeline is iOS/Android.
Screeny keeps screenshots on device and uses two local models:
- Vision-language model:
LFM2_5_VL_450M_QUANTIZED - Embedding model:
MULTI_QA_MINILM_L6_COS_V1 - Why: the VLM inspects screenshot pixels and writes structured local analysis. MiniLM embeds that analysis text and user queries so search can use cosine similarity instead of relying only on literal keyword matching.
- Model loading:
src/ai/useScreenyExecutorch.tsinitializes ExecuTorch with the Expo resource fetcher and loadsLFM2_5_VL_450M_QUANTIZEDplusMULTI_QA_MINILM_L6_COS_V1. The scan screen reflects combined native download progress. - Screenshot reading:
src/media/screenshotReader.tsrequests photo access, reads the Screenshots album when available, falls back to screenshot-like image assets, and hydrates each asset with a local URI. - Share-to-app:
expo-share-intentregisters Screeny forimage/*on iOS and Android. Shared images are copied into app document storage, analyzed, embedded, saved to SQLite, and opened on the screenshot detail screen. - Analysis:
src/ai/useScreenyEngine.tssends each screenshot to the VLM with a strict JSON prompt fromsrc/ai/screenyPrompts.ts, then embeds the combined title, OCR-like text, tags, fields, and rationale. - Scan optimization: photo hydration is bounded-parallel, existing screenshot checks are batched, VLM analysis stays single-file for device stability, embeddings run through a small concurrent queue, and SQLite writes are flushed in batches.
- Storage:
src/data/screenyRepository.tsstores screenshot analysis, extracted fields, tags, rationale, smart folder stats, embedding vectors, and an FTS5 search index in local SQLite. - Search: query text is embedded with MiniLM and matched by cosine similarity against stored vectors while FTS/LIKE runs in parallel for exact-match help. Results are merged, deduped, and the VLM can still rerank top candidates with visible match rationales.
The UI still shows design-review mock cards when no local scan data exists.
After adding or changing share intent support, rebuild native projects:
npx expo prebuild --clean
npx expo run:ios
npx expo run:androidThe app cannot receive shared images in Expo Go.
- React Native ExecuTorch getting started: https://docs.swmansion.com/react-native-executorch/docs/fundamentals/getting-started
- Compatibility: https://docs.swmansion.com/react-native-executorch/docs/other/compatibility
useLLMand available models: https://docs.swmansion.com/react-native-executorch/docs/hooks/natural-language-processing/useLLM- Model sizes: https://docs.swmansion.com/react-native-executorch/docs/benchmarks/model-size