Skip to main content

The Gap

Prayer is the most universal spiritual practice on earth. Billions do it daily across every faith tradition. But it is almost entirely invisible. You cannot see who is praying for you. You cannot know that someone across the world just lifted your name. The whole practice exists in isolation.

PrayerMap was born from a simple question: what if you could make the invisible visible? What if prayer had a real-time map, and you could watch connection lines form between strangers across oceans? Not a social media play. Not monetization. A pure non-profit ministry tool.

What started as that question became a 6-platform application with augmented reality, real-time voice channels, a native Apple Watch companion app, and a 6-dashboard admin command center.

Built for Every Screen

Live

iOS

App Store, Build 148

Release 1.0.5

iPadOS

iPad Pro optimized

Release 1.0.5

macOS

Mac Catalyst

Live

watchOS

Native SwiftUI

Built

Android

Awaiting Testing

Live

Web

prayermap.net

The Living Map

Living Map view 1
Living Map view 2
Living Map view 3
Living Map view 4

iPad

PrayerMap iPad - Screen 1
PrayerMap iPad - Screen 2
PrayerMap iPad - Screen 3
PrayerMap iPad - Screen 4

What It Does

The Living Map

Real-time global prayer map on Mapbox GL (SDK 11.16.2). Prayer requests appear as glowing nodes. When someone prays for a request, a Memorial Connection Line animates between the two locations at 60fps using react-native-reanimated, persisting for one year.

The map breathes. It shows you that you are not alone.

Mapbox GLPostGISreact-native-reanimated60fps animations

AR Prayer Vision

Point your phone at the world and see prayer requests floating in 3D space. Uses ViroReact to place geo-anchored prayer objects at their real-world GPS coordinates. Compass-aware, GPS-precise.

A HUD overlay shows tracking status, prayer count, and compass direction. iOS only.

ViroReactARKitGPS Geolocation3D Object Placement

Community Groups

Full group system with text channels, voice channels, and video channels. Roles, permissions, invite links, real-time presence.

Voice and video powered by LiveKit with a dedicated worship mode for shared audio experiences.

LiveKit React NativeSupabase RealtimeWebRTCRole-Based Permissions

The Watch App (764 Lines That Changed Everything)

Not a companion widget. A complete standalone SwiftUI Apple Watch experience: feed browsing, audio prayer recording, prayer creation, group chat, maps, guided prayer sessions, HealthKit integration, and a Qibla compass.

All enabled by a custom 764-line Expo config plugin bridging React Native's build system to native watchOS targets.

SwiftUIwatchOS 10+HealthKitCustom Expo Plugin (764 LOC)

Swipe Through Prayer

Vertical swipe discovery modeled after TikTok. Audio, video, and text prayers with auto-moderation via TheHive.ai.

Anonymous posting with admin visibility. Content surfaces by location, faith tradition, and spiritual lens preferences.

react-native-reanimatedTheHive.aiSupabase Edge Functions

Six Traditions, One Map

Serves Christianity, Islam, Judaism, Hinduism, Buddhism, and Sikhism, each with sub-traditions and genre classifications.

The Spiritual Lens lets users filter the entire app through their faith perspective without siloing communities apart.

6 Faith TraditionsSub-tradition TaxonomyGenre Classification

The Engine Room

The decision to use Expo SDK 54 with React Native 0.81 and React 19.1. Bleeding edge on purpose. For a solo developer, the new architecture (Fabric renderer, TurboModules, bridgeless mode) means fewer native module headaches and faster iteration. The tradeoff is being first to hit undocumented bugs. Worth it, every time.

Supabase runs the entire backend. Postgres + PostGIS for geospatial queries that power the living map. Auth for multi-provider login (Apple, Google, email). 47 Edge Functions handling everything from prayer submission to moderation callbacks. Realtime subscriptions for live presence and group chat. Storage for audio recordings, video prayers, and profile media. One platform, zero infrastructure management.

198 database migrations. That number tells a story. It does not mean the schema was wrong 198 times. It means the data model got better 198 times. Solo development without a deadline means the freedom to refactor when you learn something new. Every migration is a lesson encoded in SQL.

The 3-tier AI behavior monitoring engine: client-side rules running at sub-50ms for immediate content filtering, edge functions for mid-tier analysis (spam detection, pattern matching, abuse scoring), and deep AI pipelines for complex pattern detection across user behavior over time. Three layers because no single layer is fast enough and thorough enough at the same time.

6-Area Admin Console

Every production prayer feed needs an operations layer. PrayerMap's admin console is a standalone React app covering six surfaces, from content moderation to deployment tooling.

Admin Dashboard

Prayer moderation, user management, analytics, and community oversight

Outreach

Church and org lead pipeline, email campaigns, and CRM tracking

Website

Style guide, saved assets, landing page management, and design inspiration

Behavior Monitor

Live event stream, rule management, pivot analytics, and feature flags

Development

Build monitoring, deployment tools, RAG training, and system health

Screenshots

App screenshot library, visual regression, and App Store assets

47

Edge Functions

198

Database Migrations

6

Admin Dashboards

6

Platform Targets

148

Current Build

The Road

Phase 1: Web MVPCOMPLETE
Phase 2: Universal Mobile AppCOMPLETE
Phase 2.5: Play Store + Feature ExpansionIN PROGRESS
Phase 3: Wearables + WidgetsPARTIAL
Phase 4: Drive FeaturePLANNED

Voice-nav prayer overlay, CarPlay/Android Auto

What Building This Taught Me

Solo mobile dev shipping is a different beast from web. App Store review, code signing, provisioning profiles, TestFlight distribution, device-specific crashes that only reproduce on hardware you do not own. These are real barriers that teach a discipline web deployment cannot. Every rejected build is a lesson in reading Apple's guidelines like a lawyer.

Building for 6 platforms simultaneously forces you to think in abstractions. You cannot hardcode anything. The custom Expo config plugin for watchOS was not a fun weekend project. It was weeks of reverse-engineering Xcode build phases, understanding how React Native's Metro bundler interacts with native targets, and writing 764 lines of JavaScript that modify the .xcodeproj at prebuild time. The kind of work that has no tutorial.

The hardest part was not the code. It was scope discipline on a project with no paying customers and no deadline. Ministry work has to be its own motivation. 198 migrations means 198 times the thought "this isn't good enough yet." That is either obsession or dedication, and the line between them is whether you eventually ship. Build 148 is in the App Store. That is the answer.

Non-profit does not mean non-professional. The admin system, the moderation pipeline, the behavior monitoring: these exist because real people will use this to share their most vulnerable moments. Someone will post a prayer about a dying parent. Someone will share their addiction recovery. The engineering has to be worthy of that trust. Every Edge Function, every RLS policy, every moderation layer is a promise that their vulnerability will be protected.

April 2026 · -JJ

Tech Stack

Mobile

Expo SDK 54React Native 0.81Mapbox GLViroReact (AR)SwiftUI (watchOS)Expo RouterReact Native SkiaExpo Notificationsreact-native-track-playerExpo Camera

Frontend

TypeScriptNativeWind 4react-native-reanimatedZustandTanStack React Queryreact-native-mmkv

Backend

SupabaseDeno (46 Edge Functions)PostGISLiveKitpg_cronpg_netAWS S3SendGridWebAuthn / Passkeysn8nYouTube Data API

AI

TheHive.aiClaude API (Haiku)OpenAI (Embeddings + TTS)Pinecone (Vector Search)Cohere Rerank

Tooling

EAS BuildDetox (E2E)PlaywrightVitestGitHub ActionsVercel

Observability

Datadog RUMPostHog

Infrastructure

Docker

Want to discuss the architecture?

Get in Touch
Building PrayerMap: React Native + Supabase + Mapbox — Jeff Michael Johnson