Inspiration

Everyone has their own path. The things that keep us up at night are never exactly the same, and the way out of them isn't either. So I kept wondering why a meditation app should hand everyone the same path.

That is where the name comes from. Patika is the Turkish word for a small footpath, the kind you find walking through a forest. Not a highway everyone shares, but a narrow trail that is yours.

The idea started with me. There were stretches where my mind simply would not stop at night, and I tried what most people try. I downloaded the popular meditation apps, followed a few courses, saved a lot of sessions I never came back to. Some of them were beautiful. None of them really knew what I was dealing with. I was choosing from a library of hundreds of titles, guessing which one fit, and a week later I could not tell whether anything had changed.

What I wanted was simple to describe: I tell the app what is going on, in my own words, and it gives me a concrete plan that is actually about me. A path with a beginning and an end. And at the end, an honest look at whether it helped.

I waited for that app for a while. Then I decided to build it myself.

What it does

You start by writing what is weighing on you, as short or as long as you like. You pick what it is closest to (sleep, anxiety, burnout, grief, a breakup, being hard on yourself, and a few more), when it tends to show up and how long you have been carrying it. A few short check-in questions record where you are starting from.

From that, Patika builds a 7, 14, 21 or 28 day path. Each day is one voice-guided audio session. The opening and closing speak to your situation, and the practice in between, like breath counting or a body scan, stays steady and proven. You get reminders at the hour you choose, and along the way and at the end the same check-in questions let you compare where you are with where you began.

Your first personal session is free. If it helps, one payment unlocks the rest of that path. There is no subscription and nothing renews.

How I built it

The app is native SwiftUI on iOS 26, with SwiftData for local state and an AVAudioEngine player that mixes two audio streams and schedules the silences between spoken parts on the device. The visual world is a set of hand-painted gouache forest scenes, one for each part of the journey, so the whole experience feels like walking the same trail.

The backend runs on Supabase: Postgres with row level security, storage for audio, and Deno edge functions for path generation, audio, purchases and account deletion.

The most important design decision was that the language model plans, it does not write the meditation. Gemini receives a short summary of what the user shared and returns a strict JSON plan. The building blocks of each session are an enum of pre-written, fixed practice scripts, so the model cannot invent a technique that does not exist. Personalization lives in the frame around the practice, not inside it.

Audio uses ElevenLabs eleven_v3. Roughly 70 percent of every session is shared, pre-rendered block audio that contains no personal data. Only the personal opening and closing are generated fresh. And they are generated just in time: during onboarding only the plan and the first step are produced, and every later step is prepared one day ahead.

Payments go through RevenueCat. Each path length is its own consumable product with its own offering and paywall. The paywall only appears after someone has listened to their first session all the way through, and a signed RevenueCat webhook, double checked against the RevenueCat API, grants access on the server to that one specific path. Prices follow the Netflix index per country, with a floor so that no purchase costs less than the audio it pays for.

Challenges

Cost. Text to speech turned out to be the vast majority of the cost of a path. Generating 28 days of personal audio up front would have been expensive and mostly wasted on people who stop early. Splitting audio into shared blocks and personal fragments, and generating only one day ahead, is what made one-time pricing possible at all.

Safety. People write very honest things into this app. Every free text answer goes through a crisis check, first on the device and again on the server, with the same phrase set and the same text normalization on both sides and a test that fails if they ever drift apart. If there is a signal, everything stops: no path, no purchase, just real phone numbers for the country you are in. Get support is always visible and never behind a payment.

Honest measurement. I did not want to use clinical scales or promise outcomes. I wrote my own short check-in instead, scored the same way on the device and on the server, and the end of a path shows one of three honest results rather than a success or failure badge.

Timing audio to breathing. Scenes and guidance follow a 10 second breath cycle rather than a clock, which sounds small but took a lot of iteration to feel natural.

What I learned

That the hardest part of personalization is deciding what not to personalize. Letting the model shape the words around a practice, but never the practice itself, made the app both more personal and more trustworthy.

I also learned how much a pricing model shapes a product. Choosing one payment for one path, instead of a subscription, pushed every other decision toward a program that actually ends.

What's next

Talking to real users, checking whether the check-ins really show change, and opening Patika to more languages, starting with Turkish.

Built With

  • claude
  • elevenlabs
  • posthog
  • revenuecat
  • supabase
  • swift
Share this project:

Updates

Submission history