Inspiration

Sometimes you want to pray but can't find the first words. Carried is for that moment. You start with what is really on your heart, in your own words, and end with a prayer you can pray and make your own.

What it does

Carried is a Christian prayer app for iPhone (iOS 26 or later).

  1. Speak or type. Say what is on your mind, or type it. Speech is transcribed on the iPhone.
  2. Check your words. Read your reflection back and change anything that doesn't sound like you.
  3. Choose to share. Before your words are sent, a permission screen names where they go: Carried's service on Cloudflare, then OpenRouter and OpenAI. You can say "Not now".
  4. Pray. AI (GPT-5.6 Luna) writes a Christian prayer from that one reflection. Read slowly, change your words if needed, then finish with Amen or continue without it. After Amen, a quiet closing screen shows Psalm 46:1 (World English Bible).

There is no account, journal, saved-prayer library or streak. Each prayer starts fresh. Carried helps with words. It is not a message from God and not a replacement for personal prayer, a pastor or a church community.

Free and paid

  • Your first prayer is free, with no account and no code.
  • After it, a subscription unlocks more prayers: Annual $49.99/year (selected by default) or Monthly $6.99/month. These are US prices; other countries see local prices. Both plans give the same access.
  • No free trial and no weekly plan. The free prayer is the demo: people read a prayer written from their own words before they are asked to pay.
  • Every prayer is a paid AI call, so free use has to stay small. After one free prayer, the subscription pays for more.

How I built it

  • App: SwiftUI and The Composable Architecture, split into Tuist modules, with a scenario gallery and snapshot tests in light, dark and large text.
  • Speech: Apple's SpeechAnalyzer and SpeechTranscriber (iOS 26), on the device.
  • RevenueCat: a custom SwiftUI paywall driven by a RevenueCat offering. Before showing prices, the app checks that the offering has exactly the expected annual and monthly products, with the right periods and no introductory offer. RevenueCat handles purchase, restore and the membership entitlement, and the app reads grace periods, billing issues and refunds from it.
  • Prayer service: a Cloudflare Worker with D1, in TypeScript, that calls GPT-5.6 Luna through OpenRouter. The app holds no AI provider key. Prayer requests are signed with App Attest, and paid prayers need a verified StoreKit 2 subscription transaction, so the server does not trust a flag sent by the app.

Challenges and lessons

  • Handling private words with care. People bring worries and people they love. Each prayer uses one reviewed reflection, the permission step names every service the words pass through, and no prayer history is kept. Being honest also meant not promising zero retention: the permission screen says OpenAI keeps the text for a time.
  • A fair free prayer without accounts. The server checks the free First Prayer and paid access with App Attest and StoreKit, not just the app.
  • Calm, but clear about money. Before anyone starts, the welcome screen says the first prayer is free and a subscription follows. The offer says "No free trial. Auto-renews until canceled."

What's next

  • Usage events that carry none of your words, and Apple Ads attribution through RevenueCat. Both are built but not released yet.
  • A small Apple Ads test on searches about writing a prayer, judged by cost per first purchase.

Built With

  • app-attest
  • cloudflare-d1
  • cloudflare-workers
  • composable-architecture
  • openai
  • openrouter
  • revenuecat
  • speechanalyzer
  • storekit
  • swift
  • swiftui
  • tuist
  • typescript
Share this project:

Updates

Submission history