Tags as a Service

02/02/2020

"When there is a need in something, there is always a solution."

It started from building a web-site, the purpose of building the web-site is to have my own personal space and learn a few things along the way. I needed a place to be able to build and break fast and to document my thoughts.

Somewhere along the way I’ve found that it would be convenient if I could navigate through the related content on my site by clicking onto relevant keywords (tags). Additionally it would be neat if every piece of the content that I’d chose will have said keywords (tags) generated automatically. And this is how the idea of the “Tagify” was born.

Early days

Before building a full blown SaaS I needed a tool to be able to quickly evaluate the idea, so I’ve created the Tagify CLI.

Tagify CLI allowed to quickly play with the various approaches at the early days and assess how viable is the idea, the idea behind the CLI is simple - point to a source (URL, file or STDIN) and get the list of the relevant keywords (tags) from it.
For example, running following:

tagify -s https://stackoverflow

will yield something like this:

share developers knowledge careers build

It is open sourced, so feel free contribute if you feel like it or just send me a feature request if you have some ideas.

When the first working version of Tagify CLI was ready I’ve started with the dogfooding. Dogfooding in this particular case is exposing functionality of the Tagify CLI as an interactive playground UI.

Tagify Playground UI

As you can see, user can type an address into the text input click “Tagify” and get a list of relevant keywords (tags).

Working on the playground UI has led to implementing many of the core systems for the final product, such as upgrading Tagify CLI into the Tagify library (along with retaining CLI features), integrating new library into the micro-service, designing storage for the tags and exposing it all as a REST API.

Tagify Playground Diagram

Tagify

Once dogfoofing stage was ready I’ve figured that without defining an MVP’s (Minimum Viable Product) goals I won’t know when to stop. Therefore I’ve spent some needed time on picturing the product. The main principle is that it should be reasonably easy to setup on any arbitrary web-site, sort of the plug and play ideology, just put a <script> tag on any web-site and mark the content that needs to be taken care of and the Tagify will do it for you.

Tagify Playground Diagram

And these are the steps to achieve the goal of the MVP:
- expose an API that will return generated tags for the source (done on the dogfooding stage);
- call API from the web-site and render the keywords (tags) for the marked pieces of the content;
- expose an API to return relevant pages on the same web-site given the keyword (tag);
- render relevant pages for given keyword;
- expose an API to add/remove tags for admins;
- provide functionality for admins to be able to add/remove tags.

Requirement on the front-end component has led to the creation of Tagify JS, the API had to step up a notch to allow batching.

Tagify Diagram

This is how “Tagify” helps to aid with the navigation by tagging marked pages on any web-site:
Tagify Flow

What’s next?

At the moment “Tagify” (tags as a service) is free so you can try it yourself, just follow the guide in here to start generating keywords for the content on your web-site. Currently I’ll be using it myself for sure, it would be awesome if someone else finds it useful too (just hit me up on Twitter or via email).

I have tons of ideas for the next versions of Tagify, for example:
- better styling options;
- support more authentication options (currently it is only via Google’s identity);
- better authorization model;
- provide plugins for various CMS and market places in products;
- increase relevancy of generated tags;
- handle more content types;
- provide an admin panel with analytics for clicks, more visibility across tags/sites, access control policies for restricted content, more editing tools and etc.

So yeah, just let me know what do you think, I’d love to chat.

Thanks for staying with me, cheers! :)