Cantilever Holdings mark
Cantilever Holdings LLC · Applied AI & Systems Thinking

Build Case Study

← Work
June 2026
Two weeks, four architectures
Daily Dose of Positivity (DDOP)

From a two-year manual ritual
to a production-grade, cloud-hosted AI service

For two years I hand-picked a quote every weekday morning and sent it to friends, family, and colleagues. This is the record of rebuilding that habit into something that runs itself — including the three approaches that failed first, and the moment the whole strategy changed mid-conversation.

12 min
manual cost, daily
4
architectures attempted
3
abandoned in production
$0
recurring cost today
i.

The habit, and why it had to change

Every weekday morning, before anything else, I browsed BrainyQuote, picked something that felt right for the day, and sent it out over iMessage and WhatsApp. It worked — people looked forward to it — but it lived entirely in my head and my thumbs. It broke down when I traveled. It had no record. It cost roughly ten to fifteen minutes I never got back.

The goal wasn't to replace the taste, just the labor: keep the eclectic, non-cliché quotes and the consistent visual identity, and remove myself from the critical path.

ii.

Four architectures, in the order they were actually tried

Each one was a reasonable bet given what was known at the time. Each failure was diagnosed from evidence — logs, error messages, isolated tests — not guessed at, and each one directly shaped the next attempt.

1
iOS Shortcuts
Abandoned
Called the Claude API directly from the Shortcuts app, with native actions compositing a quote onto a photo. It could run end to end — but Shortcuts couldn't reliably parse nested JSON, handle line breaks in overlaid text, or fire an iMessage without an interactive prompt that blocked automation.
Consumer automation tools are built for short, linear taps — not for chaining an API call, JSON parsing, and image rendering into one unattended pipeline.
iOS Shortcuts app showing a malformed JSON request body mid-debug
Actual debugging session — the request body breaking inside Shortcuts' JSON builder
2
Python + launchd, on a Mac mini
Abandoned
A proper script — Pillow for rendering, the Anthropic SDK for the quote — scheduled with macOS's launchd. Visual quality jumped immediately. But launchd intermittently failed to initialize the GUI session iMessage needed, crashing silently at the scheduled hour with no useful log.
macOS's sandboxing of background processes makes GUI-app automation an unreliable foundation for anything unattended.
3
Python + cron, same machine
Abandoned
Swapped launchd for plain Unix cron, same script, same delivery method. Cron didn't fire at all under the active macOS security model — zero execution events logged at the scheduled time.
This confirmed the problem was systemic to local scheduling and OS permissions, not a quirk of one scheduler. The fix had to remove the local machine from the equation entirely.
4
GitHub Actions + Gmail, fully cloud-hosted
Shipped
Re-platformed entirely: GitHub Actions for compute, Gmail SMTP for delivery, secrets held in GitHub's encrypted store, and an external scheduler hitting the GitHub Actions API directly to guarantee exact-time execution. Verified reliable across many consecutive days, independent of any device, location, or OS permission model.
Decoupling scheduling from execution — and removing personal hardware from both — turned a fragile convenience script into a service that runs the same whether I'm home or traveling.
The actual turning point
“This choice of automation by using Shortcuts seems complexity for complexity's sake. Isn't there an easier way?”
Six-plus rounds into debugging Shortcuts — broken JSON, dead image APIs, line breaks that wouldn't render — the question stopped being how do I fix this next error and became is this the right tool at all. That question, asked mid-build rather than at a planning stage, is what actually produced the architecture change.
iii.

What the final pipeline looks like

A scheduler outside any personal device triggers a cloud job, which generates and delivers the graphic with nothing left running on hardware I have to keep awake.

External scheduler
cron-job.org, 7:00am ET
GitHub Actions
ephemeral compute
Claude API
quote selection
Pillow render
1080×1080 graphic
Gmail SMTP
delivery
Final production DDOP graphic, energy theme, William Blake quote
Shipped output
Final branded graphic — theme label, themed gradient, quote, attribution, date, all rendered server-side.
Gmail inbox showing the DDOP email delivered automatically
Cloud delivery, proven
Delivered to Gmail by a GitHub Actions job with no device involved — the architecture working exactly as designed.
GitHub Actions run history showing one early failure and two passing runs
Run history, day one
The first three runs on GitHub Actions — one failure, two passes — the visible signature of iterating in production rather than waiting for certainty.
iv.

A failure mode specific to AI systems

Once delivery was reliable, a quieter problem surfaced: Claude kept converging on the same “canonical” quote for a given theme — the same William Blake line every time “Energy” came up, regardless of time of day. This isn't a bug or an infrastructure fault in the usual sense — it's a property of the model's default behavior that has to be explicitly steered.

The fix was prompt engineering, not code: a randomized seed per call, explicit instructions to avoid recently-used or over-cited answers, and a wider net of source figures beyond classic literary quotes.

v.

What this demonstrates

Zero-to-one build Root-cause diagnosis under live failure AI-native systems design Prompt engineering for output variety Build-vs-buy / platform decisioning Secrets & credential management Comfort discarding sunk-cost work Curiosity past the point of "good enough"
Why it matters beyond the script
The interesting part of this build was never the final script — it was the sequence of falsifiable hypotheses tested along the way. A pilot reveals constraints that weren't visible at the proposal stage. The right response isn't to abandon the initiative; it's a deliberate platform decision based on what was actually learned.
— on translating a personal build into a portfolio-governance pattern