Inspiration
Every drug that reaches the market can cause harms that clinical trials never caught. The FDA collects adverse-event reports in a public database called FAERS, but there are over 20 million of them, and popular drugs rack up huge report counts simply because lots of people take them, so raw counting tells you nothing. I wanted to build the tool a drug-safety analyst could use to cut through that.
What it does
Signal Watch computes the same disproportionality statistics that real pharmacovigilance teams and regulators use: the Proportional Reporting Ratio (PRR), Reporting Odds Ratio (ROR), and Information Component (IC025) across roughly 40,000 drug/reaction pairs. An analyst can then triage each signal by viewing the contingency table, watching the quarterly reporting trend grow over time, setting a status and priority, and leaving notes. As a built-in credibility check, the pipeline recovers well-established dangers straight from the data.
How we built it
A Python ETL pulls aggregate counts from the public openFDA FAERS API, computes the disproportionality statistics from contingency tables, and loads results into Amazon Aurora PostgreSQL. The frontend is Next.js on Vercel connected to Aurora through Vercel's OIDC federation and AWS IAM authentication. The schema is split into an analytical side (signals, time series) and a transactional workflow side (status, notes, and an audit trail).
Challenges we ran into
FAERS is noisy in two ways: rare reactions get statistically inflated scores, and non-informative administrative terms like "drug ineffective" dominate by volume. I handled these with a term stoplist, minimum-count thresholds, and requiring all three statistical methods to agree before flagging a signal as "confirmed."
Accomplishments that we're proud of
The statistical engine recovers established, real-world drug warnings directly from raw FDA data. It's also honest about its limits as disproportionality is a screening signal, not proof of causation.
What we learned
I came into this not knowing too much about the Node/Vercel/AWS stack and learned the Aurora-via-OIDC connection from scratch. I also learned about pharmacovigilance disproportionality analysis enough to make defensible engineering decisions about noise, thresholds, and signals.
What's next for Signal Watch
Analyst authentication and multi-team support, demographic sub-group breakdowns, a plain-language AI summary for stakeholders, and semantic search.
Built With
- amazon-web-services
- css
- next.js
- node.js
- postgresql
- python
- react
- typescript
- v0
- vercel
Log in or sign up for Devpost to join the conversation.