I wanted to build an app that would teach me about the mysteries of the rosary as I prayed them. Most rosary apps are basically prayer counters. I wanted something that would actually help me understand what I was meditating on, and if it could connect to whatever I was going through in my life, even better.
How It Works
Before you start praying, you share what’s on your mind. The app calls Anthropic API to generate five personalized meditations, one for each mystery, that connect your intention to Christ’s experience in that scene.

The system prompt focuses on keeping the tone contemplative:
TONE:
- Quiet, warm, present
- You are sitting with them in a dark chapel, not lecturing from a pulpit
- No exclamation points, no enthusiasm, no "spiritual cheerleading"
- No therapeutic language ("I hear you," "That's valid," "It's okay to feel...")
- Just presence. Just connection.

The State Machine
A rosary has a specific structure: opening prayers, five decades (each with an Our Father, ten Hail Marys, Glory Be, and Fatima Prayer), and closing prayers. I modeled this as a state machine:
enum RosaryPhase: Equatable {
case opening(OpeningPrayer)
case decade(Int)
case closing(ClosingPrayer)
case complete
}
enum DecadePrayer: Equatable {
case meditation
case ourFather
case hailMary(Int)
case gloryBe
case fatimaPrayer
case scripture
}
The advance() function handles all the transitions. When you tap, it knows exactly what comes next.
Haptics for Eyes-Closed Navigation
There’s a contradiction in building a contemplative prayer app for your phone. You want something thoughtful and meditative, but you’re also staring at a screen. I wanted to solve that.
The idea: distinct haptic patterns for different prayers so you can close your eyes and still know where you are. Core Haptics lets you compose patterns from transient events (quick taps) and continuous events (sustained rumbles):
/// Standard tap for regular Hail Mary beads
func hailMaryBead() {
playPattern(events: [
CHHapticEvent(
eventType: .hapticTransient,
parameters: [
CHHapticEventParameter(parameterID: .hapticIntensity, value: 0.6),
CHHapticEventParameter(parameterID: .hapticSharpness, value: 0.5)
],
relativeTime: 0
)
])
}
/// 5th Hail Mary - halfway marker, double-tap
func hailMaryMiddle() {
// Double tap pattern...
}
/// 10th Hail Mary - rising triple with sustained peak
func hailMaryTenth() {
// Rising crescendo pattern...
}
The fifth Hail Mary gets a double-tap so you know you’re halfway through the decade. The tenth gets a rising crescendo. The Our Father gets the strongest double-tap. Decade transitions get a long, unmistakable pattern.
After using it for a few weeks, I can pray an entire rosary without looking at the screen.
AI Memory
The app remembers what you share. After each session, Claude extracts meaningful details from your conversation and stores them. Future meditations can reference this context.

func extractMemories(from messages: [ReflectionMessage]) async throws -> [String] {
let extractionPrompt = """
Based on this reflection conversation, identify 0-3 things worth
remembering about this person for future prayer sessions. Focus on:
- Life circumstances that affect their prayer
- Ongoing struggles or joys they're processing
- Significant events or relationships mentioned
Be selective — only extract genuinely meaningful information...
"""
// ...
}

Architecture
The full stack:
- iOS App (Swift, SwiftUI, SwiftData)
- Cloudflare Worker — API proxy that holds the Anthropic key server-side, enforces model restrictions (Haiku only), and rate limits
- Next.js Dashboard — Analytics for sessions, meditation generation times, errors
- Astro Marketing Site — Landing page at memorare.app
The Cloudflare Worker pattern is worth noting. Instead of shipping an API key in the app bundle (bad idea), the Worker acts as a secure intermediary. The iOS app authenticates with a simple app secret, and the Worker handles the actual Claude calls.
What I Learned
This was my first iOS app. I learned SwiftUI, SwiftData, Core Haptics, and the App Store submission process from scratch. The whole thing was built with Opus 4.5 in Claude Code and GPT 5.2 Codex on xhigh in Codex.
Try It
Memorare is pending approval on the app store now. If you pray the rosary, I’d love to know what you think.