← SELECTED WORK

For Discipleship Global

Campaign Studio

One field report in. A whole campaign out, on brand and waiting for review.

CONTEXT

Campaign Studio was built for Discipleship Global, a mission organization whose field reports and newsletters are full of stories worth telling. Reworking each one by hand for every channel took a small team about a week, so much of that material never reached an audience.

THE PROBLEM

AI can draft a week of content in minutes. The hard part is content a communications team would actually publish: true to the source, consistent with the brand, and never posted by accident.

Facts drift

Generated copy has a habit of inventing names, numbers and quotes. For a mission organization telling real people's stories, that isn't a style problem. It's a trust problem.

Off brand at scale

Seventeen deliverables across social, email, video and a landing page multiply every small inconsistency in color, type and voice.

Approval that means something

If an approved post can be edited afterwards, or published twice when a connection drops, the approval step is theater.

HOW WE SOLVED IT

  1. 01

    One structured generation, then deterministic rendering

    The report is extracted from a PDF, Word file or text, with its photos, and the model returns the whole campaign in one strictly validated structure: three creative directions, ten social posts, three emails, three short videos and a landing page. It's told to treat the source as data and never invent names, numbers or quotes, and each social post carries a note on where it came from in the report. Everything visual is then rendered by code, not by the model.

  2. 02

    Brand rules live in a versioned kit

    Colors, type, voice and an avoid list sit in a versioned brand kit, and each campaign keeps a snapshot of the kit it was made with. Designs come from fixed layout systems, so a new campaign can't quietly drift from the last one.

  3. 03

    Change a headline, and the design follows

    Editing a post re-renders just that item in a sandboxed browser with bundled fonts and no AI call, and browser and server renders were tested to match pixel for pixel. Saves carry a version stamp, so two people can't overwrite each other, and every revision can be restored.

  4. 04

    Approval is tied to the exact version

    Approving a post records a fingerprint of that version, so any later edit cancels the approval. Social publishing checks it again when scheduling and right before sending, and if a connection drops mid-send the post is flagged for a person to check rather than retried blindly. Generation runs in a durable job queue, and an interrupted AI call is never resubmitted on its own.

WHAT WE CHOSE NOT TO DO

  • No autonomous publishing. Everything waits for a person, by design.
  • No ad buying or email-platform integration. The output is a reviewed package the team can use wherever they already work.
  • No AI in the editing loop. Edits re-render deterministically, so what you approve is exactly what you see.

WHERE IT STANDS

Built for Discipleship Global. Each campaign exports as a complete package or per channel, and direct publishing to Facebook and Instagram is built in behind the same approval check. Next: voiceover for the videos and an editor for email layouts.

  • NODE.JS
  • EXPRESS
  • POSTGRES
  • OPENAI
  • PLAYWRIGHT
  • FABRIC.JS
  • SHARP
  • FFMPEG

Ready to leave the ground?

Start a project →