Categorized Raycast Extensions

Are you using a Mac? Then Raycast would definitely improve your workflow. 

Why Raycast is great.

Raycast is a replacement for the native Spotlight search engine, which is available when you click `Cmd`+`Space`. With Raycast, you can access many functions with the keyboard. For example, you can:

  1. Control the layout of open windows
  2. Control Spotify, Apple Music or other audio players
  3. Have direct access to OpenAi
  4. Open recent VS Code projects
  5. Generate passwords
  6. and much, much more

Currently, there are more than 1,700 extensions for Raycast, only they are hard to find.

Why are Raycast extensions hard to find?

The extensions “store” page has no developed categorization system. On top of that, a single page displays only 10 extensions. All this causes a problem with finding the right extensions for a particular case.

Screenshot from the Raycast website

Where did I get the necessary data?

If I didn't have any manners I would just use web scraping and read the data directly from the Raycast site. However, for me such a solution was not an option. I preferred to have a solution that I could rely on and would not break any rules.

Repository on Github

After a very short research, I found a specific repository where Raycast collects information about available extensions.  I did a quick fork and cloned the entire repository to my computer. Then, using a simple script, I concatenated the `package.json` files from each extension into a single array. This way I had all the extension information I needed at my disposal. 

The categorization process

I used the OpenAI API for categorization. At first I used GPT-3.5-Turbo-0125, which provided controlled output in JSON format. Later, however, this option was added to the new models, and at the time of this writing, I am using GPT-4-turbo. 

Prompt

I had a hard time selecting a suitable prompt that would use only the categories I specified and not create Custom ones. Fortunately, after several attempts, the desired effect was achieved, although I feel there is still a chance for improvement. I just need to gain some more knowledge.

How did I automate the scripts?

To make my life easier, I created a simple workflow for my work, and now I do the whole thing with almost one script (I continue to automate in my spare time):

  1. First, I automatically synchronize the repository fork and do `git pull origin`.
  2. In the local repository with scripts, I create a folder for the current date.
  3. I copy the concatenated `package.json` files from the synchronized repository into this folder .
  4. I compare the file with the file from the previous date and find the new extensions .
  5. I fire up the script to generate the categories using OpenAI.
  6. Once I have a complete list of categorized extensions then I generate a Markdown file for the Readme.
  7. I copy the Readme file to my repository with the categorized extensions and publish the changes.

As soon as I have more time I will be happy to upload the whole thing to the server and automate the process completely.

My repository

Here you will find my repository with categorized Raycast extensions.