Case study — custom CMS

← All work

Hope Community Church

A custom website and content system, built so the office can run it themselves.

Client
Hope Community Church — Glenview, IL
Engagement
Full rebuild + custom CMS
Built
July – September 2026
Stack
Next.js 16 · React 19 · Drizzle · Railway
hopecommunity.net
hopecommunity.net home page — Following Jesus Together hero
hopecommunity.net — the live siteVisit hopecommunity.net ↗

The build, in numbers

2months from kickoff to live
87commits
30section types in Studio
3permission levels
01 — The problem

Who maintains this in eighteen months?

The old site ran on WordPress. That stack works fine for a lot of organizations — it stopped working for this one. A church website is not a brochure: service times change, a sermon series starts, a summer camp page needs to exist in April and disappear in September, a form needs to reach a different person this month.

Every one of those is a small job. Add them up across a year and they become the whole job. So the question we started with wasn't “how do we make this look better” — it was: who is going to maintain this in eighteen months, and can they?

02 — What we built

Studio — a content system, not a page builder.

We built the CMS from scratch rather than bending an existing one. That sounds like more work, and it is — but it buys something specific: every control in the editor exists because someone at the church needed it, and nothing exists that doesn't.

A page is a stack of sections — thirty types, from a hero to a livestream embed. Staff build pages by adding sections, filling in plain-language fields, and dragging them into order. The preview is the real page; click a section and its settings open.

  1. 01

    Drafts, then Publish

    Nothing goes live by accident. Leave a page half-finished on Tuesday, come back Thursday — the public never sees the in-between.

  2. 02

    Undo that works

    Delete a section and one undo brings it back whole. Type a sentence and undo takes the sentence, not the letter.

  3. 03

    Hide, don't rebuild

    The Christmas band switches off in January and back on in November. Nobody rebuilds it every year.

  4. 04

    A third state: archived

    Whole, findable, out of the nav and out of Google — one click from being back. A seasonal page lives there eleven months a year.

  5. 05

    Focal point + zoom

    8MB portrait phone photos become avatars, cards and banners without cutting anyone's head off — every upload auto-optimized.

  6. 06

    Spacing in plain language

    “None — join to the section above.” The most common request on any website, solved without anyone learning CSS.

Hope Kids ministry page
Every page here is a stack of Studio sections, maintained by church staff
Hope Community I'm New page: Welcome Home
“I'm new” — built by the office, not by us
Build for the person who will maintain it, not the person who approves it.

The rule every Studio decision answers to

03 — The hard part

Spam, without ever losing a prayer request.

A few weeks after launch the church called: the forms were flooded. A lot of agencies reach for a CAPTCHA and declare victory. The failure we were most worried about was the opposite one — a real person filling in a real prayer request and getting silently blocked.

So the filter quarantines, never refuses. Suspicious submissions are flagged and moved to a review screen instead of thrown away. Nothing from a human is ever lost; it just might need a glance. And the church's own Wi-Fi is on a trusted list, so twenty sign-ups from one table on a Sunday morning don't trip the rate limit.

  1. Signal 01

    Structural signals

    A hidden field only a bot fills in. A form submitted in under three seconds. Near-certain on their own.

  2. Signal 02

    reCAPTCHA as a signal

    Scored invisibly in the background — a low score adds weight, it never decides alone.

  3. Signal 03

    Content patterns, weighted lightly

    Words from someone in genuine distress can look like a spam email. The scoring knows that.

  4. Signal 04

    Tests with a priority

    The “must never be flagged” half of the test suite is deliberately longer than the “must be caught” half.

04 — The takeaway

Owning your platform is the point.

There's no subscription to a page builder, no plugin that stops being maintained, no upgrade that breaks the homepage. The code is the church's. Admins configure, editors publish, staff get exactly the tools they use — and the office changes the fall schedule themselves.

Meet Studio, the CMS →
More work →

MKB Company next.

Ready when you are

Let’s make your marketing compound.

Tell us what you’re building. We reply the same day with a plan, not a pitch.

Same-day replyChicago × Denver