29 Dec 2025
YouChoose.One
A deep dive into a decision making tool created to solve a personal problem. Developed with NuxtJS with ease of use and keeping it simple a priority.
The Problem: Decision Paralysis
Have you ever spent way too long deciding what to eat for dinner, what movie to watch, or where to go on holiday? Decision fatigue is real.
One specific instance was during my wedding planning - my wife and I had to choose 4 appetizers out of a list of 20. Looking at the list as a whole felt impossible. But I knew of a technique where you take 2 random options at a time and pick your favourite. Repeat until you have a winner!
I searched online to find a handy tool to help me do this, but can you believe there isn’t one (at least readily available). So I did what any Software Engineer would do, and created the tool myself.
Design Philosophy: The Power of Binary Choice
The core of the app is built on a simple psychological principle: it is significantly easier to choose between two things than twenty.
The end product is very simple - enter a list of options, hit Go and pick your favourite out of the two randomly presented options. Choose between the next two and continue until you have your desired number of winners.
Ease of use and keeping it simple were top priorities. I wanted users to load the website and instinctively know what to do by giving them multiple forms of input (text entry or pasting a list) and either hitting enter after each entry or pressing the button (which also acts as a guide).
The user is also given a number of quick options at the bottom. One to determine the number of “winners” and the other to determine whether at each round the options should shuffle, or the last-chosen option should remain and only the “loser” shuffles.
Once the user hits ‘Go’, they’re presented with their first options in a 50/50 split of the page. This split reduces cognitive load and forces a binary decision. Importantly, this also works nicely on mobile with the options stacking on top of each other.
Technical Highlights
Saving the State in the URL
A key feature I wanted to implement was allowing users to share their lists with others. I still wanted to keep this project simple and so didn’t want to start spinning up databases to handle this and so I thought of a much easier method; saving the state in the URL.
If you go to the following link: https://www.youchoose.one/?state=N4Ig9iBcDaIKIFsEEMQBoQHkA2BLAbrqhgIL7EgDKYADgBZHogCSAzsgEYCm22FAsowwBhOsgBO2MABdpXJiQQ8hIABISaXcUzj4eATwB2IALoZjkAIwZWUEK2m4AxgGsQAXyA you will be presented with a ready-to-go list of baby names to choose from.
The URL Param ?state=N4Ig... is a compressed encoded URI of a stringified JSON of the list of options and the num. choices and stick/shuffle settings.
The package I used for compression was: lz-string.
A simple implementation:
const state = {
o: options.value,
n: finalChoices.value,
s: stickShuffle.value
}
const compressedState = lzstring.compressToEncodedURIComponent(
JSON.stringify(state)
);
Here is an interactive demonstration of this in action:
?state=N4Ig9iBcDaIAoEsBeSCGIA0IBCBXATgOYCm+mIAyqgDaoAmIAulgHZQCMWAzlAGY1diAXyADecompressing is just as easy:
const decodedState = lzstring.decompressFromEncodedURIComponent(state);
const { o, n, s } = JSON.parse(decodedState);
options.value = o;
numChoices.value = n;
stickShuffle.value = s;
Now users can easily share their lists with ease; no sign up, just copy and paste a link. It also enables me to provide some examples, which I found useful for my next section.
SEO - Adding Content (and Impressions) Through Examples
YouChoose.One has been published since the spring of 2025 but has always struggled with impressions on Search Engines.
SEO is a continuous learning experience for me, but one key moment that took my number of daily impressions from less than 10 to dozens more was by adding content. If you load the website and just look at the initial view, there isn’t much to read. It’s only when the user scrolls down do they see some more content, mainly through examples.
This not only creates a better experience for users who may just want to play with the tool before diving into their own list, but it also offers more keywords to be crawled by search engines and match them to more user searches.
I continue to try new things to improve my SEO in the hope that this tool is shown as the go-to website for user’s facing these problems. And honestly, this blog post is as another attempt.