Inspiration
Patients are often left to decode phrases like "BI-RADS 4B" and "spiculated" on their own, in the days between a callback and a biopsy. My grandmother was one of them. Imaging reports are written for radiologists, yet one in eight women in the United States will be diagnosed with breast cancer, and every one of them will receive such a document that is filled with complex medical terms. When breast cancer is found while localized, five-year survival is 100%. After distant spread, it falls to 33.8% (SEER). Understanding symptoms and results sooner helps people act sooner, so we set out to build the explanation that a report does not come with.
What it does
SecondLook helps people facing a possible breast cancer diagnosis understand their results through plain language and visual explanation. It fits the Detection & Diagnosis category: it turns medical reports and images into visualizations with explained terms. It has four parts.
Report decoder. The user pastes a mammogram or ultrasound report. SecondLook shows the BI-RADS category on a risk scale, breast density as a picture, and the finding's location on a clock-face diagram. It explains 72 medical terms, strikes through any term the report says is absent, and ends with questions to bring to the doctor.
Ultrasound lab. An image model that runs in the browser classifies a sample ultrasound as normal, benign or malignant and draws a heat map of the evidence behind its answer.
Symptom and screening checker. Built on CDC, American Cancer Society, NICE and USPSTF 2024 guidance, it tells people when to see a doctor. It only ever escalates and never says that someone is fine.
Biopsy lab. A learning tool that explains a cell-measurement model one feature at a time.
An AI guide also answers questions in plain language. The two labs are research demos and are never used on a person's own scan.
How we built it
We started by hand. We read reports, studied the terminology and worked through the clinical guidelines before writing any code. We then used Claude to gather data and to run long tasks such as cross-validation, and we used it to help debug.
SecondLook is a static web app. The decoder, symptom checker and both labs run in the browser through ONNX Runtime Web and send nothing out. The chat goes through a single serverless function, so the API key stays on the server. The report decoder is rule-based rather than generative, so it cannot invent text, and every rule cites its source. The ultrasound classifier is an EfficientNet-B0 trained on the public BUSI dataset. The biopsy model uses the dataset from the Wisconsin Diagnostic Breast Cancer.
Challenges we ran into
Our hardest problem was data. The BUSI (Breast Ultrasound Image dataset) ultrasound dataset contains duplicate images, some labeled both benign and malignant. A random split would have placed near-copies of test images in training and produced the 95 to 98% scores seen in published work. We removed 22 conflicting images, kept duplicate groups together in the same fold, and used 5-fold grouped cross-validation. The model reaches an AUC of 0.90 (95% CI 0.88 to 0.93). That figure is lower than many papers report, but it is honest. At its default setting, the model catches 75% of malignant images and misses about 1 in 4, and it clears 88% of the others correctly. We state this in the app, which is why the lab is a demonstration and not a test for anyone's own scan.
Accomplishments that we're proud of
We built a complete, working product, and my grandmother used it, liked it and approved of it. It also taught us medical terms we did not understand ourselves. On the technical side, we audited our dataset instead of trusting its labels, confirmed that the model running in the browser gives the same results as the original, and made every clinical rule traceable to a source.
What we learned
We learned how frustrating it is for patients diagnosed with breast cancer to understand the terms in their own results. Seeing that through my grandmother, and then through the report decoder, changed how we built the product: we stopped treating plain language as a finishing touch and made it the core of the design. We also learned that honesty matters more than a flattering number. Our model is imperfect, and showing that openly makes the tool more trustworthy, not less.
What's next for SecondLook
More real-world testing. We want to test the report decoder on real, de-identified reports and check the ultrasound model on datasets from other hospitals (BUS-BRA and BrEaST), since our current results come from one hospital. More languages. We plan to add Spanish and Korean, because understanding a diagnosis should not depend on the language a patient speaks. Feedback from the people it is for. We want patients and clinicians to review the explanations and tell us which terms are still unclear, so the wording keeps getting better.
Built With
- css3
- efficientnet
- html5
- javascript
- netlify
- netlify-functions
- node.js
- numpy
- onnx
- onnx-runtime-web
- openai-api
- python
- pytorch
- scikit-learn
- timm
- webassembly
Log in or sign up for Devpost to join the conversation.