Break In Different
Get interviewed on your skills: find who to ask, request accommodations without disclosing, and practice with no timer. Every page works by voice.
Live site · Demo video · GitHub
| 369 real job listings |
25 curated employers |
5 Cartesia voice features |
0 interview timers |
1 → 4 tester's confidence asking |
|---|
💡 Inspiration
We interviewed Michael (an alias), a job seeker on the spectrum. He's qualified and skilled, and he still struggles to break into tech.
"I was worried that even if they saw my resume lines as impressive, seeing a person who identifies with disabilities would turn them off and get my application tossed."
He's not alone. In 2025, 38.1% of disabled people ages 16–64 were employed, compared with 74.8% of everyone else (BLS). Asking for help is risky too. Among people who requested neurodiversity accommodations, 28% feared retaliation and 1 in 5 were turned down (Forbes, Sep 2026).
That left two problems. For candidates, asking is a gamble: who to contact, what to disclose, and whether it costs them the job. And interviews often measure performance in one format instead of skill. In Michael's words: "If I demonstrated I had knowledge, I could get the job."
🎯 What it does
Break In Different helps early-career tech job seekers with disabilities get interviewed on their skills. It never sends anything for you, never auto-applies, and never asks for a diagnosis.
🔎 Find who to ask
Jobs are matched to the candidate's skills. Listings with an employer accommodation form come first, then by match score. Each one shows the employer's own accommodation language, quoted and linked to the original listing. If a listing says nothing, the app says so instead of guessing.
✉️ Ask without disclosing
Claude drafts an accommodation request that names only the accommodations the candidate selected and no health terms. If the listing gives an accommodations email, it fills the To field. The candidate edits every word, and approval unlocks copy or open-in-mail.
🎙️ Practice the way you need
A voiced practice interview for that exact role. Spoken or written questions, the main questions shown in advance, "I need a moment," Repeat, and "Say it differently." There is no response timer, and feedback covers content only.
🗣️ The design is the accessibility
Press the voice button and talk: the page follows, and the assistant answers out loud. Hold to talk for quick commands, dictate emails, and have listings read aloud with word-by-word highlighting. Switch to a dyslexia-friendly font, larger text, extra spacing, high contrast, or reduced motion.
How it changes the job search
| Without Break In Different | With Break In Different |
|---|---|
| Search each career site for an accommodations contact | The employer's form or email is surfaced on the job |
| Guess what the employer actually offers | The employer's own words, quoted and linked to the source |
| Write a request from scratch and worry about disclosure | A prewritten draft that asks without naming a diagnosis |
| Practice under a clock, in one format | Spoken or written, with questions in advance and no timer |
| Navigate job sites built for a mouse | Every page works by voice, with spoken replies |
| Hope a tool doesn't send something you didn't approve | Nothing is copied, opened, or sent until the candidate approves it |
🛠️ How we built it
The whole backend is Convex, self-hosted on our own Linux server with Docker and served over HTTPS. Claude reads listings, drafts requests, runs the interview, and powers the voice assistant. Cartesia is every voice in the app and every word it hears.
- Collect listings. We pull public postings from the Greenhouse and Lever board APIs for 25 curated employers into indexed Convex tables. A Convex cron can refresh them daily, and closed listings and old match requests are purged on a schedule.
- Find the route to ask. Rules scan each listing's HTML for an employer accommodation form or email. Claude (Haiku 5.5) extracts accommodation statements in batches, and every quote is checked against the source. If it isn't in the listing word for word, it's dropped.
- Build the profile. The candidate uploads a resume to Convex file storage, Claude extracts skills, and the file is deleted right after. Disability selections stay out of match requests, Claude prompts, and logs, and never affect ranking.
- Match. A deterministic scorer weighs skills 60%, role 30%, and location 10%, minus 25 points for each quoted conflict with a required accommodation. Form-bearing jobs sort first. Claude explains each match from the score factors only. Live
useQueryreads update the Jobs page without a refresh. - Draft the request. Claude (Sonnet 5.5) writes the request. If it names anything beyond the selected accommodations or uses a health term, a fixed template replaces it. Editing after approval resets the approval.
- Practice. Claude writes each interviewer line (about four questions, one follow-up each), and the server checks it before Cartesia
sonic-3.6speaks it with word timestamps for highlighting. Spoken answers go throughink-whisperinto an editable transcript, with auto-send off. Condition words are replaced with[removed]before Claude sees an answer, the conversation is never stored, and interviewer audio is deleted after 30 minutes. - Talk to the site. The voice button streams speech to Cartesia Ink 2 over WebSocket, with built-in end-of-turn detection. The page sends Claude its visible text and every control, and Claude streams back JSON steps over a Convex HTTP action, so the page acts before the reply finishes. Cartesia Sonic speaks the reply sentence by sentence over WebSocket. Anything consequential (approving or sending the email, opening the employer's site, marking applied) is only proposed, and needs the candidate's own "yes."
| Layer | Tools |
|---|---|
| Frontend | React · TypeScript · Vite · React Router · Atkinson Hyperlegible and OpenDyslexic fonts |
| Backend | Convex (self-hosted): schema and indexes, queries, mutations, actions, HTTP actions, crons, scheduled functions, file storage, live useQuery, Convex Auth |
| AI | Claude Haiku 5.5 (extraction, interviewer, voice assistant) and Sonnet 5.5 (drafts and explanations) |
| Voice | Cartesia Sonic sonic-3.6 (SSE and WebSocket TTS with word timestamps) · Ink 2 live STT · ink-whisper batch STT · 60-second access tokens |
| Scoring | Deterministic Python scorer, with a Convex fallback |
| Data | Greenhouse and Lever public job board APIs |
| Quality | Vitest · Playwright · axe-core · eslint-plugin-jsx-a11y |
| Hosting | Linux server · Docker Compose · nginx behind an HTTPS proxy |
Fallbacks: without Claude, drafts use a fixed template and practice uses a scripted question set, each with a notice. Without Cartesia speech, the browser's voice reads aloud ("Using your browser's voice"), and keyboard and mouse do everything voice does.
🧗 Challenges we ran into
- Voice that acts, not just transcribes. Keyword commands broke on natural speech, so we gave Claude the page's actual controls and let it choose. When a request is ambiguous, it guesses and asks ("Do you want flexible hours or remote work as preferred?") instead of saying it didn't understand.
- Speed. A spoken assistant feels broken if it pauses. We stream Claude's JSON as it's written, act on each finished step immediately, and speak each finished sentence through Cartesia's WebSocket.
- Keeping Claude grounded. An invented accommodation quote would mislead a candidate, so every extracted quote must match the listing verbatim or it's discarded.
- Keeping disability data out of the AI. Private selections live in their own table, private fields are never sent by the voice assistant, and known health terms are scrubbed before anything reaches Claude. Tests enforce this.
- Going live over HTTPS. Microphone access only works on secure pages, so we moved the self-hosted Convex backend and the app behind an HTTPS proxy on our own domain.
🏆 Accomplishments that we're proud of
- Tested with a real job seeker. After using the app, Michael's confidence asking for an accommodation went from 1 to 4 out of 5. He said being handed the employer's form and a prewritten email made asking much easier, and he valued that nothing was sent without his approval. That's one tester, not a study, but it's the barrier we set out to lower.
- A complete candidate journey, from finding a job to drafting the request to practicing for that role, usable entirely by voice.
- A live, open site at breakindifferent.com, so judges can try every sponsor feature without their own keys.
- Accessibility built in and tested: WCAG 2.2 AA is the target, and automated axe checks report 0 critical and 0 serious issues on all six pages in three display modes.
📚 What we learned
- Accessibility isn't a settings page. It's the whole design: voice everywhere, no timers, and choosing your own format.
- Grounding matters more than fluency. A verified quote from the employer builds more trust than any generated summary.
- The hardest part of asking for accommodations isn't writing the email. It's knowing who to ask and whether disclosing will cost you the job.
🚀 What's next for Break In Different
- Pilot with a campus disability resource center. Our headline metric is the share of candidates who actually send a request after drafting one, then how many get the format they asked for. We'll add opt-in, aggregate "Did you send it?" and "Was it granted?" check-ins. Disability data never feeds the metric.
- Partner with employers already running neurodiversity hiring programs, including federal contractors working toward Section 503 goals.
- Manual screen-reader passes with NVDA and VoiceOver, human review of extracted labels, email verification, and a privacy and legal review before real users.
🧩 For sponsor judges
Anthropic: Claude for Public Benefit
- Named community: early-career tech job seekers with disabilities, starting with neurodivergent candidates like Michael.
- Real problem: we interviewed Michael and tested the app with him. Asking for accommodations is a gamble (28% of neurodiversity accommodation requesters feared retaliation, and 1 in 5 were turned down), and interviews often measure format instead of skill.
- Working product, measured impact: the full flow runs live at breakindifferent.com. Our headline metric is the share of candidates who actually send a request after drafting one. In our first test, Michael's confidence asking went from 1 to 4 out of 5.
- Thoughtful use of Claude, in the product: Claude extracts accommodation language, explains matches, drafts requests, runs the practice interview, and turns speech into actions on any page.
- Thoughtful use of Claude, in development: we built with Claude Code. 35 of our 44 commits are co-authored by Claude, guided by a shared
CLAUDE.mdthat sets team ownership and the rules that must never break: no disability data in Claude prompts, and every quote verbatim. Tests enforce both. - Where it could go wrong, and our safeguards: Claude could misread a quote, write unsuitable wording, act on a misheard command, or receive sensitive details a candidate types or says. Quotes must match the source verbatim. Drafts that name a health term are replaced with a template. Consequential voice actions need the candidate's "yes." Health terms are removed before Claude sees practice answers or voice requests, and feedback never judges tone, pace, or accent. Free text can still describe a condition in other words, so the page says how answers are processed before practice starts.
Cartesia
- Voice is the core experience. Many of our users navigate more easily by voice, so every page works through it. Ink 2 live speech-to-text drives the voice button, with end-of-turn detection.
ink-whisperhandles hold-to-talk commands, email dictation, and spoken practice answers. Sonic voices the interviewer and reads listings aloud with word-by-word highlighting, and speaks the assistant's replies over WebSocket as Claude writes them. Claude decides what to do and say; Cartesia hears the candidate and gives the app its voice. - Edge cases handled: ambiguous requests get a spoken question instead of a wrong action, and consequential actions need a "yes." Spoken answers land in an editable transcript with auto-send off. "I need a moment" and Esc stop audio, and nothing moves on by itself. Without Cartesia speech, the browser's voice reads aloud.
- Accessibility, privacy, responsible use: no response timer, questions available in advance, and a listen-only mode. The API key stays in Convex, and the browser only gets 60-second access tokens. Interviewer audio is deleted after 30 minutes. Spoken audio reaches Cartesia before health terms are removed from the transcript, which the app discloses.
- Known limitations: voice input needs a Cartesia key, with no browser speech-recognition fallback. Dictation is limited to about a minute, read-aloud covers the first 1,500 characters of a job, and hourly per-user limits apply on the live site. English only.
Convex
- Convex is the entire backend, self-hosted with Docker: schema and indexes, queries, mutations, actions, HTTP actions, crons, scheduled functions, file storage, and Convex Auth.
- Jobs, Tracker, Email, Profile, Practice, and the accessibility settings read through
useQuery, so match results, application status, and saved preferences update without a refresh. - HTTP actions connect our Python scoring service and stream the voice assistant's replies. Scheduled functions run Claude extraction in batches and match explanations, and crons purge old data. If the scorer is down, a Convex mutation finishes the scoring.
- Evidence, files, and a dated commit log are in
hackathon.mdin the repo.
Microsoft: Built for the Real World
- Customer understanding: we designed around a real customer. We interviewed Michael and tested the app with him.
- Measurable usefulness: the send-after-draft metric, and Michael's confidence going from 1 to 4.
- Path to production: a campus disability resource center pilot, then employers with neurodiversity hiring programs.
- Responsible design: disability data is isolated, quotes are verified, the candidate approves everything, feedback never judges tone or eye contact, and "Delete all my data" removes every row.
Built With
- anthropic-api
- cartesia
- cartesia-ink
- cartesia-sonic
- claude
- claude-code
- convex
- convex-auth
- css3
- docker
- eslint
- javascript
- linux
- nginx
- node.js
- playwright
- python
- react
- react-router
- typescript
- vite
- vitest
- websockets
Log in or sign up for Devpost to join the conversation.