Muesli

Granola cancelled my university Pro subscription, so I built my own.

01 / 06

Home and the drawer

The card at the top of Home changes depending on your calendar, so it tells you what's next and how many more meetings you've got today. Your upcoming meetings sit underneath, and you can start recording any of them from there. Your notes and settings are in a drawer that opens out of your profile picture. I spent a long time on this bit, and there's more on that further down.

Outcome

I use it pretty much every day.

Role
Designed and built solo
Timeline
On and off for about a year, then a two-week sprint on this version
Team
  • Solo (design and engineering)
Skills
  • Product Design
  • Motion Design
  • iOS Development
  • On-device AI

The Problem

Granola is a meeting notes app. It transcribes your calls and writes up the notes for you. I was using it on a university plan, and when that ended I had to decide whether to pay for Pro. Part of what put me off was that all of my meetings were living in the cloud. I don't only use it for work either. I use it for personal conversations as well, and I felt a bit uncomfortable having those sit on someone else's servers. So I decided to build my own, and make privacy the main constraint.

Overview

Muesli records a meeting, transcribes it while you talk and turns it into notes once you're done. All of that happens on the phone, with Apple Speech doing the transcription and Apple's Foundation Models writing the notes. Each note is saved as a Markdown file, so I can open them in Obsidian too. You can also chat with your notes from the home screen, or tap the waveform and ask them something out loud.

Personal Goals

  1. 01

    Keep it on my phone

    I wanted to see whether Apple's on-device models were good enough for something I'd actually use every day.

  2. 02

    Sweat the details

    It's a personal app and I'm the only user, but I still wanted it to feel as polished as something I'd make for a client. Knowing the user that well made it easier to be fussy.

02 / 06

Recording a meeting

Starting a meeting opens a sheet with the live transcript. You can swipe it away and keep using the app while it records, and it shows up in the Dynamic Island as well. When you finish, the page lifts up and a chin underneath it lets you know your notes are being written. You can tap it to open them once they're ready. I tried a normal toast first, but with everything already on the home page it just looked messy, so I put a layer underneath the page to work as a chin. I didn't come up with this one. Granola does it really well, so I lifted it. Imitation is the highest form of flattery and all that (don't sue me, Granola).

03 / 06

Chatting from Home

When you tap into the chat bar, the home cards move out of the way so you can ask about your meetings. If you want the answer to focus on one meeting, you can @mention it. The reply comes in on the same page, and the conversation gets saved with the rest of your notes.

04 / 06

Telling chats from meetings

Because chats are saved as notes, they ended up in the same list as meetings, and the two looked really similar. Chats were showing a weekday and a question mark where the attendee would usually go, which made them look like meetings with missing details. I fixed it with the avatar. Meetings show the initials of whoever you met with, and chats show a small speech bubble in the same spot.

05 / 06

Talking to your notes

This is my favourite part of the app. Tapping the waveform opens a tray where you can ask your notes something out loud, like "summarise my week", and it reads the answer back to you. Afterwards the conversation drops into the chat so you can carry on typing. The background is a Metal shader I first made for a project for my dad, and it's kind of where Muesli started. I'm really into shaders, especially the way refraction bends light, and I wanted to see if light could be a nice way of showing an AI listening and thinking.

06 / 06

Shader Lab

The shader has a lot of settings, and it starts looking a bit funny pretty quickly if you get them wrong. So I built a lab for tuning it. A synthetic voice keeps the shader moving while I change the settings live, and once it feels natural I copy the values back into the app.

Getting the drawer right

I wanted everything in the drawer to grow out of your profile picture as it opens. It took me seven attempts, so here’s my first go next to the one in the app.

First go
What’s in the app
tap

First go

The rows faded in where they already sat, timed off the drawer opening. Nothing in it actually moved, so it just looked like a box appearing.

What’s in the app

The rows grow out of the avatar and rise into place. Their fade has its own quick curve now, and each row has a slightly different spring so they land one after another.

There were five more versions in between. A few of them looked fine until I tried them on my phone, so I check motion on a real device now.

The icon

Muesli app icon — a hand-inked bowl of muesli drawn by Guy Parker-Rees

The bowl is an original commission. My dad, Guy Parker-Rees, illustrates children’s books for a living, and he drew this one for a fee of exactly nothing. In fairness, I built his website.

Under the hood

The first version sent the transcript to Groq, a cloud model, to tidy up the grammar before the notes were written. It worked well, but it meant the transcript left my phone every time I recorded something, which was the thing I was trying to avoid. I realised Apple’s on-device model could do the same cleanup, so I moved it over, and now Muesli doesn’t make any network calls.

Nothing crosses the line. Tap a step.

on the phone

then, same on-device model:

AskChatTalk

network

01A meetingon the phone

One tap to record. It only uses the mic.

SwiftUI
Built for iOS 26 and iPhone.
Apple Speech
Transcription stays on the device, in whichever language you pick.
Foundation Models
Writes the notes and answers your questions, all on the phone.
Storage
Notes are Markdown files in a folder on your phone, which can be an Obsidian vault.
Live Activity
Recordings show in the Dynamic Island and on the lock screen.
RefractShader
The Metal shader lives in its own Swift package.

Next steps

  • An MCP server

    I'd love to build an MCP server for it, so Claude can look through my meetings the way it can with Granola.

  • Opening it up

    Maybe one day I'll open it up for other people to use too.

Conclusion

It started as a way of not paying for a subscription, and now it's an app I use pretty much every day. It's really rewarding having something I designed and built actually living on my phone.