Inspiration

I've meditated on and off for many years, and while I love all the introductory courses from a few meditation apps (specifically Sam Harris' introductory course on Waking Up), I found that over a longer period of time, these apps become a bit like content libraries, similar to a high-quality YouTube channel, and I get disinterested in the practice. Unlike many other apps (Duolingo, TikTok, etc.), many of the popular meditation apps require you to actually make the decision to go to the app and find the specific content you are looking for. I want Vigil to be different, where there is almost zero friction around guided meditations.

After messing around with the latest TTS models, I thought it would be a great idea to create a sort of personalized meditation teacher that knows what's important to you.

What it does

After onboarding, Vigil builds you a profile that it uses to make your first guided meditation, for exactly what you need. After starting a meditation, the app queues you up to unlock the next meditation, which happens the next day. In between, you can journal, either prompted or unprompted, change your profile, and change your intention, all of which feed back into the practice's design. You can also generate one additional, custom meditation each day for a specific scenario you are dealing with. Maybe you need help sleeping that night or want to try a walking meditation. Whatever it is, you can create it for just that moment you need.

How I built it

This is my 3rd Flutter app (the first one never launched and the second one is a B2B product), and was built with a pretty lean stack. I use NestJS for the backend, Supabase for the DB/Auth, Flutter for the app, Astro for the marketing website, and a variety of providers for the usage of LLMs.

Challenges we ran into

Wrangling an LLM to have the proper cadence, timing, and simple language was very difficult and where most of the work went. First, these LLMs love to equally distribute pauses in a Gaussian distribution, while most meditations follow a Pareto or log-normal distribution around pause timing. Second, they love to embellish words that ultimately become distracting to the listener. Third, they lack the context of timing, and notably rush through something that should otherwise be slow, such as a body scan or simple breath count exercise.

Accomplishments that we're proud of

I am very happy with how the app has turned out, and have used it daily to continually improve the harness of the system. I also feel like onboarding is very smooth, low friction, and well designed to help paywall views and conversion metrics. While it may be simple, everything feels cohesive and well designed, with no bugs as I begin to scale up my user base.

This was also my first solo project where I decoupled myself from the many bad backend practices I have engaged in in the past. While I still use Supabase, my design is highly portable, and when working locally, feels pretty close to being provider agnostic. I also got to get a lot better with NestJS in the process.

What I learned

LLMs still have a long way to go from simple text, to actually being able to write for the native ear, and for this task, the harness is more important than the individual model. To get it right, I had to use 3-4 individual LLM calls and 1 TTS pipeline per each meditation.

What's next for Vigil: Personal Meditations

I am working on meditation-bench-v1, a benchmark that compares AI-authored meditations with human-authored meditations. The benchmark takes about a dozen well-known, popular meditations from various teachers, and puts them head to head against different AI models that leverage the harness I built.

Built With

Share this project:

Updates

Submission history