San Antonio Review

A content workflow designed around trust, not throughput.

Status Live · since 2023
Role PM + Design + EngineeringSolo on engineering & design, with my partner on PM and 3 content managers as SMEs
Context Content Operation~ since 2017
Stack
WordPress PHP Python Flask Claude API Gravity Forms Gravity Flow PublishPress Pillow Render Google Cloud Vision API

San Antonio Review (SAR) runs on a custom theme, a custom submission workflow, and a coordinated set of LLM-augmented pipelines that handle production work behind the judgment decisions humans make. The question wasn’t how much to automate, but how to design automation into the workflow to support the four principles.

The Trust Question

Whose trust is on the line, and what would the wrong automation cost?

A content operation like SAR has two trust relationships, both load-bearing, both invisible to most automation thinking. Contributors send work expecting it to be read by a person whose judgment is the reason SAR exists. Readers return because the voice is recognizable as human.

Most automation conversations skip past this and ask: what can AI do here? The right question is more difficult to answer: what is the essence of this operation, and what would automation destroy rather than support?

Judgment is not incidental to SAR; it’s constitutive. Automating any step that reads, evaluates, or shapes decisions wouldn’t make the content operation more efficient. It would change the essence of what SAR is.

Contributors
“This will be read by a person whose judgment is the reason I submitted here.”
Readers
“I recognize and want to engage with this voice. That’s why I come back.”
What I Built

A system that takes on production work without superseding human judgment.

Six components, two human-mediated approval gates, three trust boundaries. LLM-augmented pipelines handle the production work that’s invisible to both contributors and readers: image creation, social distribution, author metadata, and formatting. Discernment decisions stay where they belong: with humans, gated and auditable.

CONTRIBUTOR CONTENT MANAGER AGENTS Submit content Eval & acceptance HITL Image generation snippet → template Author Normalization bio · avatar · socials Approve Assets HITL Social Media Service platform-specific copy Publish sanantonioreview.org HUMAN STEP AUTOMATION
SAR Production Pipeline · Six components, three trust boundaries, two human-mediated approval gates
What I Deliberately Did Not Build

What’s missing matters as much as what’s there.

Every component below was technically achievable and tempting. Each one was rejected for the same kind of reason: it would have crossed into human judgment, and the appearance of that crossing is itself a trust problem, even when human authority is technically retained.

AI submission scoring
The existence of an AI score would shape what content managers look at first and how they read it. The artifact itself creates the problem.
Bio rewriting that changes voice
The author normalization agent rewrites first-person to third-person and standardizes formatting. It does not edit voice, tone, or what the author chose to emphasize. Normalization ≠ editing.
Auto-publishing without gates
Every output reaches a human approval step before it goes live. The time savings come from removing human work from production, not from removing human oversight.
AI-generated art
Instead, an image creator that creates a composite from text from content and one of 15 templates, created by SAR. The publication’s visual identity is part of what readers come back for. Generative imagery would dilute it and erase the design labor that built it.
Always-on content assistant
The right design is an on-demand assessor: the content manager registers their impression first, then optionally pulls in Claude as an engaged reader. Sequencing preserves human discernment.
How It Works

Six components, three trust boundaries.

Submission workflow

Gravity Forms · Gravity Flow · GP Nested Forms · PHP
Replaces Submittable

Three child forms (one per content category) inside a parent intake form, routed through a multi-stage approval pipeline. A custom gravityflow_step_complete hook prevents the Post Creation feed from firing until editorial approval finishes — otherwise GF creates a draft post the moment the form submits.

// Defer post creation until editorial approval completes add_action(‘gravityflow_step_complete’, function($step_id, $entry_id, $form_id, $status) { if ($status !== ‘approved’) return; if (!in_array($form_id, [POETRY_FORM, PROSE_FORM, ART_FORM])) return; GFAPI::send_notifications($form_id, $entry_id, ‘post_creation’); }, 10, 4);

The choice not to use Submittable was load-bearing: it reduces editor context-switching, preserves formatting through the pipeline, increases transparency for contributors, and signals editorial identity from the first interaction.

Author normalization agent

PHP · Claude API · Google Cloud Vision
Form submission → contributor record

Triggered on approved Gravity Forms entries. Creates or merges a PublishPress Author record using email-based deduplication, a three-field name system that prioritizes pseudonyms, and social URL normalization across six platforms plus Bluesky.

Bios are rewritten from first-person to third-person, inline social references stripped, publication titles italicized. Voice is preserved; presentation is standardized. Avatar upload runs through Google Cloud Vision for face-aware cropping — the contributor’s face stays centered regardless of input dimensions, with a clean fallback to standard WP cropping when no face is detected.

Image creation agent

Python · Flask · Pillow · Claude API · Render
Approved work → published asset

Workflow-triggered service hosted on Render. When an editor approves work in the high-volume content category, the service calls Claude to select three lines that function as an epigraph rather than a quote. It selects from fifteen single-layer PSD templates via weighted random selection, composites the text using Pillow, and saves the resulting JPEG directly to the WordPress Media Library for editor review.

The constraint that mattered: the templates are designed by hand. The agent’s job is selection and composition, not generation. The visual identity remains a design artifact, not an inference. Editors review each output before publication; if rejected, the agent regenerates against a different template.

Social media plugin

WordPress plugin · PHP · Claude API · Render
Editor-initiated, publishes with content

A WordPress plugin that runs from the draft post screen. When the editor clicks generate, it sends the post content and author info to the same Render service the image agent uses; Claude returns platform-specific copy for Bluesky, Instagram, and Facebook. The editor reviews each platform’s copy, edits inline, regenerates per platform if needed, and approves.

Approved social copy stays attached to the draft and publishes alongside the content. LinkedIn was scoped out after platform review timed out during their approval process — an honest constraint rather than a design choice.

Editorial dashboards

PHP · Gravity Flow · custom views
In production today, evolving

The current production dashboards are styled Gravity Flow inbox views — submission queue, entry detail, workflow state — customized so editors can see queue health and per-submission status without leaving the WP admin. The styling is part of the work: a generic Gravity Flow inbox doesn’t communicate where attention is needed; the SAR version does.

Unified editorial area + content assessment assistant

PHP · React · Claude API
In development

An on-demand second reader for borderline submissions. The editor registers their lean first, then optionally pulls Claude in as an engaged reader. Sequencing is the design: editorial judgment comes first, AI orientation comes second. Reverse the sequence and you reduce the editor to a verification machine — exactly the failure mode this case study is organized against.

The unified editorial area surfaces queue health, contributor history, pipeline state, and submission velocity in one place — the things editors currently track in their heads or across multiple admin screens.

Result

Faster production, preserved identity, more time for the editorial work that matters.

60%
Faster to publication
0
Manual avatar crops
3
Platforms automated
15
Image templates

Preserved

  • Every judgment call remains a human decision.
  • Visual identity stays a design artifact, not a generated output
  • Contributors interact with humans, not with automation.
  • Readers encounter a consistent, human-shaped experience.

Now possible

  • A small team can run a high-volume, multi-category content operation.
  • Submission volume can scale without proportional workload.
  • Contributors get faster, more transparent responses.
  • The model is portable to other content, ECM, regulated, and other operations.