You are browsing as a guest. Sign up (or log in) to start making projects!

pranay

@pranay

Joined June 1st, 2026

  • 6Devlogs
  • 3Projects
  • 1Ships
  • 15Votes
Ship Pending review

Hello everyone!

I built a Raycast extension built for FRC (FIRST Robotics Competition) programmers. It basically has a couple of commands for looking up documentation and converting common FRC-specific units right inside Raycast instead of having a bunch of tabs open to do the same thing.

If you haven’t used it, [Raycast](https://www.raycast.com/) is a super fast keyboard launcher app where you can search, run commands, and build little custom extensions that can be then be used really easily on your computer. FRC is a robotics competition where high school teams build and program robots to compete in a game that changes every year, and [WPILib](https://docs.wpilib.org/en/stable/index.html) is the software library most FRC teams use to write their robot's code.

### What The Extension Does

The extension has the following features: searchable WPILib Java and C++ documentation, a quick link to WPILib's status light reference page for decoding hardware indicator lights, and a unit converter for things like velocity, angular velocity, torque, and force that come up sometimes when writing robot code and just robot stuff in general.

Instead of scraping documentation webpages, the Java and C++ commands pull the same search index files that power each site's own search bar, parse them into something usable, and cache the results so repeat searches are instant rather than re-fetching every time.

### Roadblocks

Adding the Python documentation feature was a huge headache since the url I was pulling the search data from kept randomly blocking requests and instead sent a Cloudflare auth page (which is a good thing, I'm not saying human auth pages are bad), and nothing I tried got around it consistently. I eventually had to just cut the feature from the extension.

Aside from that, there was a lot of annoying bug hunting in the unit converter, you know the kind where you try and hit flies with your hands, but you simply can't move fast enough. Anyway, I also had to figure out how to use markdown (the detail panels in Raycast use markdown) and make it look good. That learning started as an annoying process due to markdown's limitations, but it actually became quite fun trying to work around those limitations.

### What I'm proud of

I'm most proud of the unit converter. Though the Java and C++ documentation search are more useful, I just had a really fun time mapping out the logic for the unit converter and actually coding it when compared to the documentation search features.

This is also the first time I’ve built something intended for other people to use. I’ve always coded random passion projects in my free time, but actually shipping something that's actually useful for other people is a huge first for me.

### Try it Out

The Try it Out button takes you to instructions that tell you how to install the extension. Sorry that the process is a hassle, but until Raycast approves the extension, this is the only way to share the project with people.

  • 5 devlogs
  • 10h
Try project → See source code →
Open comments for this post

1h 8m 1s logged

Devlog 05

Finished cleaning up the repo and wrote a temporary file explaining how to manually install the extension, then submitted it to Raycast for review.

Raycast’s review bot then caught a handful of bugs I hadn’t noticed. So, I fixed those bugs and pushed those changes. I also swapped the C++ documentation code out for code that safely parsing the data as plain JSON instead of using eval, so it only ever reads data and never executes anything. During that process, I also got a bunch of TypeScript errors due to not properly giving everything an object type.

The extension is now in Raycast’s review queue. Next up is just waiting on that, and addressing anything else reviewers flag. In the meanwhile, anyone that wants to try out the extension can manually install it using the Try it Out link.

Devlog 05

Finished cleaning up the repo and wrote a temporary file explaining how to manually install the extension, then submitted it to Raycast for review.

Raycast’s review bot then caught a handful of bugs I hadn’t noticed. So, I fixed those bugs and pushed those changes. I also swapped the C++ documentation code out for code that safely parsing the data as plain JSON instead of using eval, so it only ever reads data and never executes anything. During that process, I also got a bunch of TypeScript errors due to not properly giving everything an object type.

The extension is now in Raycast’s review queue. Next up is just waiting on that, and addressing anything else reviewers flag. In the meanwhile, anyone that wants to try out the extension can manually install it using the Try it Out link.

Replying to @pranay

0
4
Open comments for this post

1h 49m 34s logged

Devlog 04

The Python documentation feature turned out to be very annoying. The search index url I am using to fetch the documentation was being way too inconsistent. Half the time, it gave the data and half the time, it gave back a Cloudflare auth page. So I decided to drop that feature entirely. Here is the search index url I was using in case anyone knows how to get past the auth page: https://robotpy.readthedocs.io/projects/robotpy/en/stable/searchindex.js. The screenshot shows what is supposed to fetched from this url.

I also built a feature to look up status indicator lights for various FRC hardware components, but realized there’s already a single webpage that has all of this information laid out well. So instead of rebuilding that information inside the extension, the feature now just opens that webpage directly.

Next up, I’m going to finish tidying up the repo, write a temporary instructions file explaining how to manually install the extension (since it isn’t live yet), and submit it to Raycast for review so it can be officially published.

Devlog 04

The Python documentation feature turned out to be very annoying. The search index url I am using to fetch the documentation was being way too inconsistent. Half the time, it gave the data and half the time, it gave back a Cloudflare auth page. So I decided to drop that feature entirely. Here is the search index url I was using in case anyone knows how to get past the auth page: https://robotpy.readthedocs.io/projects/robotpy/en/stable/searchindex.js. The screenshot shows what is supposed to fetched from this url.

I also built a feature to look up status indicator lights for various FRC hardware components, but realized there’s already a single webpage that has all of this information laid out well. So instead of rebuilding that information inside the extension, the feature now just opens that webpage directly.

Next up, I’m going to finish tidying up the repo, write a temporary instructions file explaining how to manually install the extension (since it isn’t live yet), and submit it to Raycast for review so it can be officially published.

Replying to @pranay

0
7
Open comments for this post

2h 44m 32s logged

Devlog 03

I improved how the extension fetches the Java documentation. Instead of fetching 600 something URLs (one for each class in the WPILib library), it now only fetches one search index URL.

I also got the C++ documentation lookup feature working. Unfortunately, the C++ documentation’s search data doesn’t include as much detail as the Java one. It doesn’t tell you what functions each class has, so the C++ results are a bit more bare-bones for now. You can see what it looks like in the attached screenshot.

I’m currently working on adding Python documentation support. It’s been a bit annoying since the search index URL for the Python docs sometimes is sending HTML instead of javascript. Once I get that fixed, I can finally get to the motor/sensor lookup feature.

Devlog 03

I improved how the extension fetches the Java documentation. Instead of fetching 600 something URLs (one for each class in the WPILib library), it now only fetches one search index URL.

I also got the C++ documentation lookup feature working. Unfortunately, the C++ documentation’s search data doesn’t include as much detail as the Java one. It doesn’t tell you what functions each class has, so the C++ results are a bit more bare-bones for now. You can see what it looks like in the attached screenshot.

I’m currently working on adding Python documentation support. It’s been a bit annoying since the search index URL for the Python docs sometimes is sending HTML instead of javascript. Once I get that fixed, I can finally get to the motor/sensor lookup feature.

Replying to @pranay

0
7
Open comments for this post

3h 13m 43s logged

Devlog 1 (8 hours left)

Game idea: a game where players draw wet ink paths to guide origami pieces from printers to demanding shredders before the shredders destroy the page. To succeed, players must manage traffic to prevent expanding ink lines from cutting the paper and direct origami pieces to break random ink cartridges for more ink resources.

This game is for a game jam that started Wednesday and is due at the end of the day. I only had time to work on it yesterday. Today, I have all of today, but we’ll see if I can finish in time.

So far, the player can draw ink (the blue line below) and printers (the white boxes) spawn in randomly every ten seconds.

Devlog 1 (8 hours left)

Game idea: a game where players draw wet ink paths to guide origami pieces from printers to demanding shredders before the shredders destroy the page. To succeed, players must manage traffic to prevent expanding ink lines from cutting the paper and direct origami pieces to break random ink cartridges for more ink resources.

This game is for a game jam that started Wednesday and is due at the end of the day. I only had time to work on it yesterday. Today, I have all of today, but we’ll see if I can finish in time.

So far, the player can draw ink (the blue line below) and printers (the white boxes) spawn in randomly every ten seconds.

Replying to @pranay

0
11
Open comments for this post

3h 7m 28s logged

Devlog 02

The extension can now fetch the Java WPILib (the library mainly used in FRC) documentation and display all the classes and methods in the library. Once you fetch the documentation (takes ~one minute), you only have to fetch it again when you want to update what you have cached.

Tomorrow’s plans are to show descriptions of classes, show descriptions of methods, and add either Python or C++ WPILib documentation.

Devlog 02

The extension can now fetch the Java WPILib (the library mainly used in FRC) documentation and display all the classes and methods in the library. Once you fetch the documentation (takes ~one minute), you only have to fetch it again when you want to update what you have cached.

Tomorrow’s plans are to show descriptions of classes, show descriptions of methods, and add either Python or C++ WPILib documentation.

Replying to @pranay

0
37
Open comments for this post

45m 39s logged

Devlog 01

As of right now, the unit converter (the command in the video) is the only part of the extension that is completely done. Most of the unit converter was done last week. Today, I added the action menu so that you can copy the answer and quickly put it in the search bar.

In the future, I plan on adding a WPILib (the main library used for First Robotics Competition coding) documentation viewer, a motor/sensor status lookup, and a robot status monitor (that would be in the menu bar).

Posting this early the development in order to get some feedback.

Devlog 01

As of right now, the unit converter (the command in the video) is the only part of the extension that is completely done. Most of the unit converter was done last week. Today, I added the action menu so that you can copy the answer and quickly put it in the search bar.

In the future, I plan on adding a WPILib (the main library used for First Robotics Competition coding) documentation viewer, a motor/sensor status lookup, and a robot status monitor (that would be in the menu bar).

Posting this early the development in order to get some feedback.

Replying to @pranay

0
7

Followers

Loading…