You are browsing as a guest. Sign up (or log in) to start making projects!

DoseGuard

  • 9 Devlogs
  • 32 Total hours

A medication scanner + interaction checker

Open comments for this post

1h 38m 49s logged

DoseGuard - Deployed

Last stretch was about making it real: hardening the app and getting it deployed where people can actually use it.

Made it correct

Shipped it

Deployed to a Hack Club box - FastAPI + Caddy under PM2, React build served static, the 250k-drug DB shipped up from local

The OCR fight

This ate the day. Fresh Ubuntu was missing native libs (libGL, libgomp), then PaddlePaddle crashed on an unimplemented oneDNN op, then segfaulted - turned out the PP-OCRv5 server models just don’t run on this CPU. Swapped to the mobile models and it finally worked: scan a strip → reads the salts -> flags the interaction, ~2s.

It’s live

Scan an “Aspirin + Clopidogrel” box and it correctly flags the interaction, end to end in the browser. Demo login + screenshots in the README.

DoseGuard - Deployed

Last stretch was about making it real: hardening the app and getting it deployed where people can actually use it.

Made it correct

Shipped it

Deployed to a Hack Club box - FastAPI + Caddy under PM2, React build served static, the 250k-drug DB shipped up from local

The OCR fight

This ate the day. Fresh Ubuntu was missing native libs (libGL, libgomp), then PaddlePaddle crashed on an unimplemented oneDNN op, then segfaulted - turned out the PP-OCRv5 server models just don’t run on this CPU. Swapped to the mobile models and it finally worked: scan a strip → reads the salts -> flags the interaction, ~2s.

It’s live

Scan an “Aspirin + Clopidogrel” box and it correctly flags the interaction, end to end in the browser. Demo login + screenshots in the README.

Replying to @darshjain

0
4
Open comments for this post

6h 7m 12s logged

This round was less about new features and more about making the existing loop trustworthy - multi-salt meds, an editable scan history, per-user timezones, and a pile of correctness bugs that were quietly skewing what people saw.

Multi-salt medicines

  • One medicine can now hold multiple active ingredients. “Combiflam” or a combination tablet resolves to all its salts (ibuprofen + paracetamol), not just the first one - so interaction checks actually see everything you’re taking.

Editable scan history

  • New PATCH /scans/{id} endpoint + an “Edit & re-check” modal — fix an OCR misread, add or remove a drug, and re-run the interaction check without re-scanning.
  • Adding a medication from a scan carries its salts through, and duplicate meds are blocked (case-insensitive).

Account + timezone

  • New change-password flow (/auth/change-password) — verifies the current password and signs out other devices.
  • Every user now has a timezone (defaults to Asia/Kolkata, editable on the Profile page). “Today”, the slot cutoffs (morning/afternoon/evening/night), adherence,

Where it stands

  • Full loop still works end to end: scan or search -> save as a multi-salt med -> schedule its course + slots -> track today -> see adherence + real interaction warnings -> and now it’s all timezone-correct and edit-friendly.

Fixing some bugs moving ahead

  • Night doses now actually go overdue (the old cutoff of 24 could never trigger).
  • Adherence only counts doses that were genuinely scheduled -> stray or leftover logs can’t push the percentage past what you were actually due.
  • Deleting a medication now also clears its dose logs, so old “taken” rows stop inflating adherence.
  • A medication is no longer half-created if RxNorm hiccups mid-add -> ingredients resolve before anything is saved.
  • One failed RxNorm lookup during a scan no longer kills the whole scan.
  • Drug search ranks an exact match above a loose substring product, and de-dupes.

This round was less about new features and more about making the existing loop trustworthy - multi-salt meds, an editable scan history, per-user timezones, and a pile of correctness bugs that were quietly skewing what people saw.

Multi-salt medicines

  • One medicine can now hold multiple active ingredients. “Combiflam” or a combination tablet resolves to all its salts (ibuprofen + paracetamol), not just the first one - so interaction checks actually see everything you’re taking.

Editable scan history

  • New PATCH /scans/{id} endpoint + an “Edit & re-check” modal — fix an OCR misread, add or remove a drug, and re-run the interaction check without re-scanning.
  • Adding a medication from a scan carries its salts through, and duplicate meds are blocked (case-insensitive).

Account + timezone

  • New change-password flow (/auth/change-password) — verifies the current password and signs out other devices.
  • Every user now has a timezone (defaults to Asia/Kolkata, editable on the Profile page). “Today”, the slot cutoffs (morning/afternoon/evening/night), adherence,

Where it stands

  • Full loop still works end to end: scan or search -> save as a multi-salt med -> schedule its course + slots -> track today -> see adherence + real interaction warnings -> and now it’s all timezone-correct and edit-friendly.

Fixing some bugs moving ahead

  • Night doses now actually go overdue (the old cutoff of 24 could never trigger).
  • Adherence only counts doses that were genuinely scheduled -> stray or leftover logs can’t push the percentage past what you were actually due.
  • Deleting a medication now also clears its dose logs, so old “taken” rows stop inflating adherence.
  • A medication is no longer half-created if RxNorm hiccups mid-add -> ingredients resolve before anything is saved.
  • One failed RxNorm lookup during a scan no longer kills the whole scan.
  • Drug search ranks an exact match above a loose substring product, and de-dupes.

Replying to @darshjain

0
1
Open comments for this post

4h 17m 44s logged

DoseGuard moved from a tiny hand-curated interaction list to a real, sourced drug-interaction database - plus a searchable medicine catalog and a calendar that shows adherence over time.

Real interaction data

  • Replaced the 8 curated pairs with the DDInter dataset (~150k real drug-drug interactions), graded Major / Moderate / Minor → severe / moderate / low.
  • New normalization + interaction engine so user meds and the dataset speak the same RxNorm vocabulary.

Searchable medicine catalog

  • Imported ~250k medicine products + ~3k drug concepts into searchable tables.
  • New /drugs/search endpoint (fuzzy match) and a debounced DrugSearch autocomplete component.

Medications page

  • Add meds by searching the catalog or importing from a scan (one scan -> one med, salts included).
  • Set a course length (3 days, ongoing, etc.) — adherence only counts days a med is actually active.

Calendar

  • New Calendar page: month grid with per-day dots (all-taken / partial / missed / today), a 2-week tile strip with dates, plus doses-taken, tracked-days, and a 12-week adherence trend.
  • New /tracking/history endpoint feeding day-by-day stats.

Where it stands

  • Full loop working: scan or search a medicine -> save as a multi-salt med -> schedule its course + slots -> track today -> see adherence + real interaction warnings, all backed by sourced data.

Fixing some bugs moving ahead

DoseGuard moved from a tiny hand-curated interaction list to a real, sourced drug-interaction database - plus a searchable medicine catalog and a calendar that shows adherence over time.

Real interaction data

  • Replaced the 8 curated pairs with the DDInter dataset (~150k real drug-drug interactions), graded Major / Moderate / Minor → severe / moderate / low.
  • New normalization + interaction engine so user meds and the dataset speak the same RxNorm vocabulary.

Searchable medicine catalog

  • Imported ~250k medicine products + ~3k drug concepts into searchable tables.
  • New /drugs/search endpoint (fuzzy match) and a debounced DrugSearch autocomplete component.

Medications page

  • Add meds by searching the catalog or importing from a scan (one scan -> one med, salts included).
  • Set a course length (3 days, ongoing, etc.) — adherence only counts days a med is actually active.

Calendar

  • New Calendar page: month grid with per-day dots (all-taken / partial / missed / today), a 2-week tile strip with dates, plus doses-taken, tracked-days, and a 12-week adherence trend.
  • New /tracking/history endpoint feeding day-by-day stats.

Where it stands

  • Full loop working: scan or search a medicine -> save as a multi-salt med -> schedule its course + slots -> track today -> see adherence + real interaction warnings, all backed by sourced data.

Fixing some bugs moving ahead

Replying to @darshjain

0
15
Open comments for this post

5h 53m 3s logged

DoseGuard moved past “scan + check” into daily medication management schedule doses, track them, and see adherence alongside safety warnings.

Today page

  • New Today page showing scheduled doses split into morning / afternoon / evening / night.
  • Each dose shows a live status: taken, skipped, overdue, or upcoming.
  • Quick actions to mark a dose taken or skipped.

Tracking + safety together

  • New backend models for dose schedules and dose logs.
  • New API routes: today’s schedule, saved schedules, update med slots, log taken/skipped, 7-day adherence.

UI polish

  • Reworked pages on shared UI components.
  • Animated page transitions, staggered cards, animated stat numbers, cleaner headers.
  • Swapped emoji nav icons for lucide icons

Where it stands

  • Full loop working: scan medicines -> save as meds -> schedule doses -> track today -> see adherence + interaction warnings.

DoseGuard moved past “scan + check” into daily medication management schedule doses, track them, and see adherence alongside safety warnings.

Today page

  • New Today page showing scheduled doses split into morning / afternoon / evening / night.
  • Each dose shows a live status: taken, skipped, overdue, or upcoming.
  • Quick actions to mark a dose taken or skipped.

Tracking + safety together

  • New backend models for dose schedules and dose logs.
  • New API routes: today’s schedule, saved schedules, update med slots, log taken/skipped, 7-day adherence.

UI polish

  • Reworked pages on shared UI components.
  • Animated page transitions, staggered cards, animated stat numbers, cleaner headers.
  • Swapped emoji nav icons for lucide icons

Where it stands

  • Full loop working: scan medicines -> save as meds -> schedule doses -> track today -> see adherence + interaction warnings.

Replying to @darshjain

1
28
Open comments for this post

5h 53m 58s logged

The web app (React + HeroUI) — In progress

  • A modern admin-style dashboard: sidebar nav, top bar, stat cards.
  • Pages for managing medications, scanning, viewing the dashboard, and editing your profile.
  • Scan history table where you can review past scans, edit the extracted drugs, and re-run the interaction check.
  • Camera + upload - take a photo live in the browser or upload one.
  • Made mobile-friendly (the sidebar collapses into a slide-out drawer on phones).

The hard part: reading the label (OCR)

This is where most of the recent effort went, and it’s been a real journey:

  • Started with Tesseract - it choked on real photos (returned garbage like “ry”).
  • Switched to PaddleOCR, then to its best models (PP-OCRv5 server detection + recognition, plus auto-rotation and image-unwarping). This reads real strips far better.
  • Improved the matching: combine adjacent words so multi-word salts (“lactic acid”) stay together, skip packaging words (tablet, mg), and tolerate OCR typos with fuzzy matching.

Where it stands

The full chain works end to end: scan a medicine -> read the salts -> check interactions -> see ranked warnings, with accounts, history, and a polished responsive UI.

The web app (React + HeroUI) — In progress

  • A modern admin-style dashboard: sidebar nav, top bar, stat cards.
  • Pages for managing medications, scanning, viewing the dashboard, and editing your profile.
  • Scan history table where you can review past scans, edit the extracted drugs, and re-run the interaction check.
  • Camera + upload - take a photo live in the browser or upload one.
  • Made mobile-friendly (the sidebar collapses into a slide-out drawer on phones).

The hard part: reading the label (OCR)

This is where most of the recent effort went, and it’s been a real journey:

  • Started with Tesseract - it choked on real photos (returned garbage like “ry”).
  • Switched to PaddleOCR, then to its best models (PP-OCRv5 server detection + recognition, plus auto-rotation and image-unwarping). This reads real strips far better.
  • Improved the matching: combine adjacent words so multi-word salts (“lactic acid”) stay together, skip packaging words (tablet, mg), and tolerate OCR typos with fuzzy matching.

Where it stands

The full chain works end to end: scan a medicine -> read the salts -> check interactions -> see ranked warnings, with accounts, history, and a polished responsive UI.

Replying to @darshjain

0
41
Open comments for this post

3h 39m 19s logged

Before this, the app could check drugs but it had no memory of who you were. So I added proper accounts.

Now the app has real users, remembers their medications, checks them safely, and protects their accounts to a standard I’d actually trust.

Before this, the app could check drugs but it had no memory of who you were. So I added proper accounts.

Now the app has real users, remembers their medications, checks them safely, and protects their accounts to a standard I’d actually trust.

Replying to @darshjain

0
1
Open comments for this post

1h 26m 42s logged

This is the part that actually makes DoseGuard useful - checking whether the medicines you’re on are dangerous together.

Up to now the app could recognise a drug and figure out its ingredient, but it couldn’t say anything about safety. So I built the interaction checker.

When you hand the app a list of medicines, it takes each one, boils it down to its real ingredient (using the part I built earlier), and then checks every possible pair against that database. If it finds a clash, it tells you which two drugs, how dangerous it is, and why.

I started the danger list small and curated by hand, just the well-known serious interactions, so I know it’s accurate.

This is the part that actually makes DoseGuard useful - checking whether the medicines you’re on are dangerous together.

Up to now the app could recognise a drug and figure out its ingredient, but it couldn’t say anything about safety. So I built the interaction checker.

When you hand the app a list of medicines, it takes each one, boils it down to its real ingredient (using the part I built earlier), and then checks every possible pair against that database. If it finds a clash, it tells you which two drugs, how dangerous it is, and why.

I started the danger list small and curated by hand, just the well-known serious interactions, so I know it’s accurate.

Replying to @darshjain

0
2
Open comments for this post

2h 20m 19s logged

Just finished the first real feature of DoseGuard - getting the app to actually understand drug names.

The problem is people don’t type or photograph drug names cleanly. They’ll write “tylenol” instead of the real medical name, or just misspell something like “warfarn.” So I built a piece that takes whatever messy text comes in and figures out what the drug actually is.

That ingredient bit matters, because two different-looking medicines can contain the same thing, and that’s where dangerous combinations come from.

I hooked this up to a free official US government drug db, so it’s working off real medical data

Just finished the first real feature of DoseGuard - getting the app to actually understand drug names.

The problem is people don’t type or photograph drug names cleanly. They’ll write “tylenol” instead of the real medical name, or just misspell something like “warfarn.” So I built a piece that takes whatever messy text comes in and figures out what the drug actually is.

That ingredient bit matters, because two different-looking medicines can contain the same thing, and that’s where dangerous combinations come from.

I hooked this up to a free official US government drug db, so it’s working off real medical data

Replying to @darshjain

0
4
Open comments for this post

52m 3s logged

Started working on a this project. The idea is pretty simple: you take a photo of a medicine bottle, and the app reads the name off the label and warns you if it’s dangerous to take alongside the other medicines you’re already on. You can also just type the name in if you don’t want to use the camera.

So far I’ve got the foundation done. The project’s structured, the backend actually runs, there’s a basic health-check working, sorted out all the annoying Python environment and editor stuff. Next thing I’m doing is the part that recognises the drug name from the label.

Started working on a this project. The idea is pretty simple: you take a photo of a medicine bottle, and the app reads the name off the label and warns you if it’s dangerous to take alongside the other medicines you’re already on. You can also just type the name in if you don’t want to use the camera.

So far I’ve got the foundation done. The project’s structured, the backend actually runs, there’s a basic health-check working, sorted out all the annoying Python environment and editor stuff. Next thing I’m doing is the part that recognises the drug name from the label.

Replying to @darshjain

0
4

Followers

Loading…