# Blog cover image sources

Blog cards and article heroes use CSS classes in `style.css` that point at `assets/blog/*.jpg`.
Machine-readable metadata: [`../image-sources.json`](../image-sources.json).

## Licenses

- **Unsplash** — [Unsplash License](https://unsplash.com/license)
- **Pexels** — [Pexels License](https://www.pexels.com/license/)
- **Original** — AI-generated covers created for GoodVibe Daily (see below).

## Summary

- **6** AI-generated covers (C2PA: OpenAI ChatGPT).
- **18** Pexels covers with verified photo IDs.
- **35** licensed stock covers (Pexels/Unsplash; per-photo ID audit pending for most).

## All blog covers

| File | CSS classes | Platform | Photographer / generator | Notes |
|------|-------------|----------|--------------------------|-------|
| `after-hard-conversation.jpg` | — | stock | — | Licensed stock photography (Pexels or Unsplash). Selected during blog cover curation; run scripts/pin-pexels-fast-match.py to pin photographer. |
| `anxious-morning-reset.jpg` | — | stock | — | Licensed stock photography (Pexels or Unsplash). Selected during blog cover curation; run scripts/pin-pexels-fast-match.py to pin photographer. |
| `betrayal-close-reset-hero.jpg` | — | pexels | Vitaly Gariev |  |
| `body-anxiety-reset-hero.jpg` | — | stock | — | Licensed stock photography (Pexels or Unsplash). Selected during blog cover curation; run scripts/pin-pexels-fast-match.py to pin photographer. |
| `boundaries.jpg` | — | stock | — | Licensed stock photography (Pexels or Unsplash). Selected during blog cover curation; run scripts/pin-pexels-fast-match.py to pin photographer. |
| `burnout.jpg` | — | stock | — | Licensed stock photography (Pexels or Unsplash). Selected during blog cover curation; run scripts/pin-pexels-fast-match.py to pin photographer. |
| `calm-night.jpg` | — | stock | — | Licensed stock photography (Pexels or Unsplash). Selected during blog cover curation; run scripts/pin-pexels-fast-match.py to pin photographer. |
| `cant-start-reset-hero.jpg` | — | stock | — | Licensed stock photography (Pexels or Unsplash). Selected during blog cover curation; run scripts/pin-pexels-fast-match.py to pin photographer. |
| `desk-micro-reset-hero.jpg` | — | stock | — | Licensed stock photography (Pexels or Unsplash). Selected during blog cover curation; run scripts/pin-pexels-fast-match.py to pin photographer. |
| `doom-scroll-reset-hero.jpg` | — | pexels | Anete Lusina |  |
| `editorial-policy.jpg` | — | stock | — | Licensed stock photography (Pexels or Unsplash). Selected during blog cover curation; run scripts/pin-pexels-fast-match.py to pin photographer. |
| `end-of-work-shutdown.jpg` | — | original | GoodVibe Daily | AI-generated blog cover created for GoodVibe Daily. |
| `evening-wind-down.jpg` | — | pexels | Benjamin Eriksen |  |
| `five-minute-ritual.jpg` | — | stock | — | Licensed stock photography (Pexels or Unsplash). Selected during blog cover curation; run scripts/pin-pexels-fast-match.py to pin photographer. |
| `flying-anxiety-reset-hero.jpg` | — | stock | — | Licensed stock photography (Pexels or Unsplash). Selected during blog cover curation; run scripts/pin-pexels-fast-match.py to pin photographer. |
| `gentle-confidence.jpg` | — | original | GoodVibe Daily | AI-generated blog cover created for GoodVibe Daily. |
| `gratitude-perspective-hero.jpg` | — | stock | — | Licensed stock photography (Pexels or Unsplash). Selected during blog cover curation; run scripts/pin-pexels-fast-match.py to pin photographer. |
| `gratitude.jpg` | — | stock | — | Licensed stock photography (Pexels or Unsplash). Selected during blog cover curation; run scripts/pin-pexels-fast-match.py to pin photographer. |
| `healing-forward.jpg` | — | original | GoodVibe Daily | AI-generated blog cover created for GoodVibe Daily. |
| `healing.jpg` | — | stock | — | Licensed stock photography (Pexels or Unsplash). Selected during blog cover curation; run scripts/pin-pexels-fast-match.py to pin photographer. |
| `how-to-use-goodvibe-daily-hero.jpg` | — | pexels | Leeloo The First |  |
| `journal-prompts-overthinking.jpg` | — | original | GoodVibe Daily | AI-generated blog cover created for GoodVibe Daily. |
| `journal-when-blank.jpg` | — | pexels | MESSALA CIULLA |  |
| `kind-no-reset-hero.jpg` | — | pexels | Kaboompics |  |
| `meeting-breath-reset-hero.jpg` | — | stock | — | Licensed stock photography (Pexels or Unsplash). Selected during blog cover curation; run scripts/pin-pexels-fast-match.py to pin photographer. |
| `mental-chatter-reset-hero.jpg` | — | stock | — | Licensed stock photography (Pexels or Unsplash). Selected during blog cover curation; run scripts/pin-pexels-fast-match.py to pin photographer. |
| `midday-energy-reset.jpg` | — | stock | — | Licensed stock photography (Pexels or Unsplash). Selected during blog cover curation; run scripts/pin-pexels-fast-match.py to pin photographer. |
| `mindful.jpg` | — | stock | — | Licensed stock photography (Pexels or Unsplash). Selected during blog cover curation; run scripts/pin-pexels-fast-match.py to pin photographer. |
| `missed-streak-reset-hero.jpg` | — | pexels | cottonbro studio |  |
| `morning.jpg` | — | stock | — | Licensed stock photography (Pexels or Unsplash). Selected during blog cover curation; run scripts/pin-pexels-fast-match.py to pin photographer. |
| `no-motivation-work-reset-hero.jpg` | — | stock | — | Licensed stock photography (Pexels or Unsplash). Selected during blog cover curation; run scripts/pin-pexels-fast-match.py to pin photographer. |
| `overthinking.jpg` | — | stock | — | Licensed stock photography (Pexels or Unsplash). Selected during blog cover curation; run scripts/pin-pexels-fast-match.py to pin photographer. |
| `parent-afterschool-reset-hero.jpg` | — | pexels | George Pak |  |
| `parent-bedtime-connection-hero.jpg` | — | stock | — | Licensed stock photography (Pexels or Unsplash). Selected during blog cover curation; run scripts/pin-pexels-fast-match.py to pin photographer. |
| `parent-homework-reset-hero.jpg` | — | stock | — | Licensed stock photography (Pexels or Unsplash). Selected during blog cover curation; run scripts/pin-pexels-fast-match.py to pin photographer. |
| `parent-morning-reset.jpg` | — | stock | — | Licensed stock photography (Pexels or Unsplash). Selected during blog cover curation; run scripts/pin-pexels-fast-match.py to pin photographer. |
| `parent-pause-reset.jpg` | — | original | GoodVibe Daily | AI-generated blog cover created for GoodVibe Daily. |
| `parent-sibling-reset-hero.jpg` | — | pexels | Pavel Danilyuk |  |
| `partner-schedule-pause-hero.jpg` | — | pexels | Ron Lach |  |
| `patience.jpg` | — | stock | — | Licensed stock photography (Pexels or Unsplash). Selected during blog cover curation; run scripts/pin-pexels-fast-match.py to pin photographer. |
| `pick-quote-by-mood-hero.jpg` | — | pexels | Vitaly Gariev |  |
| `pre-trip-anxiety-hero.jpg` | — | stock | — | Licensed stock photography (Pexels or Unsplash). Selected during blog cover curation; run scripts/pin-pexels-fast-match.py to pin photographer. |
| `productive-balance.jpg` | — | original | GoodVibe Daily | AI-generated blog cover created for GoodVibe Daily. |
| `quote-to-action-hero.jpg` | — | pexels | Cup of Couple |  |
| `quotes-journal-bridge-hero.jpg` | — | pexels | Erika Andrade |  |
| `regret-repair-reset-hero.jpg` | — | stock | — | Licensed stock photography (Pexels or Unsplash). Selected during blog cover curation; run scripts/pin-pexels-fast-match.py to pin photographer. |
| `school-morning-spiral-hero.jpg` | — | pexels | Ron Lach |  |
| `self-compassion.jpg` | — | stock | — | Licensed stock photography (Pexels or Unsplash). Selected during blog cover curation; run scripts/pin-pexels-fast-match.py to pin photographer. |
| `social-anxiety-evening-hero.jpg` | — | stock | — | Licensed stock photography (Pexels or Unsplash). Selected during blog cover curation; run scripts/pin-pexels-fast-match.py to pin photographer. |
| `start-meditating-5-minutes-hero.jpg` | — | pexels | Mikhail Nilov |  |
| `start-meditating-5-minutes.jpg` | — | pexels | Mikhail Nilov |  |
| `sunday-night-reset-hero.jpg` | — | pexels | cottonbro studio |  |
| `sunday-reset-hero.jpg` | — | stock | — | Licensed stock photography (Pexels or Unsplash). Selected during blog cover curation; run scripts/pin-pexels-fast-match.py to pin photographer. |
| `sunday-reset.jpg` | — | stock | — | Licensed stock photography (Pexels or Unsplash). Selected during blog cover curation; run scripts/pin-pexels-fast-match.py to pin photographer. |
| `todo-overwhelm-reset-hero.jpg` | — | stock | — | Licensed stock photography (Pexels or Unsplash). Selected during blog cover curation; run scripts/pin-pexels-fast-match.py to pin photographer. |
| `waiting-reply-reset-hero.jpg` | — | stock | — | Licensed stock photography (Pexels or Unsplash). Selected during blog cover curation; run scripts/pin-pexels-fast-match.py to pin photographer. |
| `wake-at-3am-reset-hero.jpg` | — | stock | — | Licensed stock photography (Pexels or Unsplash). Selected during blog cover curation; run scripts/pin-pexels-fast-match.py to pin photographer. |
| `what-is-cbt-hero.jpg` | — | pexels | Huỳnh Như Mavi |  |
| `work-public-blame-hero.jpg` | — | stock | — | Licensed stock photography (Pexels or Unsplash). Selected during blog cover curation; run scripts/pin-pexels-fast-match.py to pin photographer. |

Re-run `python3 scripts/build-image-sources.py` after updating `scripts/build-image-sources.py` overrides or running `scripts/pin-pexels-fast-match.py`.
