Inspiration

While pitching monday.com to my team at TikTok as our platform of choice for our engineering and task management needs, a common question was asked by many — members of my team wanted to know if there was a way to easily search through the information stored in monday.com boards for more accessibility into company organization, operations, and culture. This is especially important for a company like TikTok since we are experiencing a rapid growth both externally, in terms of users and commercial activities, and also internally, with a huge surge in hiring and a rapid development of company culture.

Although, admittedly, I did not know if monday.com provided any search capabilities at all at that point, I was disappointed to find the cross board search that is available to users later. Not only does the search UI leave an immense scope to be improved, in terms of filtering data and parsing through the results quickly and efficiently, what bothered me more was the poor implementation of the search algorithm itself.

Therefore, armed with a dose of curiosity and a good amount of caffeine, I decided to work on developing a way to improve search for monday.com boards.

Problem

Currently, monday.com users can only search for exact keyword matches across boards. These leads to two problems —

💀 It is incredibly difficult to look for information that does not match a keyword

💀 The Search UI shows results from all tables, and filtering of data is not possible beyond a few select things

Solution

Super Search is inspired by the necessity to fill this much desired need. The solution to this problem is to build a search engine around boards that can —

💫 Let users look up information even when they don't know what they are looking for through natural language queries that account for context, spelling errors and much more

💫Provide an interface that makes it easy to parse through the returned results for quick access to data

What it does

Super Search lets you query for contextual information inside your monday.com boards and increases accessibility to any data you might have missed otherwise. This means that you can now look up information by asking questions in the search box and also use approximate keywords to perform searches through your board items! Here's an example: let us say you use a board to track tickets created by members of your team.

Highlighted Features

🧿Users can find answers hidden in their monday.com boards by asking rich text questions

🧿Users can also find information using fuzzy search texts when some or all keywords are not known

🧿Users can query information from boards for multiple keywords at a time

🧿Results can be filtered based on the board, groups or columns that need(s) to be searched

🧿Searches can be saved for future use, including the filters set on them

🧿 Historical searches can be viewed at any time in a quick and easy to understand layout

🧿More information about results, including the power to edit, can be accessed quickly and easily

🧿Autocomplete provides search suggestions from historical searches for faster search times

🧿Teammates can be notified if you are looking for something that they might have

🧿Search results, history and saved searches never leave the monday.com environment

🧿All information is securely stored in the monday.com cloud using the monday.com API/SDK

How I built it

The development of this application went through several stages — starting from familiarizing myself with monday.com, going through the API and SDK documentation, understanding the React framework, and converting Tensorflow models trained in a Python environment ready for Tensorflow.js.

Once I had finished reading documentation, I wanted to understand whether some of the problems I had faced with monday.com's Search Everything was a shared pain. Unsurprisingly, I found many users complaining about the native search functionality in the Community Forum. Here are a few examples —

User Complaints

When I had ascertained what the problem was, it was time to work on a solution. I began by fine-tuning a BERT Language Model on Semantic Question Answering Tasks (using the SQUAD dataset) and further changed parameters by using a Masked Language Model to account for tabular data. Then, I realized that my model far exceeded the capacity that a regular browser would be able to hold in memory. I decided to pivot away from using a custom model and decided to use a lightweight model out-of-box called MobileBERT.

Once model development was complete, it was time to assemble the pieces for the front-end in React. I used Alibaba's Ant Design React components (and added some of my own stylistic features to it) to give the search app an appearance that it was being run natively on monday.com.

Finally, I wrote code to link the machine learning model, the fuzzy searching library and the state changes needed to display results. I was also able to map raw responses to their item ID and call the following monday.com functions for added support:

monday.api()    // to fetch and mutate board, send notifications
monday.get()    // to fetch information stored in boards
monday.storage.instance.setItem()    // to store persistent data in monday.com cloud
monday.storage.instance.getItem()    // to fetch persistent data in monday.com cloud
monday.execute()    // to show messages, link to items directly from results

Once everything was ready, I did comprehensive testing to ensure the validity of the results being displayed by the search engine for many different queries.

Challenges I ran into

  1. ngrok rate limitations: Since I don't have a Pro account, I spent countless minutes just staring at the rate limitation message for the tunnel. It was quite an annoyance earlier in the development journey when I was saving changes quite often, but still made the whole development process a lot slower because of the dependence on tunneling.
  2. React Functional components: Since this was the first time I am developing in React, I was not quite sure how React Class Components interacted with React Functional Components. This was particularly awful while trying to think of what components get updated on mount, and which ones get updated later.
  3. Building the app for deployment: At the last step, as I was running my build commands, I realized that a certain implementation of the router functionality made it impossible for me to deploy the app directly by uploading. Instead, I used Heroku to deploy the final app version.

Accomplishments that I'm proud of

I am a Machine Learning engineer at heart, and therefore, learning React.js for the front-end application development, and doing machine learning inference on the client side using Tensorflow.js was particularly exciting for me. There are many things that I am proud of:

  1. Implementing the search algorithm exactly as I had envisioned it
  2. Integrating monday.com's SDK for behind the scenes action
  3. Creating an application that I think many users will benefit from
  4. Developing a user interface that is easy to understand and use
  5. Devoting a lot of time and effort to make a submission for the hackathon that looks and feels refined
  6. Using community.monday.com to my advantage

What I learned

The essence of a hackathon is defined by the things that you can learn from it. While doing this Hackathon, I learned quite a lot. Here were a few takeaways:

  1. Learned how to code in React.js and using Javascript
  2. Learned how to configure Tensorflow.js components
  3. Learned how to work with an external design library
  4. Learned how to use React hooks and pass in props to components
  5. Learned to work with monday.com's SDK and used multiple different functions to achieve information retrieval, mutation and notification flows
  6. Learned how to construct a serverless infrastructure for the monday.com Work OS

What's next for Super Search

  • More robust support for common queries: Improving accuracy and decreasing search latency for the most common questions by maintaining an index of the most common queries
  • Writing unit tests for the search algorithm: The search algorithm can and should be further tested to maintain determinism in the results, and ensure that the app doesn't break on user input.
  • Adding UI features: Several UI features can be added in the future
  • Integration with Monday.com's Search Everything feature: In an ideal world, I would love to work with monday.com's engineering team to integrate this project in the Search Everything feature space. I think that is a very exciting proposition for me and I'd love to see if we can find synergies in the future.
  • Open Source to Github: Since I do not want to monetize this app, I find it best to see if I can open source it for other developers to work on as well!

Built With

Share this project:

Updates

posted an update

For anyone from monday.com reading this: would love to keep working on this project to further make it into a more refined product. I previously worked at LinkedIn on search features as well, and it would be incredible to find the support I might need to keep this project maintained for future use!

Log in or sign up for Devpost to join the conversation.