Inspiration
One of us had a very niche but very real problem: being way too locked into pop culture. Checking celebrity news every day, blocking one name at a time, then realizing there are like 50 more to add. Traditional blockers felt too rigid. They block exact keywords or specific sites. But distractions aren’t that specific. They’re categories. We thought: what if you could just block “pop stars” instead of manually adding every single one? That’s how BlockedIn was born.
What it does
BlockedIn is a semantic website blocker.
Instead of matching exact keywords, it understands the meaning of what you’re looking at. You describe a category (e.g. “celebrities”), and it blocks or warns you whenever a tab matches that idea.
You can:
- Create custom categories with natural language
- Choose between Strict mode (hard block) or Warn mode (reminders)
- Get real-time voice feedback telling you to lock in
NO images in this project were AI generated! All project assets were made by human artists during this hackathon.
How we built it
On the backend, we built a Flask API powered by a pretrained sentence embedding model (Snowflake/snowflake-arctic-embed-xs) and a custom linear-probe style classifier for each user-defined category, with persistent config storage to save everything. When a user describes a category, we embed that description into vector space, generate positive and negative example tags, and store those embeddings. Then, whenever a new tab opens, we embed its title and URL and compare it against the saved category vectors in real time. We intentionally chose a lightweight embedding model so everything runs fast in memory; it can handle dozens of checks per second without slowing down. For voice feedback, we use the ElevenLabs API for text-to-speech with custom lines for strict and warn modes, played asynchronously so the audio never blocks the app.
Challenges we ran into
- Designing semantic blocking that doesn’t over-block everything
- Tuning positive vs negative examples so categories feel precise
- Making it fast enough to run in real time
- Avoiding weird edge cases where one word triggers chaos
Accomplishments that we're proud of
- Real-time semantic classification that actually works
- Clean category creation flow from description → model-ready config
- Audio feedback that triggers instantly
- A working system(!) that feels way more flexible than traditional blockers
What we learned
- Embeddings are insanely powerful for real-world UX problems
- Small models can be enough if you design the system right
What's next for BlockedIn
- Full browser extension integration
- Allowlists + smarter category interaction
- Better UI for refining categories
- Analytics on what you’re avoiding
Log in or sign up for Devpost to join the conversation.