# Image generation prompts

The Art Director uses three distinct prompts depending on what's being
generated. All three share the brand colour system but differ in subject,
style, and aspect ratio.

Source files: `src/lib/blog-generator.ts` and `src/lib/newsletter-generator.ts`.
Model: OpenAI `gpt-image-1`.

---

## 1. Blog post cover image

Used for: every weekly blog post. One image per post, 1536×1024.

```
Conceptual illustration for a technology leadership article titled "{title}" about {topic}.

Minimalist surreal sci-fi landscape in a vast desert with soft dunes and distant abstract mountains, smooth terrain, clean horizon line.

Scene: modular cube structures forming architectural shapes (portals, towers, floating grids, staircases), precise geometric composition.

Characters: astronauts in retro-futuristic suits interacting with cube structures (assembling, observing, constructing), calm, slow, deliberate movements.

Style: hybrid 3D render + fine line illustration overlay, subtle contour lines, technical drawing accents, slightly imperfect edges, editorial conceptual illustration.

Materials: smooth matte surfaces with subtle grain, soft imperfections, minimal reflections.

Lighting: soft volumetric lighting, atmospheric haze, global illumination, diffused shadows, no harsh contrast.

Color system (strict hierarchy): Base: cream / soft sand (#F4E3C1). Primary accents: burnt orange (#FF6A00), soft orange (#FF8C42). Secondary highlights: golden yellow (#FFC857). Minimal contrast anchor: deep blue (#0B1F3A, very limited use, small elements only). Red (#FF3B30) used sparingly as focal accent only.

Mood: calm, intelligent, abstract, technological, poetic, slightly futuristic.

Composition: centered subject, strong negative space, cinematic wide framing, low horizon, balanced symmetry.

Render: ultra high resolution, octane render style, ray tracing, studio quality.

No clutter, no text, no photorealism, no heavy contrast, no dark dominant tones.
```

---

## 2. Newsletter cover image (header)

Used for: the cover image at the top of every weekly newsletter. One image
per issue, 1536×1024. The Composer agent first writes a per-issue
`dallePrompt` describing the issue's main subject; that string is then
appended with the line below to lock the brand aesthetic.

```
{per-issue subject prompt}. Dark background, amber and orange color palette, no text, no words, abstract geometric shapes, cinematic lighting, high quality.
```

The newsletter aesthetic is intentionally darker than the blog (dark
background + amber glow vs. the blog's cream sand desert). Newsletters
read in inbox previews where contrast against white email-client chrome
matters; blog covers sit on the bone-paper site where the cream desert
fits.

---

## 3. Per-story thumbnail (AI fallback)

Used for: per-story image cards inside the weekly newsletter, **only when
the source URL doesn't expose an `og:image`**. For sources that do (most
major outlets), the og:image is used directly — no AI generation. So this
prompt typically fires for X posts, paywalled Reuters articles, and a few
other scrapers-blocked sources.

The fallback prompt is built per-story from a style hint, the headline,
and the first 200 chars of body context:

```
{styleHint} about: {headline}.{ Context: {body slice}}
Abstract conceptual illustration, no people faces, no text, no logos
```

Where `styleHint` is one of:

- `Editorial cover illustration for an in-depth tech analysis` — for the deep dive
- `Editorial illustration for a Swiss tech news brief` — for Made-in-Switzerland items
- `Editorial illustration for a CTO news brief` — for the regular 3 stories

Image size for these is also 1024×1024 (square crop fits the per-story
card layout).

---

## Cost ceiling

Worst case for one weekly newsletter: 1 cover + 7 per-story fallbacks
(1 deep dive + 3 stories + 3 Swiss) = 8 images × ~$0.20 = ~$1.60. Real
case is closer to $0.40-$0.80 because most sources expose og:image and
skip the AI generation entirely.
