John Voorhees

5171 posts on MacStories since November 2015

John is MacStories' Managing Editor, has been writing about Apple and apps since joining the team in 2015, and today, runs the site alongside Federico. John also co-hosts four MacStories podcasts: AppStories, which covers the world of apps, MacStories Unwind, which explores the fun differences between American and Italian culture and recommends media to listeners, Ruminate, a show about the weird web and unusual snacks, and NPC: Next Portable Console, a show about the games we take with us.

This Week's Sponsor:

SoundSource

New Year, New Audio Setup: SoundSource 6 from Rogue Amoeba


The Iconfactory Launches Kickstarter to Expand Ollie’s Arcade with Frenzic

Ollie’s Arcade was launched in 2023 by The Iconfactory with three mini-games reminiscent of beloved classic videogames. Today, the company launched a Kickstarter campaign with the goal of raising $20,000. If reached, The Iconfactory will make Ollie’s Arcade free and bring its game Frenzic to the bundle. Frenzic was one of the earliest iOS game and a fan favorite that was later adapted for Apple Arcade, but has since left Apple’s subscription gaming service.

The Ollie’s Arcade campaign is about more than just its games though. As The Iconfactory explains:

From a bigger perspective the Kickstarter is yet another way we’re trying to sustain ourselves and keep the Iconfactory up and running. We all know times are tough, especially for small, non-investor driven businesses like ours. We’ve struggled to pay our salaries, keep up with the rising cost of health care and to compete against the onslaught of AI driven design solutions. The new KS won’t be enough to solve all our revenue problems, but it will help give us runway to keep the lights on while we find new ways to stick around and serve you. The more we raise now, the longer and safer that runway gets.

The Iconfactory has a long and stories history since it was founding in 1996. Since then they’ve produced some of the most thoughtfully designed apps and icons around. The Iconfactory isn’t the only company whose business has been hurt by generative AI, but I sincerely hope it isn’t one of the fatalities too. Check out the Kickstarter campaign and chip in to help them and make some great games free for everyone. And while you’re at it, don’t miss all the other great apps they have on the App Store like Tapestry, Tot, Triode, xScope, and many other.


A Very ‘Just Build It’ Holiday

This week, Federico and John complete their tour of holiday projects with a look at the tools both of them built with the help of Claude Code, Codex, and other tools.

On AppStories+, John pushes Claude Code by building a Safari web extension that integrates with Notion.


We deliver AppStories+ to subscribers with bonus content, ad-free, and at a high bitrate early every week.

To learn more about an AppStories+ subscription, visit our Plans page, or read the AppStories+ FAQ.


AppStories+ Deeper into the world of apps

AppStories Episode 468 - A Very ‘Just Build It’ Holiday

0:00
42:35

AppStories+ Deeper into the world of apps

Read more


Using PopClip Extensions to Get Started with Claude Code

On the next episode of AppStories, Federico and I will wrap up our discussion of what we built over the holidays. With the “what” out of the way, we’re planning on talking about the “how” and the implications tools like Codex and Claude Code have for app development in general. However, I’m impatient, so I...


App Debuts

Bullseye Adam Foot, the maker of popular TV remote control app TV Remote, is back with a developer-focused app for tracking your Apple Ads campaigns. I had a chance to play with Bullseye during the beta period using test data, and it’s very well done. The app takes the data provided by Apple and...


How I Used Claude to Build a Transcription Bot that Learns From Its Mistakes

Step 1: Transcribe with parakeet-mlx.

Step 1: Transcribe with parakeet-mlx.

[Update: Due to the way parakeet-mlx handles transcript timeline synchronization, which can result in caption timing issues, this workflow has been reverted to use the Apple Speech framework. Otherwise, the workflow remains the same as described below.]

When I started transcribing AppStories and MacStories Unwind three years ago, I had wanted to do so for years, but the tools at the time were either too inaccurate or too expensive. That turned a corner with OpenAI’s Whisper, an open-source speech-to-text model that blew away other readily available options.

Still, the results weren’t good enough to publish those transcripts anywhere. Instead, I kept them as text-searchable archives to make it easier to find and link to old episodes.

Since then, a cottage industry of apps has arisen around Whisper transcription. Some of those tools do a very good job with what is now an aging model, but I have never been satisfied with their accuracy or speed. However, when we began publishing our podcasts as videos, I knew it was finally time to start generating transcripts because as inaccurate as Whisper is, YouTube’s automatically generated transcripts are far worse.

VidCap in action.

VidCap in action.

My first stab at video transcription was to use apps like VidCap and MacWhisper. After a transcript was generated, I’d run it through MassReplaceIt, a Mac app that lets you create and apply a huge dictionary of spelling corrections using a bulk find-and-replace operation. As I found errors in AI transcriptions by manually skimming them, I’d add those corrections to my dictionary. As a result, the transcriptions improved over time, but it was a cumbersome process that relied on me spotting errors, and I didn’t have time to do more than scan through each transcript quickly.

That’s why I was so enthusiastic about the speech APIs that Apple introduced last year at WWDC. The accuracy wasn’t any better than Whisper, and in some circumstances it was worse, but it was fast, which I appreciate given the many steps needed to get a YouTube video published.

The process was sped up considerably when Claude Skills were released. A skill can combine a script with instructions to create a hybrid automation with both the deterministic outcome of scripting and the fuzzy analysis of LLMs.

Transcribing with yap.

Transcribing with yap.

I’d run yap, a command line tool that I used to transcribe videos with Apple’s speech-to-text framework. Next, I’d open the Claude app, attach the resulting transcript, and run a skill that would run the script, replacing known spelling errors. Then, Claude would analyze the text against its knowledge base, looking for other likely misspellings. When it found one, Claude would reply with some textual context, asking if the proposed change should be made. After I responded, Claude would further improve my transcript, and I’d tell Claude which of its suggestions to add to the script’s dictionary, helping improve the results a little each time I used the skill.

Over the holidays, I refined my skill further and moved it from the Claude app to the Terminal. The first change was to move to parakeet-mlx, an Apple silicon-optimized version of NVIDIA’s Parakeet model that was released last summer. Parakeet isn’t as fast as Apple’s speech APIs, but it’s more accurate, and crucially, its mistakes are closer to the right answers phonetically than the ones made by Apple’s tools. Consequently, Claude is more likely to find mistakes that aren’t in my dictionary of misspellings in its final review.

Managing the built-in corrections dictionary.

Managing the built-in corrections dictionary.

With Claude Opus 4.5’s assistance, I rebuilt the Python script at the heart of my Claude skill to run videos through parakeet-mlx, saving the results as either a .srt or .txt file (or both) in the same location as the original file but prepended with “CLEANED TRANSCRIPT.” Because Claude Code can run scripts and access local files from Terminal, the transition to the final fuzzy pass for errors is seamless. Claude asks permission to access the cleaned transcript file that the script creates and then generates a report with suggested changes.

A list of obscure words Claude suggested changing. Every one was correct.

A list of obscure words Claude suggested changing. Every one was correct.

The last step is for me to confirm which suggested changes should be made and which should be added to the dictionary of corrections. The whole process takes just a couple of minutes, and it’s worth the effort. For the last episode of AppStories, the script found and corrected 27 errors, many of which were misspellings of our names, our podcasts, and MacStories. The final pass by Claude managed to catch seven more issues, including everything from a misspelling of the band name Deftones to Susvara, a model of headphones, and Bazzite, an open-source SteamOS project. Those are far from everyday words, but now, their misspellings are not only fixed in the latest episode of AppStories, they’re in the dictionary where those words will always be corrected whether Claude’s analysis catches them or not.

Claude even figured out "goti" was a reference to GOTY (Game of the Year).

Claude even figured out “goti” was a reference to GOTY (Game of the Year).

I’ve used this same pattern over and over again. I have Claude build me a reliable, deterministic script that helps me work more efficiently; then, I layer in a bit of generative analysis to improve the script in ways that would be impossible or incredibly complex to code deterministically. Here, that generative “extra” looks for spelling errors. Elsewhere, I use it to do things like rank items in a database based on a natural language prompt. It’s an additional pass that elevates the performance of the workflow beyond what was possible when I was using a find-and-replace app and later a simple dictionary check that I manually added items to. The idea behind my transcription cleanup workflow has been the same since the beginning, but boy, have the tools improved the results since I first used Whisper three years ago.


Apple Confirms AI Partnership with Google

Apple has confirmed to CNBC that it has entered into a multi-year partnership with Google to use the search giant’s models and cloud technology for its own AI efforts. According to an unnamed Apple spokesperson:

After careful evaluation, we determined that Google’s technology provides the most capable foundation for Apple Foundation Models and we’re excited about the innovative new experiences it will unlock for our users.

The report still leaves many questions unanswered, including how Gemini fits in with Apple’s own Foundation Models and whether and to what extent Apple will rely on Google hardware. However, after months of speculation and reports from Mark Gurman at Bloomberg that Apple and Google were negotiating, it looks like we’re on the cusp of Apple’s AI strategy coming into better focus.


UPDATE:

Subsequent to the statement made by Apple to CNBC, Apple and Google released a slightly more detailed joint statement that Google published on X:

Apple and Google have entered into a multi-year collaboration under which the next generation of Apple Foundation Models will be based on Google’s Gemini models and cloud technology. These models will help power future Apple Intelligence features, including a more personalized Siri coming this year.

After careful evaluation, Apple determined that Google’s Al technology provides the most capable foundation for Apple Foundation Models and is excited about the innovative new experiences it will unlock for Apple users. Apple Intelligence will continue to run on Apple devices and Private Cloud Compute, while maintaining Apple’s industry-leading privacy standards.

So, while the Apple Foundation Models that power Apple Intelligence will be based on Gemini and unspecified cloud technology, Apple Intelligence features themselves, including more personalized Siri, will continue to run locally on Apple devices and on Apple’s Private Cloud Compute to maintain user privacy.


A Very Nerdy Holiday Break

This week, Federico and John are back from their holiday break, included so many hardware and automation projects that this is part one of a two-part episode regarding Federico’s networked music automation setup and John’s new research tool.

On AppStories+, Federico shares his foldable phone experiments.


We deliver AppStories+ to subscribers with bonus content, ad-free, and at a high bitrate early every week.

To learn more about an AppStories+ subscription, visit our Plans page, or read the AppStories+ FAQ.


AppStories+ Deeper into the world of apps

AppStories Episode 467 - A Very Nerdy Holiday Break

0:00
47:53

AppStories+ Deeper into the world of apps

This episode is sponsored by:

Read more


App Debuts

OmniOutliner 6 This week, The Omni Group released OmniOutliner 6, a big update to their outlining app for Mac, iPhone, iPad, and Vision Pro. With this release, OmniOutliner is now a universal purchase, meaning one payment buys you the app on each of the Apple platforms they support. There are two versions: Essentials, which...


How iTunes Shaped the Apple of Today

25 years ago, Apple introduced iTunes, an app for managing your digital music collection that evolved into a media jack-of-all-trades in the years that followed. It’s hard to overstate iTunes’ importance to today’s Apple, even though it’s been years since the app last existed on any of its hardware. iTunes’ story is a reflection of...