Give direction
Set the goal, sources, outputs, audience, and release rules.
Automation Playbook
A forward-looking proposal by Matthew O’Hair for moving content from brief to release, grounded in shipped Bearing Fruit workflows and artifacts.
Proposed workflow · Operator experience
A content lead gives direction, follows the run, and makes the decisions that require judgment.
Set the goal, sources, outputs, audience, and release rules.
See completed work, the current owner, and the next decision in one tracked run.
Run 0184 · started by CMS webhook · 12 minutes ago
Approve a revision or request changes without starting another prompt chain.
Scripture reference check
The accuracy review found language that may overstate what the cited passage says.
How I would build it
First prove the operating model with Content + Audio, using Bearing Fruit’s existing delivery workflow. Then measure it and extend the same pattern to the other pipelines.
The five pipelines
Each card separates current evidence from the proposed workflow; compact event labels show what advances each run.
What moves the work: each completed step saves its output and emits a named event. Inngest reads that event and the stored run state to advance, wait, retry, or route the next job; adapters translate third-party results into the platform’s events.
One orchestrated run can begin with a person or an automated request, then move from validated sources to published content.
Guardrailsvoice + editorial guide, rights + Scripture policy, audience and release policy
Live devotional + narration manifest
This versioned entry tells Bearing Fruit what to show and which narration to load. Updating it does not require another app release.
{
"devotionalId": "the-enemys-strategy",
"title": "The Enemy's Strategy",
"audioUrl": ".../v1/en-us-f.mp3"
}
The Enemy’s Strategy. Why you don’t pray.
Prayer is often resisted in unremarkable ways. You get busy. You get tired. You feel dull. You feel ashamed. None of that looks dramatic, but it still keeps you from turning to God.
Scripture teaches that we do have a real enemy. Ephesians chapter six says we wrestle against more than flesh and blood. First Peter chapter five tells us to stay watchful. So it should not surprise us that prayer, one of the clearest expressions of dependence on God, often feels contested.
Prayer is where we stop pretending to be self-sufficient. It is where we confess need, ask for help, and wait on God’s strength instead of our own.
The four lies that keep us from prayer.
The first is busyness. The lie says, “I have too much to do.” The truth is that need does not decrease when life gets full.
The second is dryness. The lie says, “I do not feel anything.” The truth is that prayer is not invalid when it feels dry.
The third is pride. The lie says, “I can handle this.” The truth is that prayerlessness often says, in our actions, “God, I can do today without You.”
The fourth is shame. The lie says, “I should wait until I am doing better.” The truth is that Jesus is the reason you can come near now.
How do you answer those lies? Pray anyway.
Stop. Turn toward God and say, “Father.” You need only honesty and a real turning of the heart toward Him.
Practice this today. Do a simple audit. Which lie is loudest today: busyness, dryness, pride, or shame? Name it before God. Refuse to let it have the last word. Then pray anyway. Even if all you can say is, “Father, help me.”
The run record makes every retry, pause, approval, output, and event inspectable.
One production flow can create in-app art, app-store listings, campaign graphics, and social images, adding copy only when the selected destination needs it.
Guardrailsvisual brief, brand direction, rights record, destination specs
Editable PSD + six App Store exports
The run captured product states, constructed editable Photoshop groups and copy, and exported six 2048 × 2732 RGB files. A person then made the final pixel-level adjustments.


Photoshop JSX builds the scene groups; the export worker generates the release set.

Agent-run: app-state capture, editable PSD construction, copy placement, and export set.
Human gate: final pixel-level art direction and approval before store submission.
Store builds and creative can upload automatically while submission or release remains an explicit human gate.
One tracked run can move a product change through agent implementation, cross-platform verification, signed builds, store review, staged rollout, and monitoring.
Guardrailsarchitecture, test policy, signing controls, release policy, rollback thresholds
Cross-platform version alignment check
Bearing Fruit 1.3.0 is live. The repository check fails when app metadata, package files, Gradle, Info.plist, Xcode project settings, or the in-app version fallback disagree. Production EAS profiles are defined for both platforms.
release 1.3.0 ios_build 63 android_version 63 eas_profiles preview | production | ios-testflight version_check OK across app, Gradle, plist + Xcode
Planned execution layer: Inngest owns workflow execution state; the application keeps the durable run record; GitHub Actions records code checks; EAS Workflows runs builds and submission jobs; store adapters report review state and manage supported rollout controls.
App journeys run themselves on iOS and Android; failed runs produce evidence before a person or agent decides what to change.
Guardrailsflow contracts, stable test IDs, seeded app state
Maestro failure → passing rerun · iOS
The runner found the reminder control but the schedule modal did not open. Its screenshot and command report exposed the missing interaction; after an explicit swipe was added, the same journey passed 12 minutes later.

screen.reminderSchedule.modal was not visible.- swipe: 50%,80% → 50%,45%
- tapOn:
id: habitDetail.completionReminderCard.schedule
- assertVisible:
id: screen.reminderSchedule.modal
The runner’s exit result selects the pass or failure route and can resume Product Engineering.
Agents draft the script and storyboard; the media step is either generated or captured, depending on where the video is going. Automated workers assemble, caption, and check the package before release.
Guardrailsbrand direction, rights + Scripture policy, destination content rules
Storyboard → spec-validated App Store preview
Apple requires app previews to show only content from within the app, so the App Store slot cannot be filled by a generative model. That branch of the pipeline captures instead: a seeded demo profile, Maestro driving the app, and one screen recording per storyboard beat. Shared frame guards assert the shot list's “must not appear” rules on every recorded beat, so a coachmark or toast fails the beat before a frame reaches the renderer.
Captions and the end card composite over that footage in Remotion; an ffmpeg pass muxes to Apple’s exact delivery spec, and an ffprobe gate rejects anything off it. Any single beat is re-shootable without redoing the run, and caption iteration needs no simulator at all.
capture-manifest.json.PASS width 886 PASS height 1920 PASS video-profile High / 4.0 PASS frame-rate 30.000fps <= 30 PASS audio-stream silent stereo AAC present PASS duration 24.60s within 15-30s
publishable stays false — upload and poster frame are human.The technical foundation
The shared record preserves context, artifacts, checks, approvals, and the next action.
Sources, rights, policies, and release plan.
Completed and active steps, produced files, checks, approvals, and costs.
Advance, wait, retry, or roll back.
journey.passed, then resumes the same tracked run with the shared context intact.Current proof: LLM agents, Gemini, ElevenLabs, Photoshop, Maestro, and Cloudflare R2. The proposed execution layer adds Inngest while the application’s run record remains the durable source of truth.
Production safeguards: access, secrets, safe retries, provenance, audit history, monitoring, retention, and rollback. Agents, CI, media workers, and product integrations perform the work.
In the proposed execution layer, Inngest owns workflow execution state and consumes named events to start, wait, resume, or retry work. The application saves the canonical run history, artifacts, approvals, and business state; adapters report third-party state and emit platform events. Every event carries a run ID, and approval events bind to the reviewed artifact hash.
A person is contacted only when required source information is missing.
Feeds validation and creation
draft.revision.requested carries reviewer notes back to the loop; rejection ends the run.
Feeds the agent loop + routing rules
A reminder precedes timeout; timeout rejects the release.
Metrics can suggest work; they never rewrite theological or editorial content on their own.
From proposal to proof
Bearing Fruit and the Good Life Games portfolio show the products and workflows behind this proposal.