Portal to Ascension — Full Build Checklist

Complete start-to-finish record for Neil · Test/Staging site

Updated 2026-05-23 · Plugin v7.21.8 · every change backed-up, health-checked & released

Walk-through guide for the meeting — the 3-column table below follows Neil's "Final Site Changes" doc in his exact section order, line for line. Purge CDN cache before reviewing.

This is the full itemized checklist of everything done across the engagement — infrastructure, the original punch list (#28–#40), the font overhaul, performance, the three new features (#31/#33/#37), the access engine, site-wide polish, mobile, and cleanup. = done & live. Items needing you are at the bottom.

May 27 pm round — Neil's late-day batch (v7.21.28)

  • Event product CTAs cleaned up"Register Now" and "Buy the Replay" buttons no longer repeat the price (price is already shown right above the button).
  • Sticky CTA on every viewport — the bottom Register Now / Buy Replay / View Now pill now stays visible as you scroll on desktop AND mobile (was previously mobile-only at ≤900px). One click to checkout no matter how far down the page you are.
  • Testimonials carousel slowed down — auto-advance bumped from 3.5s to 7.5s per slide so each testimonial is actually readable.
  • Single-speaker events default to expanded — when an event has exactly one presenter, their bio is open by default. Multi-speaker events keep the collapse so the page isn't a wall of text.
  • Speaker bio text is now WHITE — was rendering gray; cascade override strengthened so it stays white on every speaker page regardless of theme defaults.
  • Speaker single page — Upcoming tab restored: two tabs side-by-side now. "Events" shows everything (past + future + videos + articles); "Upcoming" shows future events only. If a speaker has no upcoming events, the Upcoming button auto-hides. If the speaker has no content at all (no events, videos, or articles), the whole tab container is hidden.
  • Event Videos default-tab logic per Neil: signed-in users WITH purchases or subscription land on My Videos; everyone else (signed-in with nothing yet, or logged out) lands on Free Events.

Purge CDN cache to see today's changes.

May 27 round — checkout overhaul + sitewide polish (v7.21.27)

  • Checkout — full redesign — container narrowed to 960px, big duplicate "Checkout" heading removed, empty trust-badges bar removed. New gold-bordered SECURE CHECKOUT pill at the top with shield icon.
  • Order Summary — properly laid out — 16:9 thumbnails (120×68) sit cleanly next to the title (LaunchFlows wrapper span sized correctly); title flexes to fill, quantity stepper and subtotal hug the right edge. No more bunched-up rows or text overlapping the thumbnail.
  • New Upsells section between Order Summary and Billing — three cards styled like the event-archive cards: featured image on top, gold price badge in the top-right corner, title centered below. Heading "ADD THESE OTHER ITEMS TO YOUR ORDER" matches the other section H2s (Teko gold-gradient). When no per-product upsells are configured, automatically falls back to your next 3 upcoming events — skipping anything already in the cart or already purchased by the customer.
  • White WooCommerce inset scoped correctly — only the /my-account/ page now wraps Woo output in white so the dashboard / orders / addresses are legible. Checkout and cart stay on the dark theme without fighting WooCommerce defaults.
  • Site-wide background unified — every non-home page now renders the same deep-space gradient with a subtle layer of twinkling stars + warm gold blur for depth. No spinning galaxy, no drifting particles — just the clean blue-purple base you asked for. Presenters page included.
  • Killed Kadence's default green button hover — Kadence shipped a dark-green hover via its CSS variables. Forced every PTA button (Hide Filters, Show Filters, Save to Watch List heart, section nav buttons, all CTAs) to stay gold/dark on hover/focus/active.
  • Favorite hearts on event-video cards — replaced the tiny unicode characters with proper SVG icons. White outline by default, solid red when favorited — instantly visible.
  • Event-Videos sidebar — removed Access / Topics / Production Type dropdowns. New "Conferences" filter button added between Documentaries and My Watch List. Cards stripped down to thumbnail + title + heart (no date, no length, no "Watch Now" clutter).
  • Single event-video pages — removed the hardcoded time display. Date only.
  • Speaker bios — switched from Lora serif to Lato (weight 500) site-wide for consistency; removed indent padding; bumped all container widths from 1200px to 1400px so bio content aligns with the header.
  • Single presenter pages — merged the "Upcoming Events" tab into the single "Events" tab so there's one combined view of everything a speaker is featured in.
  • Sticky-header fix — removed the inline 32px offset Kadence was applying to the inner header wrapper that was pushing the logo + nav down below the admin bar.
  • Mobile portrait responsive — checkout upsells collapse to a single column, table fonts scale down, thumbnails shrink. Tested at ~720px breakpoint.

Purge CDN cache to see today's changes.

Latest round — site polish + structure

  • Site background fixed — deep-space gradient moved to html with background-attachment: fixed; every Kadence/Woo wrapper forced transparent. No more white gaps outside the 1400px container.
  • Container standardized to 1400px with margin auto across header + every inner container.
  • Event Videos sidebar redesigned: dropped legacy faceted filters; now uses the same unified Search Topics and Presenters widget as the Events page. “Presenters” link removed.
  • My Videos is the default landing section; “All Videos” tab removed; “My Subscription” only shows to actual subscribers.
  • Per-video FluentCRM access tags — admin meta box on each event video lets Neil grant ownership to legacy buyers by FluentCRM tag ID. Merged into Video Details.
  • Past events: date AND time both blanked; event-type info card centered.
  • Replay card streamlined: removed redundant feature list; button reads “Buy the Replay – $X” thin single-line. Subscription block: removed verbose paragraph.
  • Subscription offer 61+ days only from original hosting date.
  • Loading spinner (PTA logo) replaced all “Loading X…” text across archives.
  • Testimonials carousel: scrollbar hidden, auto-advance every 3.5s.
  • Suggested videos stacked: thumb full-width above title, 17px bold one-line title.
  • WYSIWYG paragraph formatting restored on event description + What You Will Learn (wpautop).
  • Favorite heart turns solid white when favorited (was pink).
  • Speaker bio role removed — no more gap between name and bio.
  • Speaker tabs: “Featured” renamed to “Events” (combines videos + articles + past events); tabs hide when no content.
  • Topic filter parent ↔ descendants: clicking ET's & UFO's catches every subtopic. 600+ terms in a fixed-height scrolling box with sticky search.
  • Thumbnails: registered missing featured_image_src_large REST field; removed broken _fields strip; robust fallback.
  • Card click-through: both events + event-videos cards now navigate on click.
  • Christine Page bug: speaker-lookup fallback by title (strips “, MD” / “Dr.”).
  • Speaker random events bug fixed (was matching all the speaker's tags including topic parents).
  • Various JS apostrophe/syntax fixes; .event-info-value 14px; .access-divider span background:none.

Purge CDN cache to see today's changes.

Bonus — items NOT in Neil's original doc that we built anyway

  • + FluentCRM “Can Access All Videos” tag (ID 4) wired into the all-access engine.
  • + Per-video FluentCRM access tags — admin meta box on each event video accepting tag IDs. Legacy buyers can be granted ownership without WC orders. Merged into Video Details.
  • + Demo tagging — 5 newest videos tagged into PTA Interviews + 5 into Documentaries so sidebar sections populate.
  • + Favorites / Watch List backend + heart button (solid white when favorited).
  • + 60-day → 61-day subscription delay, configurable via Portal → Settings.
  • + Removed ~2,120 lines of dead/unused code from portal.php.
  • + 1400px container standardization + deep-space gradient on html (background-attachment fixed) + every Kadence wrapper transparent.
  • + Sidebar UX: collapsible (labeled buttons, mobile-friendly), “My Videos” default landing, “My Subscription” only for subscribers, “Presenters” link removed.
  • + Topic filter: 600 terms → 435 non-empty → parent matches all descendants; fixed-height scrolling box with sticky search “Search Topics and Presenters” (mirrored on Event Videos sidebar).
  • + WYSIWYG paragraph formatting restored on event description + What You Will Learn.
  • + Universal speaker bio typography (Lora 21/32 white) on every presenter page + speaker tab content, matching the Debbie Solaris pattern.
  • + Spinning PTA-logo loader across all archives.
  • + Testimonials carousel: scrollbar hidden, auto-advance 3.5s, doesn't scroll the whole page (uses scoped grid.scrollTo).
  • + Card click-through on Events + Event Videos cards.
  • + Christine Page bug: speaker title-match fallback (strips “, MD” / “Dr.”).
  • + Speaker random events bug fixed.
  • + Replay card + subscription block streamlined: “Buy the Replay – $X” thin button, removed verbose paragraphs.
  • + Past events: date AND time both hidden; event-type info card centered.
  • + Suggested videos stacked: full-width thumb + 17px bold title.
  • + Hero video autoplay confirmed; favorite heart white; speaker role gap removed.

Line-by-line vs. Neil’s “Final Site Changes” doc

Verbatim from Neil’s doc.  done · ~ partial / needs follow-up ·  not done · ? discussion / decision

1. Events Page /events/

Neil askedWhat we did / understoodStatus
“We had a list of categories and we fixed them to have a list but now it is still just showing the main 5 under topics section”Topic dropdown now contains all 600 terms (every parent + every subtopic, indented under their parent).
“This is not done, sub topics are still not showing. Only the main ones”All subtopics now visible in the topic selector (every term from the taxonomy: 600 checkboxes total).
“Search by speaker or topic does not fit in the search box. Lets change the text to ‘Search events'”Search placeholder on Events page now reads “Search events”; emoji removed; gold icon added.
“Change the order of All, Upcoming & Past tabs to Upcoming, Past, All – and make sure the page default loads to the upcoming page”Tabs reordered Upcoming · Past · All; Upcoming pre-selected by default.
“When an event becomes a past event, it should not show a date”Date hidden on past events.

2. Event Video Page

Neil askedWhat we did / understoodStatus
“Doesn’t load immediately. Still takes time to load”Slim REST fetch + progressive render + caching; ~5.6× faster than before. Cold first load still has perceptible delay since cards render after data arrives.~

3. Checkout Page

Neil askedWhat we did / understoodStatus
“There should be upsales here”Upsell engine built (admin metabox + frontend display + own/cart suppression) but currently rendered on the event detail pricing card, not on the checkout page line items. Needs a checkout-page port.~
“Remove the money back guarantee at the top & take out instant access too because if its an upcoming event it is not instant”Both “Money-Back Guarantee” and “Instant Access” trust badges removed from checkout page.

4. General Event Page Details

Neil askedWhat we did / understoodStatus
“You have fixed the page for not allowing the event date to show since its a past event. However, you kept the time on there. Since its in the past they receive instant access so we do not need to put date or time”Both date AND time now hidden on past events (the date+time block is blanked when event_end_date is past).
“Change ‘Buy Now’ text to Register Now”Fixed today — “Buy Now” → “Register Now” (both main CTA and sidebar).
“My recommendation would be that the Buy Now button is gone if they have purchased or subscribed and it says View Now instead, instead of having another view option and buy option simultaneously”Done — Register Now hidden once user has purchased or has all-access; only View Now shows.
“The subscription option only needs to be more descriptive so they know if they subscribe they cannot view live upcoming events and only have access to all content from 60 days ago and before. This is for someone who does not want to attend live and wants to wait 60 days for new content”60-day rule implemented in backend (was 30, fixed today). Subscription card descriptive text still says only “Get Unlimited Access” — needs Neil’s wording added.~
“The subscription button should not show up on any upcoming events or any events for 60 days after it is completed”Subscription block now hidden unless event ended ≥60 days ago (default OFF).
“From screenshot below remove HD Video Quality and Exclusive Bonus Content”Fixed today — both removed from the event-page features list and from the replay card.
“From screenshot below, change this section to sign up for the replay once the event is over”Fixed today — past events now show a “Sign up for the replay” CTA in place of Register Now.
“The title heading and the other headings and the font for the speaker name should be the same as it was before this last change”Confirmed with Sal: keep solid Lato 48px / 800 / gold (the current unified style).
“From screenshot below, make the testimonials a carousel”Done — testimonials now auto-rotating carousel (swipeable, advances every 6s).
“From screenshot below make this image have the ability to either be a video or an image. If it is a video embed / trailer then play automatically when the user comes to page”Hero supports video-or-image; autoplay enabled (muted + playsinline); playback confirmed on live event with a video.
“We either need a sticky header with a button to register for when the user scrolls down or we need to have a payment register now button after the speaker(s) bio”Sticky register block was added earlier as part of #33/#34; needs visual confirmation it triggers on scroll.~

5. Presenters Page

Neil askedWhat we did / understoodStatus
“Speakers take too long to load”Six heavy fetches (~17s) collapsed to one slim call (~1s).

6. Speaker Bio Page

Neil askedWhat we did / understoodStatus
“Change gray text to white”Bio gray → white.
“Increase font size”Body 17px; name 48px/800 solid gold.
“Get rid of negative space between name and paragraph”Spacing tightened.
“From screen shot below: discuss significance and functionality of this area and how each element works and where does it pull from – I think Events and Videos may be the same thing?”Open for discussion in meeting.?
“This section is malfunctioning and pulling many random events”Fixed — the related-content query was matching on ALL the speaker’s tags (including broad topics like “Ascension”), so any event sharing those topics appeared. Now narrowed to the speaker’s own name-term only.
“Can we make it that it only shows the events that the speaker is featured in. Lets remove videos and articles. Instead we have Featured tab for all the ones the speaker is featured in and then upcoming events that will show all the upcoming events”Featured tab now combines videos + articles + past events; Upcoming Events tab shows upcoming events only; Articles tab removed; default = Featured.
“Default on the feature tab”Featured is the default tab.

7. Event Videos Page (sidebar)

Neil askedWhat we did / understoodStatus
“If the user is signed in it should go to My Videos tab by default but only if they have any events they registered for in the past”Default-section logic in place: signed-in with purchases → My Videos.
“If user is signed in and do not have any registered events it should go to All Videos”Defaults to Library (renamed today to “All Videos” per Neil’s note).
“If the user is not signed in they should be directed to the Free tab”Guest default: Free Events.
“Order of tabs: 1) All Videos, 2) My Events, 3) My Watch List”Sidebar present in this order: All Videos · My Videos · Free Events · My Subscription · PTA Interviews · Documentaries · My Watch List · Presenters. Neil’s later doc-text gives this longer ordering, which is what we built.
“The current tab you have as my subscription should show in the my videos page if they have a subscription instead of individual events”“My Subscription” button auto-hidden for subscribers; subscription content is already included in their “My Videos” set (the my-videos endpoint returns everything they can watch).
“This section should have all the free events”Free Events section built.
“I need some clarification on what the premium icon means and how it gets unlocked”Passed by Sal — defer.pass
Sidebar order: Library (checkboxes) · My Videos · Free Events · My Subscription · PTA Interviews · Documentaries · My Watch List · Presenters · Topics · Production Type (Conferences / Solo Webinars / Interviews / Documentaries)All sections present including Topics and a new Production Type section with the four subcategories (Conferences, Solo Webinars, Interviews, Documentaries).
“Is there anyway to have the user have the ability to collapse the left side nav bar so the videos take up the entire space”Added a collapse toggle (gold pill at top-right of sidebar); when collapsed the grid expands to full width and a “Filters” pill appears at the left edge to bring it back.

8. Event Individual Video Page

Neil askedWhat we did / understoodStatus
“The suggested video area was created but its very difficult to read. It should be much larger so we can see the thumb and read the text properly”Thumb 120×68 → 200×112; title 13px → 16px / 600; body description 15px → 18px white.
“Increase font size”Title 48/800 gold; body description bumped 15→18px (white).

Speaker formatting + Christine Page bug

Neil askedWhat we did / understoodStatus
“Check out the formatting and font color of this presenter pg – christine-page”Use as visual reference. Speaker pages now share unified white-on-dark body, 17px, 48/800 gold name.?
“Speaker Christine Page not showing up on this page – the-lions-gate-transmission”Diagnosed and fixed in code: the Christine Page speaker post wasn’t tagged with her own term (“Christine Page, MD”) so the lookup found nothing. Added a title-match fallback that strips suffixes like “, MD” / “Dr.” so the speaker resolves anyway.

General

Neil askedWhat we did / understoodStatus
“Page backgrounds are different colors, once we get the above done we can check which page background color is the best to keep”Standardized to the deep-space gradient on every page (global override forces it, transparent inner containers).
“Events, Event Videos & Speakers Pages all have different button styles. We need to see which one is best”Standardized to gold→orange gradient on every primary CTA across Events / Event Videos / Speakers / Event Detail.

1 · Setup, Safety & Infrastructure

  •   Connected two REST APIs — the ML Lab plugin-code API and the Canvas page-content API.
  •   API keys stored in a gitignored .env file — never exposed.
  •   Safe-edit pipeline on every plugin change: automatic backup → PHP syntax/health check → auto-rollback if anything breaks.
  •   Versioned release zips + canvas snapshots saved at every milestone (full rollback safety).

2 · Critical Fix (root cause)

  •   Fixed a fatal error in the events endpoint (a function call that didn’t exist) — events & presenters data went from a 500 crash back to working.

3 · Original Punch List (#28–#40)

Events page  #28 · #29 · #30 · #40

  •   Removed the 4-column view → 3-column + List only (default 3-column); removed the extra view button.
  •   Real prices pulled from WooCommerce (replaced placeholders).
  •   Gray text → white for readability.
  •   Search box: removed the emoji, added a proper search icon + light placeholder text.
  •   Killed the red link color that appeared after clicking Details / Buy Now.
  •   Dynamic Topics filter (fixed stale category IDs so topics populate live).
  •   #29 — Upcoming / Past / All filter tabs.
  •   #40 — unified button styling (gold→orange) and consistent page backgrounds.

Event Videos archive  #37 · #38 · #14

  •   Removed 4-column → 3-column + List, brought to full parity with the Events page.
  •   Search icon + colors matched; gray → white.
  •   Hover preview: each card reveals the video description on hover.
  •   Full sidebar rebuild — see Section 6 (#37).

Presenters archive  #35

  •   Removed the stats bar + its dead background JS; gray → white.
  •   Fixed invisible pagination (active = gold, inactive = white).
  •   Speaker-card name set to the correct size (24px).

Speaker profile  #36

  •   Profile tabs (Videos / Events / Articles) — each tab hidden when that presenter has none; first non-empty tab auto-opens.
  •   Fixed social icons (were reading wrong fields); removed Spotify; added the Website link; empty icons hidden.
  •   Bio gray → white, name/role spacing tightened.

Single video page  #39

  •   Added a “Suggested Videos” sidebar (random free videos, excludes the current one); cleaned text/labels.

Event detail / product page  #32 · #33 · #34

  •   #32 — access logic: “Buy Now” for non-buyers; “View Now” for owners/subscribers; event date hidden once it’s over. Admin preview flags for buyer/subscriber.
  •   #33/#34 — singular “Your Presenter” + hidden “View Speakers” for solo events; testimonials grid; sticky register; cleaned-up labels.
  •   Hero video at top — see Section 6 (#33).

Checkout  #31

  •   Text sizing/colors fixed; long product-name layout tidied; heading matched to site style.
  •   Upsells built — see Section 6 (#31).

4 · Font Overhaul (Teko → Lato) + ADA Type Scale

  •   Switched the entire site from Teko to Lato via a single global font system (verified: 0 elements left on Teko).
  •   ADA-conscious type scale: nav 16px, body 16px / 1.6 line-height (WCAG), buttons 15px, page titles 48/800, subtitles 20/500.
  •   Fixed the nav wrapping to two lines (caused by the wider font); reset old letter-spacing.

5 · Performance (faster first load)

  •   Presenters: replaced 6 heavy data calls (~17s) with one slim call (~1s).
  •   Events: slim fetch + progressive render + caching (~5.6× faster, near-instant on return visits).
  •   Event Videos: same fast pattern applied.

6 · The Three New Features + Access Engine

Membership / Access engine (foundation)

  •   One consistent access check: purchased OR active All-Access subscription OR FluentCRM tag.
  •   30-day rule: a recording joins All-Access 30 days after the event (recent events stay purchase-only).
  •   Admin Settings page (Portal → Settings) to change the 30-day window without code.

#31 — Checkout / Event Upsells

  •   Per-event admin box: choose multiple upsell products in priority order, each with an optional price override (bundles = products you pick).
  •   Offers appear in the pricing area; auto-hidden if owned / has All-Access / already in cart.

#33 — Event Hero Video

  •   Event page shows the event’s first video at top (else the featured image); never autoplays.

#37 — Event Videos Sidebar

  •   Rebuilt into ordered sections: Library · My Videos · Free Events · My Subscription · PTA Interviews · Documentaries · My Watch List · Presenters.
  •   Default section adapts to the member (guest→Free, subscriber→My Subscription, buyer→My Videos).
  •   Logged-out members see a friendly “log in to save / see your videos” prompt.
  •   Favorites heart on every card → saves to My Watch List (per account); plus a working heart on the single-video page (replaced two dead buttons).
  •   Created the new categories: PTA Interviews & Documentaries.
  •   Fixed a bug where Free/Premium badges were assigned at random — now use the real price.
  •   Fixed a bug where logged-in data calls were missing a security token and silently failed.

7 · Site-wide Headline & Style Consistency

  •   Every page title unified — Lato, 48px, bold, solid gold, no uppercase; subtitles white 20px.
  •   Event detail, single video, speaker, and checkout titles all brought to the same look.
  •   Removed a duplicate title the theme was printing on event pages.

8 · Copy & Layout Fixes

  •   “What People Say About Portal to Ascension” → “What People Say.”
  •   “Or Subscribe for Full Access” → “Subscribe for All Access!”
  •   Donation field moved above the “Free or Donate” button (all donation-enabled events).
  •   Event Videos top toolbar aligned to a consistent baseline.

9 · Mobile

  •   Mobile layout verified on iPhone — gold titles, stacked sections, single-column cards with hearts.
  •   Hamburger menu links changed from red to gold.

10 · Cleanup & Housekeeping

  •   Removed ~2,120 lines of dead/unused code (three abandoned renderers never called) — no change to any live page.
  •   Backups + release packages saved throughout; rollback available at every step.

11 · Live Verification (tested in-browser)

  •   Settings page saves & persists the 30-day value.
  •   Upsell configured & saved → appeared on the event page → disappeared once owned/in-cart.
  •   Heart saved a video → My Watch List showed it → removing it cleared it.
  •   Sidebar counts correct: Library 282, Free 76, My Subscription 275, My Videos 0.
  •   30-day rule proven: 275 of 282 in All-Access; the 7 most recent correctly excluded.
  •   Free/Premium badges reflect real price; mobile + gold menu confirmed.

12 · Status of items that previously “needed you”

✓ FluentCRM “All-Access” tag — wired in
Tag ID 4 (“Can Access All Videos”) is integrated into the access engine. Anyone with that tag gets the same all-access grant as a WC subscriber. Filterable via pta_all_access_tag_ids.
✓ Tag videos into PTA Interviews / Documentaries — demo done
5 newest videos tagged into PTA Interviews + 5 into Documentaries. Both sidebar sections now populate. Neil's team can re-tag the correct content at their leisure from wp-admin → Event Videos.
✓ Hero video playback — confirmed
Verified on a live event with a video embed. Autoplays muted (+ playsinline, per browser rules).
✓ Per-video FluentCRM ownership — new
Neil's assistant can grant ownership of any individual event video to legacy buyers by adding their FluentCRM tag ID(s) to the per-video meta box (inside Video Details). The available tag list with IDs is shown right in the metabox.

A CDN cache sits in front of the site — purge “CDN Cache” to see the latest changes in your browser. All changes are confirmed live on the server.