Status: In Progress
Phase: Year 1 Foundation | Tier: Pro
Overview
You are standing in a dispensary. The menu is a wall of strain names, THC percentages, and prices. You recognize maybe three of them. The budtender is busy. You have sixty seconds before the person behind you starts sighing. Menu Scanning solves this. Point your phone at a dispensary menu — printed, digital, or handwritten — and High IQ identifies every strain on it. In seconds, you see the full profile for each: effects, terpene breakdown, High Family classification, and how it compares to strains you already know and love. It transforms the most stressful moment in the dispensary experience into the most informed one. This is the single highest-impact feature on the roadmap. It turns High IQ from a tool you use at home into a tool you use at the point of purchase, which is exactly where cannabis decisions are made and where the most value is delivered.What It Does
- Full menu recognition — Photograph any dispensary menu (printed board, digital screen, paper handout, or chalkboard) and the AI identifies all listed strain names
- Instant strain profiles — Each recognized strain displays its High Family, dominant terpenes, cannabinoid range, and primary effects
- Database matching — Strains are matched against the 5,226+ strain database for verified data; unrecognized strains are flagged
- Side-by-side comparison — Tap any two strains on the scanned menu to compare them directly
- Personal context — Strains you have tried before are marked with your rating and notes; strains similar to your favorites are highlighted
- Save for later — Bookmark strains from the menu to your wishlist without leaving the scanner view
- Quick add to stash — Purchase a strain and add it to your active stash directly from the scan results
- Shareable results — Share your scanned menu analysis with friends who are also deciding
User Value
How It Works
Open Menu Scanner
Launch the Menu Scanner from the home screen Quick Actions or the camera icon in the navigation bar.
Capture the Menu
Point your camera at the dispensary menu. The viewfinder highlights detected text regions. Tap to capture, or select an existing photo from your library.
AI Processing
Gemini vision AI extracts all text from the image, identifies strain names, and separates them from prices, weights, and other menu metadata.
Database Matching
Each extracted strain name is matched against the TIWIH database using fuzzy matching (handles misspellings, abbreviations, and alternate names like “GSC” for “Girl Scout Cookies”).
Results Overlay
A scrollable results card appears with every identified strain, its High Family badge, key terpenes, and a match confidence indicator. Strains you have tried before are visually distinguished.
Technical Approach
Menu Scanning builds directly on the existing Label Scanner infrastructure, which already handles image capture, Gemini vision processing, and strain database matching in production.Architecture
| Layer | Technology | Notes |
|---|---|---|
| Image Capture | Expo Camera + Image Picker | Already built for label scanner |
| Vision AI | Google Gemini 2.5 Pro | Upgraded from Flash for multi-strain extraction |
| Text Extraction | Gemini structured output | Extracts strain names, prices, weights, types from free-form menu layouts |
| Strain Matching | Fuzzy search + embeddings | Handles misspellings, abbreviations, and slang names |
| Results Assembly | Hono API batch lookup | Single request fetches profiles for all matched strains |
| UI | React Native bottom sheet | Overlay on camera view with scrollable results |
Key Technical Challenges
- Menu layout diversity — Dispensary menus range from beautifully designed digital boards to handwritten chalkboards to crumpled paper printouts. The vision model needs to handle all of these gracefully.
- Multi-strain extraction — Unlike label scanning (1 strain), menu scanning may need to extract 20-50 strain names from a single image. The prompt engineering must reliably separate strain names from surrounding text.
- Fuzzy matching at scale — “GDP” means “Granddaddy Purple.” “GSC” means “Girl Scout Cookies.” “GG4” means “Gorilla Glue #4.” The matching layer needs a comprehensive alias dictionary plus embedding-based fallback.
- Processing time — Users expect results within 3-5 seconds. Batch database lookups for 30+ strains must be fast. The API already supports batch strain retrieval, but may need optimization for this volume.
Reuse from Label Scanner
| Component | Reuse Level | Adaptation Needed |
|---|---|---|
| Camera UI & image capture | Full reuse | None |
| Image preprocessing & resizing | Full reuse | None |
| Gemini API integration | Full reuse | New prompt for menu extraction |
| High Family classification | Full reuse | Applied per-strain instead of per-label |
| Strain database matching | Partial reuse | Need batch matching + alias expansion |
| Results UI | New build | Multi-strain card list vs. single result |
| Privacy handling (no image storage) | Full reuse | Same policy |
Tier Impact
| Tier | Access |
|---|---|
| Free | 3 menu scans per month with basic strain name matching |
| Pro | Unlimited scans, full terpene profiles, personal context overlay, comparison mode, wishlist integration |
Dependencies
- Label Scanner infrastructure (camera, Gemini, matching) — built and live
- Strain database with 5,226+ profiles — built and live
- Batch strain lookup API endpoint — built and live
- Gemini prompt engineering for multi-strain menu extraction
- Strain alias dictionary (abbreviations, slang, misspellings)
- Batch fuzzy matching endpoint optimization
- Multi-strain results UI component
- Side-by-side comparison view
Open Questions
- Handwritten menus — Should we support handwritten chalkboard menus in v1, or start with printed/digital only? Handwriting OCR is significantly harder and may produce poor results that damage trust.
- Multi-image stitching — Some dispensary menus span multiple boards or pages. Should v1 support scanning multiple images and merging the results, or require one image per scan?
- Offline mode — Dispensaries often have poor cell reception. Should we cache a local strain name dictionary for basic matching without network access?
- Pricing data — Menus include prices. Should we extract and display pricing alongside strain data? This adds value but also adds complexity and accuracy risk.
- Digital menu integration — Some dispensaries use Dutchie or Jane for digital menus. Should we offer a “paste menu URL” option that scrapes the digital menu instead of requiring a photo?
Related Features
- Barcode Scanner — Complementary scanning feature for individual products
- Label Scanner — The existing single-label scanner that this feature builds on
- Smart Suggestions — Menu scan results can feed into personalized recommendations
- Shopping Agent — Future integration: “Which dispensary has the best strains for me?”