Inspiration
What it does
How we built it
Challenges we ran into
Accomplishments that we're proud of
Bouncer
Inspiration
Teenagers almost never tell anyone they're being harassed online. Not because they don't know how — because telling someone means admitting it got to them. So they keep it private, act like it rolls off, and let it pile up on their own phone. The messages don't stop, and neither does re-reading them.
That silence is the actual problem. It compounds invisibly, and by the time a parent, a teacher, or a friend finds out, the damage has already happened — and there's no record of any of it, because the only witness was the person it happened to.
We kept coming back to the same barrier: every existing solution requires the victim to speak up first. Report it. Screenshot it. Tell an adult. All of that asks a teenager to do the one thing shame makes hardest.
So we built something that doesn't require disclosure at all.
What it does
Bouncer is a digital guardian that sits across all your chats — Discord, iMessage, SMS, email — running privately on your own machine. Nobody has to be told. Nothing gets shared.
It reads what comes in. When someone's pattern starts escalating, it stops handing you their messages and gives you a calm summary instead, so you're not absorbing every insult to stay informed. It recognizes the same person when they come back under a new number or account, and says why. It tells you where a situation is heading before it gets there.
It also watches the other direction. If you're firing back at 1am, it says so — not "you seem upset," just: three messages in two minutes to someone we're tracking, want to pause? It notices something is getting to you without making you announce it.
And the entire time, it's building the record. So the day you do decide to tell someone — a parent, a school, the police — the evidence already exists and you never have to go back and read it again to prove it happened.
How we built it
A TypeScript server ingests every channel and runs each message through one
pipeline. Five judgments are made by deepseek-v4-flash:cloud on Ollama Cloud
with structured JSON output: severity, cross-platform identity linkage,
escalation and forecast, summaries, and reply drafting — each returning a
written rationale that ends up in the app and the exported report. Messages are
stored in SQLite where every row's SHA-256 hash includes the previous row's, so
the log re-verifies from entry one and can't be quietly edited. A React console
runs on the Mac; a SwiftUI iPhone app pairs over local Wi-Fi via Bonjour, streams
events over WebSocket, and raises lock-screen alerts you can act on without
opening the app.
Challenges we ran into
The model wouldn't hold its output schema — we got bare numbers and markdown
back — so we probe-tested it and moved to format: "json" with the schema in
the prompt plus validation and retries. Disabling thinking made it worse, not
better.
Venue-style Wi-Fi with client isolation meant the phone couldn't reach the Mac at all, so we ran the whole system over the USB cable with Bonjour discovery.
The bug that taught us the most: when the phone lost the Mac, our app displayed "All quiet." A safety tool had just told a scared user everything was fine because it couldn't see. We rewrote it to say plainly: "Can't see your channels — this is not an all-clear."
What we learned
Trajectories, not messages. One cruel message never quarantines anyone — we deliberately kept a friend's "I'm going to kill you, you can't leave me on that cliffhanger 😭" in our test data to make sure it never escalates.
And this: the reason kids don't report isn't a lack of tools. It's that every tool starts by asking them to say it out loud. Build something that acts before that moment, and you reach the people the current options never do.
What we learned
What's next for Bouncer
Built With
- health
- mental
Log in or sign up for Devpost to join the conversation.