Inspiration

The World Health Organization estimates that a significant share of medicines in circulation in low- and middle-income regions are falsified or substandard — and most people have no fast, free way to check what they're about to take before they take it. This isn't an abstract problem; it's something that touches families across India and many other countries every single day, often silently, because there's no easy first line of defense at the point where it matters most right before swallowing a pill.

We wanted to build something that didn't require a pharmacy, a lab, or an internet-connected government database lookup that only works in one country. We wanted anyone, anywhere, in their own language, to be able to point a phone camera at a medicine strip and get an honest, immediate answer.

What it does

MediVerify lets a user photograph any medicine's packaging a strip, box, or bottle label and returns a full authenticity assessment in seconds:

  • Extracts the medicine name, generic name, manufacturer, batch number, manufacturing and expiry dates, and strength directly from the image using AI vision
  • Cross-checks the extracted medicine name against open global pharmaceutical reference databases (OpenFDA and RxNorm)
  • Flags packaging that shows visual inconsistencies commonly seen in counterfeits mismatched fonts, blurry print, missing mandatory fields
  • Automatically checks the expiry date against today's date
  • Checks the medicine against a database of drug formulations banned by India's Ministry of Health and Family Welfare
  • Explains, in plain language, what the medicine is commonly used for and its typical side effects
  • Gives a rough estimated price range, both locally and globally, so users have a sanity check against overcharging or suspiciously cheap "deals"
  • Delivers all of this the entire interface and every AI explanation in the user's choice of 10 languages, including Hindi, Spanish, Arabic (with right-to-left layout), Chinese, and Japanese
  • Tracks the user's scan history on a personal dashboard with visual breakdowns of how many medicines came back genuine, flagged, or prohibited over time

How we built it

The frontend is built with React and Vite, styled with Tailwind CSS using a custom black-and-lime design system, and state is managed with Redux Toolkit. The interface is fully responsive and internationalized through a custom i18n system covering 10 languages.

The backend runs on Node.js and Express. When an image is submitted, it's sent to Google's Gemini vision model with a carefully engineered prompt that instructs it to read every printed detail on the packaging, flag anything visually suspicious, and generate a plain language explanation in the user's selected language. The extracted medicine name is then cross-verified against OpenFDA and RxNorm, two open pharmaceutical databases, with results cached in Redis to keep repeat lookups fast. Verdicts and full scan history are persisted in MongoDB, powering the analytics dashboard.

We also built a rule-based verdict engine so that the presence or absence of a medicine in a US-centric database like OpenFDA never wrongly penalizes a completely genuine medicine from another country the verdict is driven primarily by what the AI actually observes on the packaging itself, with database matches acting as an added confidence signal rather than a hard requirement.

Challenges we ran into

Getting the "verified vs caution" logic right was harder than it looked. Our first version leaned too heavily on whether OpenFDA or RxNorm recognized the medicine name but those databases are US-focused, so a completely genuine Indian medicine would come back "caution" simply for not being in an American database. We rebuilt the verdict logic to be rule-based around what the AI can actually verify from the image itself visual consistency, expiry validity, and a real prohibited-drugs list with the external databases acting only as a bonus signal, not a gatekeeper.

We also went through several SMS provider integrations for an earlier feature and hit real-world friction trial account restrictions, template requirements, minimum wallet top-ups which taught us to always build a graceful fallback path so the app never breaks even when a third-party service isn't fully configured.

Building genuinely useful multilingual support was also non-trivial it wasn't enough to translate button labels the AI-generated explanation for each scan needed to be generated live in the user's chosen language, not just the static interface around it.

Accomplishments that we're proud of

We're proud that MediVerify works without requiring the user to create an account, without depending on any single country's regulatory database, and without breaking when any one of its external dependencies (database, cache, AI key) isn't configured every part of the backend degrades gracefully instead of crashing. We're also proud of shipping real language support for 10 languages, including full right-to-left layout for Arabic, rather than treating internationalization as an afterthought.

What we learned

We learned that "verification" is a genuinely hard product problem, not just an engineering one the difference between "this database doesn't recognize it" and "this is fake" is a real distinction that a careless implementation can get badly wrong, with real consequences for someone deciding whether to take a medicine. We also learned a lot about the practical limitations of free-tier third-party APIs ( AI rate limits) and the importance of designing for graceful degradation from day one rather than bolting it on later.

What's next for MediVerify

  • Barcode and QR code scanning for countries with track-and-trace systems, for more precise verification than text extraction alone
  • A drug interaction checker so users can cross-check a new medicine against ones they're already taking
  • Community-reported suspicious batch tracking, so patterns across multiple users can surface potentially dangerous batches faster
  • An installable offline-capable version so the core safety checks still work with poor or no internet connectivity
  • Optional accounts for people who want their scan history to follow them across devices

Built With

Share this project:

Updates

Submission history