Pericope
Learn to read Scripture closely, by scrolling.
Problem
Reading the Bible closely usually means opening a commentary, and most people never do. Sermon-level depth stays locked away from the people who would love it, because it takes too much work to reach on your own.
Solution
Pericope brings that depth to you in a format you already know how to use. You scroll a full-screen feed, one passage per card with a single insight. Tap a card and a full study opens, with exegesis, historical context, theology, a devotional, application, questions and a hymn. A mind map shows how much of the Bible you have explored.
What it is
An iPhone app that teaches Bible exegesis through a full-screen vertical feed, one passage per card, with a full study behind each one.
Design process
General research
Reading the Bible closely usually means opening a commentary, and most people never do. I read a full study page for every passage myself, which caught real errors in the first drafts and set the standard.
Market validation
I mapped Pericope against YouVersion, Logos, Dwell, and the short video apps, and defined clearly what it is not. It is not a reader, not a plan, and not a verse of the day.
Ideation
I designed it as a full screen feed you scroll, one passage per card with a single insight, and a full study waiting behind each card, so depth arrives in a format people already know how to use.
Testing
I built a clickable wireframe before any code, and I run quality gates over every study, checking the drafts, the tone, and the hymns against a written standard.
Iteration
I changed the research method mid project after a check found factual mistakes, and I re cut whole books when their passages would not fit the structure, keeping the drafts I could.
Build
The app is built. The four tab feed, the eight section study, the mind map that shows how much of the Bible you have explored, three offline translations, notes, saving, and a daily reminder. There are already more than fourteen hundred studies and nearly six hundred hymns bundled.
Test
Every study carries a reviewed flag that stays off until I have read it myself, so human review is a built in gate, not an afterthought. Automated tests cover the decoding and the stable feed order.
Release
Pericope is not released yet. The app runs, and the remaining work is finishing the study review, going live with the content host and iCloud sync, and preparing the App Store listing.
Technical breakdown
Pericope is a native SwiftUI app for iPhone, with the content kept completely separate from the code. Each passage study is one JSON file, written offline by a Python pipeline and bundled into the app, so it works without a server. The app loads all the studies at launch and can merge downloaded corrections over the bundled ones, checked with a hash. Your own state, what you saved and opened, lives on the device with an optional iCloud sync, and no account.
One JSON file per study, with downloaded content winning by hash
Content is fully decoupled from code. Each passage study is one JSON file matching a Study struct, authored offline by a Python pipeline and mirrored byte for byte into the app bundle, so the whole thing ships and runs with no server. At launch the app loads every bundled study, then merges any downloaded corrections over the bundled files, with the downloaded version verified by a SHA-256 hash before it is allowed to win. That lets me fix a study after release without shipping an app update, while a tampered file cannot replace a good one.
A paged feed that stays put, and a shuffle that stays stable
The feed is a full screen vertical pager built with SwiftUI scrollTargetBehavior paging, and it resumes on the exact card you left. It offers two orders, canonical from any starting passage, or a seeded random shuffle that stays stable across launches until you deliberately reshuffle, so the order does not jump around every time you open the app. Seeding the shuffle is the difference between an order that feels intentional and one that feels broken.
The Bible as a mind map, computed from coverage
A map screen shows all 66 books as tiles with an explored percentage, and a themes view groups studies by doctrinal tag, both computed from the same reading state rather than stored separately. Turning progress into a visible map of the whole Bible gives a long, open ended goal a shape you can watch filling in.
The versification bug that shipped the wrong passage
A Jonah study had dropped the great fish, because a drafting step used the Hebrew versification where it is 2:1 rather than the English 1:17, and a study missing it had already shipped. I corrected the verse counts in the build script, re cut the pericope to 1:9 through 17, re authored it, and deleted the stale file from both the studies and the mirror. When you generate content programmatically, the numbering system itself is a source of silent, shippable errors.
Re-cutting whole books the schema could not express
Hosea and Joel had passages up to sixteen verses and ids that spanned chapters, which the passage schema of chapter, start, end cannot represent, and the build hard asserts two to ten verses. Rather than loosen the schema, I re tiled Hosea to 27 and Joel to 11 passages, preserving 45 of the existing drafts. A strict schema that fails the build is a feature, it caught structurally impossible content before it could ship.
Keeping a weaker model off the hard theology
A handful of Jonah studies drafted by a smaller model contained wrong Hebrew, for example the words for fear confused, found on a spot check. So I adopted a rule to keep that model off this work and use the strongest model for hard passages, and every study is gated behind quality scripts and carries a reviewed flag that stays false until I have personally read it. When content has to be correct, the model tier and a human review gate are part of the architecture, not an afterthought.
Signing that does not hang on an invisible prompt
Automatic Xcode signing failed with a bearer token auth error, and worse, codesign would hang waiting on a keychain permission dialog with no one there to click it. I moved to manual signing in a dedicated keychain with the key partition list set, so codesign can use the key without a prompt. On an automated build, an invisible GUI dialog looks exactly like a hang, so unlock the keychain and set the partition list up front.
Private on device, with optional iCloud
Your saved passages, notes, and progress live on the device in SwiftData, with an optional CloudKit sync and no account, and the studies ship bundled so the app works offline. Reaching for CloudKit rather than a custom backend gives cross device sync tied to the user's own iCloud, with no server for me to run or secure.