Inspiration
While brainstorming for this project, we looked for a problem in our own lives that other people might be dealing with too. One of our grandmas takes multiple medications every day, and keeping track of what she takes and whether they're safe together has become something the family has to manage manually. We wanted to build something for caretakers trying their best to take care of their loved ones.
What it does
MedStack opens to a screen where you can scan a pill bottle or add a medication manually. With the scan feature, you point your phone camera at a pill bottle label. Groq Vision reads the label and pulls out the drug name and dosage, then adds it to that person's medication stack. When a new drug is added, Firecrawl pulls live interaction data from a real drug interaction database online, so the information is current and not based on a static dataset. MedStack then builds a visual map of the person's medications, where each drug is a node and the connections between them are color coded: green for safe, red for dangerous. Instead of scrolling through a list of drug names, you can see the actual risk at a glance, and if two medications shouldn't be taken together, that connection shows up red right away.
How we built it
We started by aligning on our core goal and splitting up tasks across the team, covering frontend, API integration, and the interaction mapping logic. We set up our Groq and Firecrawl API keys early and got a basic version of the web app running. From there, we built the scanning flow first. That meant capturing a photo, sending it to Groq Vision, and analyzing the response into a structured drug name and dosage. Once that worked, we connected Firecrawl to pull interaction data for each new drug against everything already in the person's stack. The hardest part was the prompt design for Groq, getting it to take the raw interaction data from Firecrawl and turn it into a short, plain English summary with a severity rating, without adding information that wasn't actually there. At the same time, we worked on the visual map, rendering each medication as a node and drawing color coded connections based on the severity rating from Groq. We made it so adding a new medication immediately triggers the interaction check, and the map updates live as the new connection appears.
Challenges we ran into
We ran into two main issues. First, we spent the first two hours building a different idea before realizing it didn't fit the "New Interfaces" theme well. We reset, brainstormed again with the theme in mind, and landed on MedStack. Second, we had API limitations. We originally planned to use Gemini for vision and text generation, but our Gemini API keys ran out almost immediately, even with careful use. We switched to Groq, which had more generous free tier limits. The tradeoff was that Groq would sometimes hallucinate details that weren't in the Firecrawl data, especially around severity. We fixed this by rewriting our prompts to explicitly tell Groq to rely only on the scraped content. Once we grounded the model in Firecrawl's output, the hallucinations went away and the severity ratings became consistent.
Accomplishments that we're proud of
We're proud that we got Firecrawl working as a real-time data source, pulling live drug interaction information from the web instead of relying on a static dataset. We're also happy with how the visual interaction map turned out. Scanning a new medication and watching a red connection appear between two drugs makes the risk clear in a way a text warning doesn't. Even though we pivoted ideas partway through, we ended up with a working core flow by the end: scan, check, visualize.
What we learned
We learned a lot about using LLMs to process data rather than as a source of knowledge on their own, especially how important it is to ground a model in external data when you need it to summarize information without filling in gaps from training. We also got more comfortable chaining multiple APIs together (vision, web scraping, and text generation) into one pipeline, and learned how quickly rate limits can become a real constraint, which forced us to adjust our stack mid-project.
What's next for MedStack
Right now the medication stack disappears when you close the app, which works for a demo but not for actual ongoing use. The first thing we'd add is persistent storage so a caregiver can build out and keep a stack over time. After that, we want to move the interaction check earlier in the process, so it happens at the point of pharmacy fill instead of after someone already has the medication at home. That way a dangerous combination gets flagged before the bottle makes it back to the house. Longer term, we're interested in EHR integration. Most dangerous drug combinations aren't caused by negligence, they happen because no single doctor has the full picture. A cardiologist doesn't always know what a primary care doctor prescribed last month. MedStack could sit across all of that and fill in the gap. Eventually, we'd like this to become a family dashboard where a caregiver can manage medication stacks for everyone they're responsible for in one place. The people who need this most aren't necessarily patients managing their own health, but the family members who've become the de facto medical coordinator, keeping it all together through memory and group texts.
Built With
- css
- docker
- express.js
- firecrawl
- github
- groq
- html
- javascript
- json
- jsx
- node.js
- react
- render
- svg
- vite
- vscode

Log in or sign up for Devpost to join the conversation.