Inspiration
Medication errors are a global problem. The World Health Organization estimates that medication errors cost $42 billion a year worldwide, almost 1% of total global health spending, and has made "Medication Without Harm" a global patient safety challenge.
In Korea, the risk is especially high because people often take many medicines at once. According to OECD data, 70.2% of Koreans aged 75+ take five or more medicines for over three months, compared to an average of 48% across the seven OECD countries that reported data. The National Health Insurance Service reports that 1.29 million people take 10 or more oral medicines long-term, up about 53% from 840,000 in 2019.
These medicines often come from different places: a family clinic for a cold, an ENT clinic for sinuses, and a pharmacy for something over the counter. Each prescription looks fine on its own, but nobody sees them side by side, except the patient.
That's how hidden overlaps happen. Tylenol from one clinic and a cold medicine from another both contain acetaminophen. Together, that's 2,800 mg a day, close to the 4,000 mg daily limit. I wanted a tool that lets anyone check their full medicine list in seconds, without an account.
What it does
PillCheck is a one-time-use web tool:
- Scan: take photos of medicine bags, prescription labels, OTC boxes, bottles, or blister packs.
- Read: AI reads each medicine's name, ingredient, dose, times per day, and days. Low-confidence or estimated values are marked Needs review, and users can edit them.
- Check: a rule-based safety engine looks for:
- Duplicate ingredients across different medicines
- Daily dose limits (total daily amount across all medicines)
- Do-not-combine pairs from Korea's official drug safety data (MFDS DUR)
- Same drug class duplicates (MFDS DUR)
- Use-with-caution pairs with cited sources (FDA, NIH MedlinePlus)
- Share: save a PDF, print, or send a summary to your pharmacist.
Every warning shows its source. Warnings are never generated by AI. AI only reads the labels, and the safety decisions come from rules and official data, so the results are reproducible.
Privacy: no login, no database. Photos are never stored, and results disappear when you close the page. It works in English and Korean.
How we built it
- Frontend: Next.js 16 (App Router), React 19, TypeScript, Tailwind CSS 4, mobile-first responsive design
- Label reading: Claude Vision API with a prompt tuned for Korean pharmacy bag formats (1회 투약량, 1일 투여횟수, 총 투약일수, 아침/점심/저녁/취침전). It first classifies the photo type (prescription bag, OTC box, bottle, blister) and returns structured JSON.
- Safety engine: Korea's MFDS DUR Open API (ingredient and product data). I saved a snapshot of 1,836 do-not-combine records and 406 drug-class records, so checks run in about 0.1 seconds. It falls back to the live API for unknown ingredients.
- Deployment: Vercel, with per-IP and daily rate limits to protect API costs
- AI tools I used: Claude Design for UI design, Cursor (agent) and Claude for coding help, prompt writing, and debugging
Challenges we ran into
- Matching ingredient names: AI returns English names, but the DUR API only filters by Korean names. I built a normalizer that removes salt forms (e.g. "Cetirizine Hydrochloride" → cetirizine) and maps them to Korean aliases.
- Speed: the first live DUR lookup took about 10 seconds. Saving a snapshot of the official lists brought it down to about 0.1 seconds.
- Not trusting AI too much: when a box says "3 times a day" without times, AI guessed morning/lunch/evening. I flagged these as estimated and asked the user to confirm, instead of showing them as facts.
- Duplicate warnings: the same pair (aspirin + ibuprofen) triggered two warnings. I merged them into one card with multiple sources.
Accomplishments that we're proud of
- Built and deployed a working product solo, from design to live website, as my first hackathon project.
- Connected real government drug safety data (MFDS DUR) instead of relying on AI guesses.
- Every warning is explainable: users can see exactly why it appeared and where the rule came from.
- It reads real Korean pharmacy bags and OTC packages, which most global tools can't.
- Privacy by design: no account, no stored photos, nothing saved after you leave.
What we learned
This was my first hackathon. I learned how to work with real public health data, how to design an app where AI helps but doesn't make the safety decision, and how important clear sources are in healthcare.
What's next for PillCheck
- Pill identification from imprint and shape
- More languages for foreign residents in Korea
- Elderly-specific cautions (MFDS DUR elderly warnings)
PillCheck helps you ask better questions. It does not replace a doctor or pharmacist.
Sources
- WHO, Medication Without Harm — Global Patient Safety Challenge
- OECD data on polypharmacy in adults aged 75+ (reported Oct 2021)
- Korea National Health Insurance Service data on patients taking 10+ oral medicines (reported Jul 2024)
- MFDS (Ministry of Food and Drug Safety) DUR Open API, data.go.kr
Built With
- anthropic
- claude
- cursor
- data.go.kr
- jspdf
- mfds-dur-api
- next.js
- react
- tailwindcss
- typescript
- vercel
Log in or sign up for Devpost to join the conversation.