ETS content inventory

Working research for the ETS27 site redesign. Gathered on 2026-10-13 from public sources only. Nothing was written to any of them.

Companion files: ets-data-model.md (proposed schema, source mapping, concierge questions) and ../prototype/data/ets.sample.json (render fixture).

1. Method

Source How it was read What it gave
energythoughtsummit.com HTML curl of 22 public pages, converted to text Page copy, navigation, footer, forms, embeds
WordPress REST (/wp-json/wp/v2/) curl, paginated 21 pages, 91 "Speaker" records, 50 speaker categories, 5 posts, media, Content Blocks, post types, taxonomies
Whova public endpoints behind the lineup and agenda widgets Loaded the widget iframes in headless Chrome, logged the XHR calls, replayed the JSON ETS26 lineup (147 speakers) and agenda (68 sessions)
Eventbrite ETS27 event page Server-rendered JSON-LD, plus the view-only ticket panel in headless Chrome ETS27 dates, description, ticket classes and prices. No checkout step was submitted
Speaker pages (/speaker/{slug}/) One pass over all 91 rendered pages Job title and organization, which REST does not expose (see finding 5)

Browsers opened for this research were closed afterwards. robots.txt declares Crawl-delay: 10; the single pass over 91 speaker pages was a one-off, and the build should read REST and Whova snapshots, not scrape HTML.

2. Findings that change the plan

Read these first. Items 1 to 5 differ from, or go beyond, the working assumptions in the project brief.

  1. The WordPress "Speaker" records are the ETS25 archive, not the ETS26 lineup. The 91 portfolio records are tagged ets25 (90), ets24 (41), speakers-23 (35), speakers (69), featured (8) and tloy (1). There is no ets26 category. Records were created 2019-08 to 2025-05 and last edited 2025-08-27.
  2. The ETS26 lineup and agenda live in Whova, not WordPress. /lineup/ and /agenda/ contain no speaker or session text in WordPress at all, only Whova embed widgets (a 900 px iframe each). The data is public JSON on whova.com: 147 speakers and 68 sessions. Whova sends no CORS headers, so only a server-side job can read it.
  3. ETS27 is already announced and on sale. The live home page hero (Content Block 78148, "Free Your Mind Header", edited 2026-08-11) reads "FREE YOUR MIND ... coming soon May 3-6, 2027 | Austin, Tx" with an ETS27 Eventbrite button. Eventbrite lists the 14th ETS flagship, Monday May 3 to Thursday May 6, 2027, 8 AM to 5:30 PM, on sale since 2026-06-17, four ticket classes from $320.89 to $1,227.91 including fees, no refunds.
  4. ETS27 is four calendar days (Mon to Thu), not three. ETS23, 24, 25 and 26 all ran Monday to Thursday by their published dates, and Thursday was a half day in ETS23 (ends 1:00 PM), ETS24 (about 12:15 PM) and ETS26 (12:30 PM); the ETS25 agenda is not on the site. The fixture models four days.
  5. Job title and organization are not in the REST output. They are Uncode dynamic tokens, {company-title} and {company-name}, backed by custom fields that REST does not expose (meta returns only footnotes and a MonsterInsights flag). content.rendered is raw, unexecuted WPBakery shortcode with the tokens unresolved. Only the bio survives inside [vc_column_text]. Recovery used the rendered page (<span class="company-title">, <span class="company-name">). The durable fix is register_post_meta(..., 'show_in_rest' => true) on the portfolio type.
  6. Roles change between editions. Of the 147 ETS26 speakers, 35 match an ETS25 WordPress record by name, and many changed employer or title (for example Raiford Smith: AES to Google; Carlos Ayala: NiSource to Mentora; Damali Harding: Regulatory Assistance Project to Amendment Nine). A speaker row must be per edition, with a stable person behind it.
  7. Stale, demo and broken content is live. See section 4 and section 11. The most visible: the home page meta description still says "ETS25 | Ethos | May 19-21 2025", every title tag ends with the tagline "hack_the_planet [INITIATE]", /about/ is an unedited Uncode demo template, and /sponsor/ still says "start@ETS19".
  8. Whova data is thin where a concierge needs depth. 43 of 147 speakers have a bio, 47 of 147 have only a generic avatar, 9 of 68 sessions have a description, 22 have a room, none have tags, and the 8 Whova "tracks" are formats (Keynote, Panel ...), not themes.
  9. The venue is not announced. Eventbrite shows only the location name "Austin" with a street pin (713 Congress Avenue, Austin, TX 78701). Treat the pin as unconfirmed.
  10. The only sponsor facts are logos. 39 logos in six tiers; alt text and links are empty, so names came from file names.

3. System map

Layer What Evidence
CMS and theme WordPress, Uncode theme with the zpryme-child child theme, WPBakery shortcodes in post content Asset paths /wp-content/themes/uncode/ and /zpryme-child/; [vc_row] shortcodes in REST content
Hosting and edge WP Engine origin behind Cloudflare x-powered-by: WP Engine, server: cloudflare, cf-cache-status headers
Plugins seen Yoast SEO, MonsterInsights (GA4), Gravity Forms (+ reCAPTCHA add-on), WP Engine cache and sign-on, Post Duplicator REST namespaces yoast/v1, monsterinsights/v1, wpe/cache-plugin/v1, wpe_sign_on_plugin/v1, post-duplicator/v1; page markup
Lineup and agenda Whova event app, embedded whova-speaker-widget.js on /lineup/, embedagenda.js on /agenda/
Ticketing Eventbrite, organizer Zpryme, affiliate parameter aff=oddtdtcreator Register links, event page
Newsletter Mailchimp (eepurl link and a footer email field) Footer
Video YouTube channel, "LoFi" playlist, news posts are YouTube embeds Footer, /news/
Hotels Passkey booking link /venue/
Organizer and siblings Zpryme (zpryme.com), etsinsights.com (research) Eventbrite organizer text, footer copyright

4. Page by page

21 WordPress pages plus archives. Scope labels: ETS27, ETS26, Evergreen, Archive (past edition, still true), Stale (wrong now), Junk (not ETS content).

Path WP id What it holds Content source Scope Modified
/ (page slug ets26) 77812 Hero from Content Block 78148: "FREE YOUR MIND", "...coming soon", "May 3-6, 2027 / Austin, Tx", Register button (ETS27 Eventbrite). Below it the ETS26 body: "Join us April 27-30 in San Antonio, TX > Boeing Tech Center", the 13th-ETS paragraph, a second Register link ("// REGISTER_TODAY") to the ETS26 Eventbrite event, "2026 Thought Leaders" link to /lineup/, a partner logo strip (17 unlinked tiles), five news video cards, a "We Know Events" YouTube video, the "hack_the_planet" mission paragraphs, "// VIEW_AGENDA" WPBakery plus Content Blocks Mixed: ETS27 hero over ETS26 body 2026-08-26
/lineup/ 77996 "Lineup" heading, Whova speaker widget, "Call for proposals" link to Whova abstract management Whova embed ETS26 2025-10-16 (widget is live)
/agenda/ 77999 "Agenda is Tentative - Subject to Change", Whova agenda widget titled "Event Schedule" with four day tabs Whova embed ETS26 2025-10-23 (widget is live)
/venue/ 72289 Boeing Center at Tech Port, 3331 General Hudnell Dr, San Antonio, TX 78226, phone, website; Hotel Contessa overflow with Passkey link; Westin room block "now full"; shuttle statement; a named Zpryme events contact email WPBakery ETS26 2026-04-06
/partners/ 72384 Six tiers, 39 logo images; "Become a partner" paragraph ("...leading up to April"); Gravity form (name, email, involvement interest, message) WPBakery plus media ETS26 logos, stale copy 2026-04-27
/gallery/ 75769 55 photos in a lightbox grid, all uploaded August 2023 WPBakery plus media Archive (ETS23 photography) 2023-08-14
/contact/ 72295 Phone, fax, shared email, Gravity form with Subject list Gravity Forms Evergreen 2024-07-03
/news/ n/a Blog archive: five video posts dated 2024-09-24 (ETS14, 15, 16, 17 and 23 recaps) post type Archive 2024-09-30
/ets25/ 76844 "2025 Thought Leaders" grid: 90 speaker cards (photo, name, optional "TLOY yyyy" label, title, org). The only WordPress-rendered speaker grid. Nav item "ETS25 Speakers" portfolio index Archive 2025-08-27
/ets24/, /ets24-highlights/ 75717, 76491 ETS24 microsite: theme "Imagine", Mon-Thu agenda authored as tabs, 43 speaker cards, highlights page WPBakery Archive 2024-07-03, 2024-05-15
/ets23/, /agenda23/, /lineup23/ 74766, 72523, 72367 ETS23 microsite: 10th anniversary, Hotel ZaZa Austin, "keep earth weird" theme, four-day tabbed agenda with room names (the agenda page is 1.8 MB of HTML) WPBakery Archive (the ETS23 header still shows ETS24 dates) 2023-08
/chicago/, /sacramento/, /at/ 76737, 76897, 76294 "ets@events" one-day regional events: Chicago 2024-07-17, Sacramento 2024-10-24, Miami Feb 2025, Research Triangle Jul 2025; media kit PDF; Eventbrite links WPBakery Archive 2024-07 to 2024-11
/sustainability-promise/ 75523 Sustainability commitments written for an Austin edition (Hotel ZaZa, Cap Metro Austin), exclusive sustainability sponsor SEW WPBakery Evergreen with edits 2023-03-24
/sponsor/ 72294 "Become a partner" and form; text says "start@ETS19" and "leading up to October" WPBakery Stale 2022-06-02
/volunteer/ 77755 Gravity form asking availability "5/19-5/22" (ETS25 dates) Gravity Forms Stale 2025-04-29
/live/ 75671 A heading and nothing else none Junk (empty) 2023-04-06
/about/ 44894 Uncode demo template ("Informed Creativity", "Demo media", placeholder team photos). The nav "About" item points at #about, not this page none Junk 2022-05-29
/speaker/, /speaker/{slug}/ n/a Portfolio archive and 91 single pages. A single page shows photo, name, company-title, company-name, bio portfolio type Archive 2025

The REST API lists no other published pages. Sitemaps exist for post, page, portfolio, portfolio_category, page_category and author.

5. Global chrome

6. WordPress REST: what it exposes

6.1 Endpoints

Endpoint Anonymous result Notes
/wp-json/wp/v2/portfolio?per_page=100&page=N&_fields=... 200, 91 records (x-wp-total: 91) REST name for speakers. Max per_page is 100. About 380 KB with content for all 91
/wp-json/wp/v2/portfolio_category?per_page=100 200, 50 terms See 6.3
/wp-json/wp/v2/pages?per_page=50&_fields=id,slug,title,link,modified,status 200, 21 pages Titles and links only; page bodies are WPBakery
/wp-json/wp/v2/posts 200, 5 posts All five are one YouTube iframe each; empty excerpts
/wp-json/wp/v2/media/{id}?_fields=id,source_url 200 for 88 of 91 speaker images media_details (sizes) is stripped from responses. Featured images for Jason Handley (73553), Amy Atchley (74520) and John D. Hewa (75231) return 401
/wp-json/wp/v2/uncodeblock 200, 147 blocks About ten are real ETS blocks (hero, header, tickets); the rest are Uncode theme demos
/wp-json/wp/v2/menus, /menu-items 401 Navigation must be mirrored by hand
/wp-json/wp-abilities/v1/abilities 401 WordPress Abilities API is present but not public

Cross-origin: access-control-allow-origin echoes the caller's Origin with credentials allowed, so a browser can call WordPress REST from another origin. Responses carry cache-control: max-age=600, served via Cloudflare.

6.2 portfolio (speaker) field mapping

REST field Holds Target field Gotchas
id WordPress post id wp.id
slug URL slug, permalink is /speaker/{slug}/ slug john-d-hewa-copy is actually Janet Rehberg (a cloned post that was never re-slugged)
title.rendered Name name HTML-encoded (&#8217;); decode
content.rendered Raw WPBakery shortcodes bio See the parsing recipe below
excerpt.rendered First words of the shortcode text none Useless; ignore
featured_media Attachment id photo (via media/{id} source_url) 3 of 91 return 401; no alt text anywhere
portfolio_category Term ids categories, edition tags See 6.3
menu_order Sort weight none 73 of 91 are 40; effectively unsorted
date, modified Created and edited wp.created, wp.modified Range 2019-08-15 to 2025-08-27
(not in REST) {company-title}, {company-name} Job title, organization title, org Recover from the rendered page or expose via register_post_meta
(not in REST) "TLOY yyyy" label Thought Leader of the Year honor honors[] Label in markup only: Paul Lau 2021, Emeka Anyanwu 2022, Nancy Bui-Thompson 2025. The tloy term holds one record
yoast_head_json SEO tags none Titles read "Name - hack_the_planet [INITIATE]" (pipe-separated in the markup)

Parsing recipe for content.rendered: decode HTML entities; replace the texturized quote characters that WordPress turned the shortcode delimiters into (U+201C, U+201D and U+2033) with plain quotes; take the text inside [vc_column_text ...] ... [/vc_column_text]; strip tags. Result: 77 of 91 records have a bio (median 158 words, range 40 to 360). The other 14 contain only the template (about 2,000 characters) and no bio. back_image inside [vc_row] is the header background image id; vc_single_image dynamic="yes" means "use the featured image".

6.3 Speaker categories (50 terms)

Term Meaning Records
ets25 ETS25 lineup tag 90
ets24 ETS24 tag 41
speakers General speaker tag 69
speakers-23 ETS23 tag with 44 child terms: 32 match ETS23 session titles verbatim (for example "Outage Prediction and AI"), the other 12 are slot labels (for example "330 Keynote Monday", "Wednesday 840") 35
featured Curated highlight 8 (Paul Lau, Emeka Anyanwu, Nancy Bui-Thompson, Shaun Hoyte, Kimberly M. Britton, Erin Autin, Raiford Smith, David Wade)
tloy Thought Leader of the Year 1

The ETS23 child terms are the only structured speaker-to-session link in WordPress, and they cover 2023 only. One record (Hebah Bukhari) is ETS23-only; 40 are ETS25-only.

7. Speakers: two sources

WordPress archive Whova ETS26
Records 91 147 (123 scheduled, 24 not yet scheduled)
Fields name, bio (inside shortcode), photo, categories; title and org via page scrape pid, name, title, company, bio, photo, confirmed sessions with role
Bios 77 43
Real photo 88 (3 return 401) 100 uploaded, 47 generic default avatar
Edition ETS23 to ETS25 ETS26
Sessions linked ETS23 only, through category terms Yes, every scheduled speaker, with Speaker or Moderator role

Whova speakers by session count: 24 have none, 109 have one, 11 have two, 2 have three, 1 has six. Whova flags 12 "highlight speakers"; all have two or more sessions (14 speakers do), including Zpryme CEO Jason Rodriguez, who has six.

Data-quality items seen in these sources:

8. Agenda structure actually used

8.1 ETS26 (Whova)

Day Date Sessions Hours
Monday Apr 27 17 08:15 to 21:00 (registration, opening, panels, lunch, reception)
Tuesday Apr 28 20 08:15 to 20:00 (includes parallel breakouts)
Wednesday Apr 29 22 08:15 to 20:00 (includes parallel breakouts)
Thursday Apr 30 9 08:30 to 12:30 (half day, closing session, event close)
Format Sessions Typical length
Keynote 12 10 to 15 min
Panel 12 45 min (a few at 15 to 30)
Fireside Chat 9 30 min (15 to 45)
Breakout 6 45 min
ETS Talk 3 10 to 15 min
Town Hall 3 45 min
Workshop 1 45 min
Feature Short-Doc 1 10 min
No format (registration, meals, breaks, receptions, openings and closings) 21 5 min to 8 h 45 min

8.2 ETS23 and ETS24 (WordPress)

The agenda was typed into Monday-Thursday tabs as lines of "time | title | room" with names and affiliations below. ETS24 marketing framed the event as Imagine, Dream, Create, and used five themes (Decarbonization, Resilience, Equity, Analysis, Modernization) as labels on panels and fireside chats ("Analysis Panel", "Resilience Fireside Chat", "Equity Panel", "Decarbonization Fireside Chat"). ETS23 and ETS24 opened Monday with the EnergyTech University Prize pitch event and workshops. ETS26 dropped the thematic labels, added Town Hall and Feature Short-Doc formats (neither word appears in the ETS23 or ETS24 agendas), and moved to Whova.

9. Sponsors

10. Registration and get-involved flows

Action Where Notes
Register Nav button and home hero go to Eventbrite event 1997048303234 (ETS27). The home body still links to ETS26 event 1549733918869. Two Register CTAs with different events on the same page
Tickets Eventbrite Four classes in two audiences and two price phases (below). Hidden tickets exist (hasAvailableHiddenTickets: true). No refunds. Ticket sales end 2027-05-07 23:59 CT per the ticket API (JSON-LD says 2026-12-23)
Speak or nominate /contact/ Subject list, Whova "Call for proposals" link on /lineup/ The Whova call is an ETS26 artifact
Sponsor /partners/, /sponsor/, /contact/?opt=Sponsor
Volunteer /volunteer/ Stale ETS25 dates
Newsletter Footer email field, Mailchimp
Hotel Passkey link on /venue/ ETS26
Contact Shared email, phone, fax, Gravity form Subject options: Endorse Thought Leader of The Year, Nominate Thought Leader, Attend, Media, Sponsor, Speak, Other

ETS27 ticket classes as read on 2026-10-13 (prices include Eventbrite fees; base price is price minus fee):

Audience Phase Price with fees Fee Base Window
Industry 1 $907.78 $58.78 $849.00 On sale, ends Nov 19, 2026
Government & Utility 1 $320.89 $21.89 $299.00 On sale, ends Nov 19, 2026
Industry 2 $1,227.91 $78.91 $1,149.00 Starts Nov 20, 2026
Government & Utility 2 $374.25 $25.25 $349.00 Starts Nov 19, 2026

What a ticket includes is not published.

11. ETS26-specific versus evergreen

Content Class For ETS27
Dates, venue, hotel, shuttle, room names ETS26 Replace
Lineup, agenda, "2026 Thought Leaders", "Call for proposals" ETS26 Replace; new Whova event or CMS
Partner logos and tiers ETS26 Replace; keep the tier names if still used
"hack_the_planet" hero canvas (29 KB raw HTML, includes the 1986 Hacker Manifesto text), tagline, mission copy, #LoveYourEnergy ETS26 Retire; hashtag may carry over (Eventbrite ETS27 copy uses it)
Home body (13th ETS paragraph, ETS26 Register link) Stale once the hero changes Replace
ETS27 hero, Eventbrite listing, ticket tiers ETS27 Keep; single source needed
Contact details, form subjects Evergreen Keep
Zpryme and ETS descriptions, "We Know Events" video Evergreen Keep, refresh
Sustainability Promise Evergreen (Austin-era text) Revise names and sponsor
Gallery (2023 photos), news videos, ETS23 to ETS25 microsites, ets@events pages Archive Keep as "past editions"; fold into one archive
Thought Leader of the Year honorees Evergreen program Keep as a model entity
/about/, /live/ Junk Delete or rewrite
/sponsor/, /volunteer/ copy Stale Rewrite
Press logos on ETS23 and ETS24 pages (Texas Tribune, TechCrunch, NYT, NBC, Houston Chronicle, Forbes, Chicago Tribune, Bloomberg Businessweek, Austin Statesman, ABC) Evergreen claim, unverified Confirm with Zpryme before reuse

12. Gaps ETS27 must fill

Gap Why it matters Likely source Interim in prototypes
Venue name, address, rooms, accessibility, parking Most common visitor question Zpryme events team venue.placeholder: true, say "to be announced"
Host hotel, room block, booking link, deadline Second most common Zpryme (ETS26 used a Passkey link) FAQ placeholder
Travel and local transport Out-of-town attendees Zpryme, Austin local content Sustainability Promise text
Lineup (names, titles, orgs, bios, photos) Core of the site ETS27 Whova event or CMS ETS26 speakers flagged as stand-ins
Agenda (days, sessions, rooms) Core of the concierge ETS27 Whova event ETS26 program relabeled to ETS27 dates
Sponsors and tiers for ETS27 Revenue and trust Zpryme partnerships ETS26 partners flagged as stand-ins
Ticket inclusions, group rates, press and speaker rates Conversion Zpryme Listed as "not published"
FAQ (dress, accessibility, wifi, refunds, children, dietary needs) Self-service Zpryme 8 starter items, 3 placeholders
New Whova event for ETS27 (eid) and call for proposals Data feed Zpryme (organizer account) None
Theme story and imagery for "Free Your Mind" Experience design Design Out of scope here
SEO and social metadata (title, tagline, description, og:image) Every share today says ETS25 or ETS26 Content owner Out of scope here
About page Trust Zpryme Use the home mission copy and Eventbrite organizer text

Prior Austin context that may help: ETS23 was at Hotel ZaZa, Austin; the ETS24 pages reviewed do not name a venue.

13. Headless path

The WordPress site can stay the CMS and the new front end can read it over REST. That works only if four things are done:

  1. Expose what REST hides. Register the company-title and company-name fields (and a TLOY field) on the portfolio type with show_in_rest, and add a public endpoint for navigation. Without the first change, the front end must scrape rendered pages.
  2. Add an Event record. Today the ETS27 dates, city and Register link exist only inside a WPBakery shortcode in Content Block 78148 and in Eventbrite. A small Event options page or custom post type (dates, city, venue, hotel, ticket URL, status) exposed over REST becomes the one place staff edit those facts.
  3. Treat Whova as the lineup and agenda system of record, read server-side. A scheduled job fetches the two public endpoints, normalizes them (decode text, role mapping, type mapping), validates, and writes a snapshot the front end reads. The snapshot is a derived cache, not a second editable copy. The endpoints are undocumented but public, with no CORS, so ask Zpryme whether an official Whova API credential is available before relying on them in production.
  4. Read ticket facts deliberately. Eventbrite shows tiers only inside its checkout panel. If the organizer has an Eventbrite API token, use it; otherwise mirror the tier table into the Event record by hand.

Operating principles:

14. Reproduction notes

All URLs are public. The Whova event ids below are public embed identifiers from the page source.

WordPress   https://energythoughtsummit.com/wp-json/wp/v2/portfolio?per_page=50&page=1&_fields=id,slug,title,content,excerpt,featured_media,portfolio_category,date,link,menu_order,modified
            https://energythoughtsummit.com/wp-json/wp/v2/portfolio_category?per_page=100
            https://energythoughtsummit.com/wp-json/wp/v2/pages?per_page=50&_fields=id,slug,title,link,parent,menu_order,modified,status
            https://energythoughtsummit.com/wp-json/wp/v2/uncodeblock/78148
Whova       https://whova.com/xems/apis/event_webpage/speaker/public/get_speaker_webpage_data/?event_id=r4mBuGC626Esj8gQSgbHcrXZruHCw5gTny4Uh8CMiKU%3D
            https://whova.com/xems/apis/event_webpage/agenda/public/get_agendas/?event_id=SX1lc1KEBY2FSjxT1zzey0KCp4cyMTC%403Zg0EYVuZxY%3D
Eventbrite  https://www.eventbrite.com/e/ets27-tickets-1997048303234
            https://www.eventbrite.com/e/api/1997048303234/ticket-information (called by the page; returns class count, price range, sale window)

The speaker widget and the agenda widget use two different embed ids; both resolve to the event named "Energy Thought Summit (ETS) 2026". The fixture builder joined speakers to sessions through the Whova session id, kept in each fixture session under source.whova_session_id.