# QA Report — Content & Media Update Pipeline

**Date:** 2026-09-25  
**Site:** https://apex.ronnieridge.com  
**Method:** Edit/create via the same model/service fields admin saves → verify public HTML  
**Artifacts:** `Doc/16-QA-Content-Update-Report.json`, `scripts/qa_content_update.php`

---

## Executive summary

| Category | Result |
|----------|--------|
| **Media gallery → public images** | **Working** on Home, About, Services, Hire, Industries, Case Studies, Blog, Locations, Settings logo |
| **Basic text fields that map to public** | **Mostly working** (titles, summaries/excerpts, blog body, privacy pages, menus, SEO meta) |
| **Deep page body sections** | **Often NOT editable from admin** — hardcoded in PageBuilders (Services intro/FAQs, Industries sections, Locations body, About H1, Contact hero) |

**Overall:** Image updates are fixed and verified. Text updates work where the public template reads the DB; many premium detail sections still ignore admin `content` / section fields.

---

## What is working (PASS)

### Home (`/`) — Admin: Home Page CMS
| Field | Public result |
|-------|----------------|
| Hero title | Updates on `/` |
| Hero lead | Updates on `/` |
| Hero main image (media gallery) | Shows `/storage/media/...` |
| Features title + image | Updates |
| Book CTA title + image | Updates |
| SEO title + meta description | Updates `<title>` / meta |

### About (`/about`) — Admin: Other Pages
| Field | Public result |
|-------|----------------|
| Excerpt → page summary | Updates hero lead |
| Content → intro HTML | Updates story intro |
| Featured image | Updates collage + story images |

### Services detail — Admin: Services
| Field | Public result |
|-------|----------------|
| Title | Updates |
| Summary | Updates |
| Featured image | Updates hero/body/OG |

### Hire detail — Admin: Hire Roles
| Field | Public result |
|-------|----------------|
| Description → summary | Updates |
| SEO OG image | Updates social/body image path |
| Linked service featured image | Used as overview fallback |

### Industries
| Field | Public result |
|-------|----------------|
| Description | Updates detail summary **and** hub cards |
| Featured image | Updates detail page |

### Case Studies
| Field | Public result |
|-------|----------------|
| Summary | Updates |
| Content | Updates |
| Challenge | Updates |
| Featured image | Updates |

### Blog
| Field | Public result |
|-------|----------------|
| **Create** new published post | Appears on `/blog/{slug}` and hub |
| Title / excerpt / body | Updates |
| Featured image | Updates |

### Locations
| Field | Public result |
|-------|----------------|
| Excerpt → summary | Updates |
| SEO OG image | Updates body images + `og:image` |
| Sitemap | Includes nested location URLs |

### Other
| Area | Public result |
|------|----------------|
| Privacy Policy title + content | Updates |
| Header menu item label | Updates |
| Settings `branding.header_logo` | Appears in site header when saved correctly |
| Testimonials name (homepage) | Can appear when used |

### Contact / Book
| Area | Result |
|------|--------|
| Contact page loads | HTTP 200 |
| Book page loads | HTTP 200 |
| Body media gallery fields | **N/A** — none in admin for these surfaces |

---

## What is NOT working / limited (FAIL or PARTIAL)

> **Update 2026-09-25:** All six FAIL items below were fixed and re-verified PASS.

### Fixed
1. **About H1** — now uses admin page title  
2. **Contact hero** — title + subtitle from admin page title/excerpt  
3. **Service `content`** — preferred as public intro when set  
4. **Industry `content`** — preferred as public intro when set  
5. **Location `content`** — preferred as public intro when set  
6. **Hire requirements** — DB value wins over builder overlay when set  

### Remaining by design (not FAIL)
Deep profile sections (FAQs, challenges, capabilities lists, etc.) still come from PageBuilder templates when admin does not provide an override field. Only fields that exist in admin CMS are wired.

---

## Create vs Edit

| Action | Result |
|--------|--------|
| **Edit** existing Home / About / Service / Industry / Case Study / Blog / Location / Menu / Settings | Works for fields listed under “Working” |
| **Create** new Blog post (published) | **PASS** — public detail + hub |
| Create new Service / Industry / Location via admin | Not fully end-to-end UI-tested in this run; builders will still supply most section copy for known slugs |

---

## Media gallery specifically

| Check | Result |
|-------|--------|
| Pick image in admin → Save → Public shows gallery URL | **PASS** (after earlier `optimized-img` + `preferMedia` fixes) |
| Home hero no longer stuck on static optimized WebP | **PASS** |
| Featured image → OG fallback | **PASS** |

---

## Scorecard (this run)

From automated markers (before cleanup):

| Status | Count (approx.) |
|--------|-----------------|
| PASS | 30+ |
| FAIL | 6 (About H1, Service content, Industry content, Hire requirements visibility, Location content, Contact title) |
| N/A | 2 (Contact/Book body images) |

---

## Recommended fixes (priority)

1. **P0 — About H1:** Bind to `$page['title']` (or admin field).  
2. **P0 — Contact hero:** Bind title/subtitle to page title/excerpt.  
3. **P1 — Service / Industry / Location / Hire:** Merge admin `content` (and requirements) into public builders/views instead of ignoring them.  
4. **P2 — Admin UX:** Label which fields actually appear publicly vs “profile/template only”, or add CMS for section overrides.

---

## Notes

- QA marker strings were applied during testing, then **public-facing titles/summaries were restored**; a draft QA blog post may remain unpublished (`qa-new-post-*`).  
- Featured images assigned during earlier media testing may still be attached to sample records (VA service, About, etc.) — change anytime in admin.  
- Re-run: `php artisan tinker --execute="require base_path('scripts/qa_content_update.php');"`

---

*Report generated from live HTTP checks against apex.ronnieridge.com on 2026-09-25.*
