Inspiration

Popular food and cosmetic product scanners, like Yuka, treat every human body the exact same way. A college athlete trying to bulk is penalized for high calories, while coconut-oil/ whey snacks are marked "healthy" when in reality, it can trigger hormonal acne. Also, "bad" labels create food anxiety. We want to be more in control of health and making sure we are fueling properly.

What it does

VitalVeil is an AI-powered grocery and beauty scanner built around your personal biology. You save your health goals: managing root-cause acne, keeping blood sugar steady, bulking, etc., and scan any ingredient label. Our project flags specific triggers, highlights supportive nutrients, and gives nonrestrictive swaps or pairing tips so you can fuel your body with confidence instead of fear.

How we built it

It is a Python app built with Streamlit for the UI and Google Gemini for reading labels. When you upload a photo, we send the image and your goals (food goals, skin type, skin concerns and an avoid list) to Gemini in a single multimodal request. Gemini reads the label and returns structured JSON that matches a Pydantic schema we defined: every ingredient, which ones to flag and why, which ones support your goals, a 0–100 fit score, and suggested swaps. Our code matches each flag back to the exact ingredient on the label, and checks your avoid list with a word-matching step alongside Gemini’s synonym detection (so “fragrance” also catches “parfum”). Compare mode runs both scans in parallel to cut the wait. On the design side, we pushed Streamlit well past its default look with custom CSS: a sage color palette, frosted-glass cards, an iOS-style toggle, tappable color-coded ingredient chips, a scanning animation and an animated score ring.

Challenges we ran into

We had to make Streamlit not look like Streamlit. When we had our initial version, the website was too plain, disorganized, and hard to navigate. We tried to make the UI as clean and calming as possible for the user. Also, the labels from the images take a long time to process. Reducing the file size makes the image more blurry, so the results are not as accurate, though it's faster. Having high quality images gives good results but takes ~30 seconds to a minute to process.

Accomplishments that we're proud of

We're proud of how well we managed our time and were able to make an otherwise boring website fun and interactive. We're also proud of being able to create something that helps people be in better control of their health, and have less food anxiety. For me, I love cookies, but would feel so much shame and stress that it would break me out. This app gives me advice for how to pair the foods I like, so I don't have to stop eating them all together.

Built With

Share this project:

Updates

Submission history