Here is your complete hackathon submission story, formatted perfectly in Markdown and broken down into the exact sections you need.
Inspiration
We’ve all been there—staring at a massive backlog of tickets or to-dos, feeling completely paralyzed by the sheer volume, and somehow ending up scrolling social media instead. Traditional productivity tools just let you hoard tasks, which actually makes the cognitive load worse.
I wanted to lean into radical simplicity. The idea behind Anti-Dither is that to break long-term procrastination, you sometimes need an application to introduce a short, intense burst of forced friction. I wanted to build an experience that steps in, takes the wheel, and aggressively moves a user from anxious indecision into locked-in focus.
What it does
Anti-Dither is a high-friction decision engine that breaks overthinking patterns in under 30 seconds. Instead of a list, you input exactly two competing tasks. The app immediately takes control, putting you through a rapid-fire diagnostic of absolute binary questions (e.g., "Which task causes more underlying guilt?").
Once you answer, the app handles the cognitive load, isolates the winning task, and actively calms you down using a rhythmic visual interface. Then, it completely locks down the screen with a strict 20-minute countdown timer. All other options are hidden. You cannot back out, renegotiate, or dither. You just work.
How we built it
I spun this up on medo.dev to prototype it quickly. To keep it lightning-fast and ensure it ran flawlessly on the free tier, I completely bypassed heavy backend databases. The core engine relies on pure vanilla JavaScript, HTML, and CSS to handle a strict client-side state machine.
Under the hood, the diagnostic phase mathematically weighs your rapid-fire answers. To prevent endless ties and ensure a definitive winner, the scoring engine calculates the probability of selecting a task using a simplified softmax function (where $S_A$ and $S_B$ are your raw scores, and $\beta$ is a tuned weight for determinism):
$$P(\text{Task A}) = \frac{e^{\beta \cdot S_A}}{e^{\beta \cdot S_A} + e^{\beta \cdot S_B}}$$
If your gut reactions lean toward one task, the math locks it in. If you're truly split down the middle, it forces a clean, semi-randomized tie-breaker so you are never left hanging.
Challenges we ran into
The trickiest part wasn't the code—it was the psychology of the UX flow. The interrogation phase is explicitly designed to be jarring; the harsh contrast intentionally induces stress to force a fast answer.
But dropping a user straight from that chaos into a locked countdown timer felt hostile. I had to make sure the user didn't feel neglected or abandoned while the system "calculated" their choice. I spent a significant amount of time fine-tuning a custom CSS breathe keyframe animation. Getting the timing and scale expansion exactly right was critical so that it acted as a digital palate cleanser, actively de-escalating the user's stress before the timer started.
Accomplishments that we're proud of
I am incredibly proud of proving that you don't need complex server logic to solve deep behavioral problems. By utilizing smart frontend state management, I was able to build a tool that delivers massive psychological impact entirely in one sitting. Getting the precise UI pacing right—balancing high friction with ultimate psychological comfort—was a huge win.
What we learned
This project reinforced that UI design is ultimately about managing psychological comfort. You can actively manipulate how someone feels—taking them from high-stress choice paralysis to a calm, rhythmic focus—just by pacing the interface correctly. I also learned the immense power of constraints; skipping the backend forced me to get highly creative with client-side execution.
What's next for Anti-Dither
The immediate next step is expanding this into a fully responsive mobile application, allowing users to break out of choice paralysis on the go.
I also plan to introduce a strict "Terms of Service" logic gate right before the countdown begins. Instead of a standard checkbox, the user will have to actively type out a micro-agreement binding themselves to the 20-minute focus window, adding one final layer of undeniable psychological commitment before the screen locks.
Built With
- css3
- html5
- javascript
- medo
- web-timing-apis
Log in or sign up for Devpost to join the conversation.