Swift Student Challenge 2025 Winner
If you'd like to learn more, please get in touch.
Accessibility Lens is a Swift Playground that lets you see through color-blind eyes. Point your camera at anything, and it shows you, in real time, how people with different types of color blindness see it.
I built it on my own for the 2025 Apple Swift Student Challenge, from research and design to code. It was selected as a winning submission, one of the top 350 student projects worldwide, and took me to Apple Park for WWDC25.
Around 300 million people are color blind. Guidelines for designing for them are everywhere, yet error states, status dots and buttons still lean on color alone.
“Click the green button to continue,” but I see two buttons that look almost identical.
The gap isn't information, it's experience. Designers can read that 8% of men are color blind, but they can't see what those users see, so they rarely notice when a design fails them.
I started with the guidelines (WCAG, Material Design and Apple's HIG), existing simulators like Sim Daltonism, and over 60 everyday websites. More than 90% had nothing for color-blind users.
Then I talked to people: 8 designers, from junior to lead, and 4 color-blind users I found through Reddit.
Designers knew the rules. What they lacked was a sense of how their own work looks to someone who is color blind, so they couldn't tell when a design would fail. Accessibility usually came last, as a checklist. And the failures users described weren't edge cases, they were everyday patterns: forms, alerts and status colors.
So I built a way to experience it. Accessibility Lens has two modes: one builds empathy, the other turns it into skill.
Point the camera at anything, a poster, your desk, your own app, and switch between types of color blindness to watch it change in real time. Reading that red and green blur together is one thing. Watching your own design do it is another.
Short challenges built on the patterns that fail most: buttons, forms, alerts and charts. You spot what breaks, fix it with contrast, labels and icons, and check that the fix holds up for every type.
The challenge set hard limits: the whole experience had to fit in three minutes, under 25 MB, and work fully offline. So every screen had to earn its place.
Everything is written in Swift: AVFoundation for the camera, Core Image for the color math and SwiftUI for the screen.
Every camera frame becomes a Core Image image and runs through a color matrix, where each output channel is a weighted mix of the original red, green and blue. In Protanopia the red and green rows are nearly identical, so both turn into muddy olives. Picking a type only swaps the matrix, so the very next frame changes.
| Type | R | G | B | A |
|---|---|---|---|---|
| Protanopia | 0.567, 0.433, 0, 0 | 0.558, 0.442, 0, 0 | 0, 0.242, 0.758, 0 | 0, 0, 0, 1 |
| Deuteranopia | 0.625, 0.375, 0, 0 | 0.7, 0.3, 0, 0 | 0, 0.3, 0.7, 0 | 0, 0, 0, 1 |
| Tritanopia | 0.95, 0.05, 0, 0 | 0, 0.433, 0.567, 0 | 0, 0.475, 0.525, 0 | 0, 0, 0, 1 |
| Achromatopsia | 0.299, 0.587, 0.114, 0 | 0.299, 0.587, 0.114, 0 | 0.299, 0.587, 0.114, 0 | 0, 0, 0, 1 |
The whole playground runs on device with no network, and comes in at about 5 MB of the 25 MB budget. Each challenge pairs a before and after image of the same pattern, so the fix is easy to compare.
Building it changed how I think about accessibility. I knew the guidelines, but watching my own designs fall apart through the lens was humbling. Knowing the rules and feeling them are different things.
It also blurred the line between designing and building. The constraints of the camera, the filters and the size limit sharpened the design instead of limiting it.
And it took me to Apple Park for WWDC25, to meet people whose work I'd admired for years.