Reflection: My Year of Building with Raycast
Posted: Reading Time:I discovered Raycast while searching for a better alternative to Mac OS X's Spotlight. While keyboard shortcuts can be incredibly powerful, the default ⌘+space Spotlight command wasn't doing it for me. For years I used Alfred but found it challenging to maintain and customize lately. Then I found Raycast, whose out-of-the-box functionality immediately won me over. The real game-changer, though, was Raycast's ability to develop custom React extensions—that's when I knew I had found something special.
There was this one quote that I saw from one of the “What’s in my Raycast?” that really stuck with me:
"I hate friction. Friction can come in many different ways, in my personal workflow I want to be able to work at the speed of my thought.”
Extensions I built in 2024
After contributing to another developer's extension in late 2023 and realizing how great the developer experience was, I challenged myself to build one custom extension each month throughout 2024 to enhance my personal workflow.
Ideas for Raycast extensions came naturally from my daily habits. Whenever I found myself frequently visiting the same website or mobile app throughout the day, I knew I had found a perfect candidate for a new extension.
Bamboo HR - January
When I joined my organization, they used BambooHR to manage org charts, compensation cycles, and other HR functions. During meetings, new colleagues' names would come up, and I'd look them up in Bamboo to learn about their roles. While the browser interface worked, it contributed to tab overload and it interrupted my workflow. I wondered if I could create a faster solution in Raycast.
As it turned out, BambooHR offers an API that provides access to organizational data, including employee information and PTO calculations. I built several commands including Employee Search and Who's Out Today.
This became my first experience building something in Raycast specifically for my own workflow—and I was instantly hooked.
Oura Ring - February
I've always loved health trackers but never enjoyed wearing them on my wrist—I didn't want another screen to distract me throughout the day. When I got engaged, I took inspiration from Michael Bublé and wore an engagement ring along with my wife, but I made mine "smart" with the Oura ring.
I loved the data and insights but didn't want to pull out my phone every time I needed an update. After discovering Oura's developer portal and API, I recreated the mobile app's interface directly in Raycast. Now I have a pinned command for my Oura Summary that updates every 15 minutes, showing my Readiness, Activity, Sleep, and step count. I also built commands for Workout, Resilience, and more.
This was the first command I built that gained traction on Twitter. My shared referral code was quickly maxed out. If you're interested in getting an Oura ring, here's my latest referral link.
Storyblok - March
A major part of my day job involves building websites with Content Management Systems (CMS) for our clients. Storyblok, one of our favorite Platform-as-a-Service CMS options, lets you access multiple "spaces" from a single dashboard. When working with various clients and environments, we often juggle dozens of these spaces simultaneously.
Switching between spaces through the web interface was time-consuming and led to tab overload. I built a Raycast extension to quickly switch between spaces without touching my mouse. I also added features to search for users, content, assets, and more.
While I expected this extension to be a hit in the developer community, I'm still grateful for its small but dedicated group of power users.
Dungeons & Dragons - May
Like many others, the COVID-19 pandemic was extremely isolating for me. However, the best thing to emerge from that period was starting weekly virtual D&D sessions with my friend group. Though I was familiar with D&D and fantasy, many of the rules eluded me. Playing Baldur's Gate III helped the rules click into place. When I took over as DM for my group earlier this year, I realized just how much I still needed to learn about the rules and monsters.
I discovered a fan-run API for D&D 5th edition and saw an opportunity to build a helpful Raycast extension. I created features including a monster finder, rule/spell/mechanic lookups, dice rolling, and even AI-generated random encounters.
This command has become essential for our remote sessions. Now I'll never be caught off-guard wondering what an Ankheg is again.
Rabbit R1 - June
I was an early-bird purchaser of the Rabbit R1. In an attempt to make it more useful I built an extension to consume and interact with the data without needing to interact with the “Rabbit hole” web interface. This did not make it more useful.
Noun Project - September
My work alternates between heavy development—spending most days in an IDE—and presenting findings or strategy in documents and decks. For presentations, the Noun Project's icon library has been invaluable. While their web UI and mobile app are excellent, I wanted to reduce my open applications and copy icons without reaching for my mouse.
After exploring their API for icon queries and downloads, I created a simple "Search Icons" command. You can enter a keyword and choose a color (from a dropdown or hex code), and it displays icons in a grid. From there, you can download the icon, copy it to your clipboard, or even grab it as a React or Vue component.
I use this extension daily, and it seems others do too—it's become my most popular extension, reaching over 170 downloads in just 10 weeks. If you're a designer or frequently work on presentations, give this extension a try!
NHL - November
As soon as baseball ended, I immediately looked for something to fill that void. As a kid, I played hockey all the way through high school. I was a huge Flyers fan, but they’ve stunk pretty much since I graduated high school in 2009. However they’ve recently drafted a superstar out of Russia, Matvei Michkov. I started watching hockey again, and I found myself googling all the players since I virtually know none of the players anymore (besides Sidney Crosby, bleh). I thought it would be useful to build an extension to search for players so I could quickly get their background and stats.
Scope creep quickly took hold, and I eventually built out a few commands for daily scores, player search, standings, team rosters, and team calendars. This command made it so much easier to keep up with what was going on with the Flyers, as well as with the rest of the league. The NHL extension also returns data in French, so you know I added in custom translations! At the time of this writing, Raycast does not support translations like that so I was asked to take it out 🥲.
Contributions
Instead of trying to make net-new extensions, I found myself using existing extensions and wishing they had certain features. Luckily, Raycast allows contributions via pull requests.
Slack
A few months after I joined my organization, we were acquired and switched from BambooHR to a Salesforce solution that lacked an API. Missing the ability to look people up quickly, I searched for alternatives. I discovered that Raycast's existing Slack Command had an "Open Channel" feature that displays all DMs, open channels, and private channels. I realized I could enhance this command to show additional employee metadata from Slack—like titles, timezones, and locations. I submitted a PR with these improvements, and it was approved!
MLB Scores
I'm a huge baseball fan, particularly of the Philadelphia Phillies. Every September, the season reaches its peak with intense division and wildcard races. While checking MLB.com works, it's cluttered with ads and not very user-friendly. Fortunately, I discovered an existing MLB Scores extension with strong user adoption, so I decided to contribute to it rather than create my own.
I enhanced the extension with league standings, live scores, current pitcher-batter matchups, live batting stats, box scores, and more. Collaborating with the original developer, Jason, and seeing my contributions merged in was incredibly satisfying. Now, while watching baseball in the evening with my laptop open, I can effortlessly check what's happening around the league with just a few keystrokes.
Lessons Learned
While I fell short on building 12 extensions in 12 months, I did build 7 extensions and contribute to 2 other pretty big extensions. Besides learning that contributing to open source is hard work, I learned a few other things that I think made me a better engineer and all-around-idea-maker. I wrote a script that saved my install counts every night to a local database in Notion. I plotted those download counts on the chart below. Pretty cool to see that my extensions together have almost 600 active users.
Checklists on Checklists
When submitting a new extension to the Raycast code repository, you must complete several required steps before opening your pull request. These include ensuring commands build without errors and verifying all assets are properly used. While these are essential first steps, you'll want additional checks in your workflow before clicking that "create PR" button.
I learned this the hard way—several times I'd check all the boxes only to receive feedback from the Raycast team about something minor I'd missed. Though these were usually quick fixes, the time difference between the East Coast and Europe meant delays of several days for each review cycle.
Creating my own thorough acceptance checklist helped get submissions approved faster, reduced reviewers' workload, and got extensions into users' hands sooner.
Beta Testers
I used to keep my personal projects under wraps until launch day. There's something magical about revealing a finished product out of nowhere. But we've all been there—you release something you're proud of, only to have someone immediately point out a typo. It's deflating.
Now I embrace beta testing whenever possible. Sometimes it's as simple as getting feedback from my wife or friends, but I've found that asking targeted questions in the Raycast Slack attracts interested testers. Getting early feedback isn't just helpful—it builds excitement while you're still developing and creates an engaged user base from day one.
If you build it, they will come.
Well, not always. But if you build something you use every day, it's worth the effort. Among my ~120 installed extensions, two of my own creations are in my top 10 most-used. They exist because I put in the time and energy to create them, and I'm genuinely proud of that.
In summary
I don’t know that I will give myself a challenge of building 12 new extensions in 2025, but I will definitely continue to power my way through Raycast to reduce as much friction in my day to day work as possible. If you’re also a fan of Raycast, have an idea for an extension, or just want to say hi, you can always find me on Twitter and Bluesky!