To put some structure around my journey to become proficient as an Elixir/Phoenix developer, I am developing a URL shortener service. If you are familiar with Bitly, TinyURL, Google's defunct URL shortener service, or the automagic URL shortening performed by Twitter, you understand what I will be building.

I have summoned the full power of my branding genius to name this service: "Link Mojo" available soon-ish at https://LinkMojo.io.  

(Yes, I am bracing for the onslaught of press coverage and overwhelming traffic. Please don't post this to HN just yet.)

The Mojo Vision

There may not be a lot of ways to differentiate something as simple as a link shortener, but I don't operate in the box, so I'm going to try at least one twist on the basic idea.

The typical URL shortening scenario is something like this:

Input: https://embarassinglylongdomain.com/readers-lose-interest-before-getting-past-the-endless-url

Output: https://bit.ly/3qtMNlW

That "3qtMNlW" is the result of Bitly's algorithm to create a short URL that is unique to the "bit.ly" domain, and it does the job (although "3qtMNIW" is 8 characters--stretching the concept of "short").

Probably as a result, Bitly (and most of its competitors) have embraced the idea of "customizing" these links, so they look less random (and we forget how long they are getting):

My attempt here at this failed, because "JSH1" is already used in a "bit.ly" link.

This makes sense, but the user experience here isn't that great, because Bitly needs to compare my request against the billions of link values in their database to figure out if it is already used.

That means it doesn't happen instantly, so the user experience seems slow.

My twist on this idea is to create an auto-naming process to create short names that are "memorable"--at least more memorable than "3qtMNlW"--and better for SEO

My ultimate goal is to offer short (and available) URL suffixes that are decent search terms which are relevant to the content implied by the original URL name. This would be a premium option, so this might make some money. 

For a learning project, this is probably too ambitious, but let's see how far I get within my budget of time and patience.

But enough procrastination! Let's get on with it.