Our Marketing Runs on Our Own API — And Why That Matters
Dogfooding at scale: every blog hero, social visual, and Instagram carousel is a real MediaEngine job. Nano-banana img2img for style transforms, deterministic HTML→screenshot for text. We QA every image visually.
Why Dogfood?
We could hire a designer or use stock images. But that masks the real UX of our API. When your own marketing depends on your product, you fix bugs fast. You notice UX problems immediately. You build what users actually need.
MediaEngine's entire marketing material — blogs, social, email, carousel images, documentation diagrams — is generated via our own API. Every generation is a real job, real cost, real latency.
The Architecture
Base Generation: Nano-Banana
Blog heroes, social media images, product screenshots: **nano-banana model, 1 credit each**.
1. Content theme (e.g., "AI agents generating images")
2. Prompt crafting: "AI agent connecting to image generation API, neural network pathways, modern tech illustration, no text"
3. Submit job: POST /api/jobs
4. Poll: GET /api/jobs/{jobId}
5. Download to public/images/{slug}.jpg**Cost:** ~15 blog images/month × 1 credit = 15 credits (~$1/month)
Img2Img Transforms: Nano-Banana
One base image → 5 style variants (watercolor, toon, oil, cyan-tint, warm-sepia).
Base image generated (nano-banana, 1 credit)
Transform to watercolor (img2img, 1 credit)
Transform to toon (img2img, 1 credit)
... 3 more styles (3 credits)
Total: 5 credits for 6 variantsWe then pick the best for blog, social, email.
**Cost per multi-variant set:** 5 credits (~$0.35)
Text Graphics: HTML → PNG (Deterministic)
We **never** generate text via AI. Instead: render HTML to PNG.
Why? Because AI hallucinates text. Quotes get misattributed. Numbers get wrong. Warnings get muddled.
**Our approach:**
// Marketing cards: pricing, features, testimonials
async function generateTextCard(data: {
title: string;
value: string;
icon: string;
}) {
// Render HTML deterministically
const html = `
<div class="stat-card">
<img src="icons/${data.icon}.svg" />
<h2>${escapeHtml(data.title)}</h2>
<p class="value">${data.value}</p>
</div>// Convert to PNG via browser or Puppeteer return await htmlToImage(html, { width: 1200, height: 630, format: 'jpg' }); } ```
**Cost:** Zero. Deterministic rendering, no API call.
**Benefit:** Exact text, predictable design, no hallucination.
Social Media Variants: Img2Img
One blog hero → platform-specific crops and styles:
- **LinkedIn:** 16:9, professional tone, muted colors
- **Instagram:** 1:1 square, vibrant, high contrast
- **Twitter:** 2:1, bold, text-overlay-safe
- **Pinterest:** 2:3, text-overlay-ready, pastel transforms
Start with blog hero (1 credit, nano-banana)
Instagram variant: img2img 1:1 square, vibrant style (1 credit)
LinkedIn variant: img2img 16:9, professional (1 credit)
Twitter variant: img2img 2:1, bold (1 credit)Total: 5 credits for 5 platform variants Cost: ~$0.35 per blog post's full social suite ```
QA and Human Approval
Here's the critical part: **we QA every single image visually before publishing.**
Process
1. Generate image via API 2. Download to staging 3. Preview in team Slack channel 4. Human approval (Approve / Regenerate) 5. On approval: publish to public CDN
Why Manual QA?
AI hallucinations are rare but real: - Distorted text (1-5% of images with text) - Unintended objects (2-3% of complex scenes) - Color shifts (uncommon, but happens) - Anatomical errors in people (0.5%, but critical)
**Our policy:** If there's doubt, regenerate. Credibility > speed.
**Time cost:** ~2 minutes per image (`3-4 images per week = ~15 min overhead).
Cost Breakdown
| Asset Type | Frequency | Cost/Unit | Monthly Cost | |------------|-----------|-----------|--------------| | Blog heroes | 2-3/week | 1 credit (base) + 4 (transforms) = 5 | $11 | | Social variants | Bundled | (included above) | — | | HTML text cards | 10/month | $0 | $0 | | Email headers | 4/month | 1 credit each | $0.28 | | Docs diagrams | Ad hoc | 1 credit each | $1 | | **Total** | — | — | **~$12/month** |
We fit comfortably in the **Starter plan ($29)** with massive headroom.
What We've Learned
1. Human QA is Mandatory
At 1-2% failure rate, even small-scale marketing (20 images/month) will have failures. QA budget is non-negotiable.
2. Nano-Banana Is Sufficient
For conceptual/abstract imagery (workflows, architectures, diagrams), nano-banana quality is professional. We use gpt-image-2 only for hero images on flagship blog posts (~1/month).
3. Img2Img Transforms Are Efficient
One base image + 4-5 transforms is 90% cheaper than generating 5 separate images. Watercolor and toon are reliable at 0.8 denoising.
4. Never AI-Generate Text
Text generation introduces hallucination risk. HTML → PNG (Puppeteer/playwright) is deterministic, fast, free.
5. Async Polling Is Mandatory
We submit all image jobs at night, poll by morning. 20 images in parallel ≈ 20s total (vs. 140s sequential). Zero blocking.
Dogfooding Benefits
**We caught bugs early:** - Job status endpoint timeout at 100 concurrent polls (fixed in v1.2) - Idempotency key collision in batch submits (fixed in v1.3) - Webhook retries missing 5xx errors (fixed in v1.4)
None of these would surface in light testing. Real production volume found them.
**We optimized UX:** - Added idempotencyKey support after discovering retry patterns in marketing - Exposed denoising_strength parameter after img2img experiments - Added webhook delivery guarantees after newsletter pipeline needs
Scaling Path
**Phase 1 (Current):** Marketing material on our API. ~12 credits/month.
**Phase 2 (Q3 2026):** Customer showcase (10 customer case studies, 30 images). +30 credits/month.
**Phase 3 (Q4 2026):** SDK documentation (automated API reference with real example outputs). +50 credits/month.
**Target:** Show customers that a real business runs on MediaEngine. Trust via transparency.
Key Takeaway
Dogfooding isn't a marketing gimmick for us — it's our quality guarantee. Every image you see on mcpmediaengine.com is a real API call. Every workflow in our docs is something we actually do.
When your own product powers your own marketing, reliability stops being optional.
Next Steps
- Review your content workflows for generation opportunities
- Implement deterministic HTML → screenshot for text
- Start with nano-banana, scale to gpt-image-2 as you grow
- Build QA into your pipeline from the start