## 3.85
- Added a primary “Return to Quote” button to the Event Hero callback confirmation so visitors can resume the same Harmony quote after requesting human help.
- Kept “Return to Home Page” as a secondary option. Callback requests remain submitted when the visitor returns to the quote.

## 3.84
- Help callback popup: changed the branded heading to “We’ll have an Event Hero call you.”
- Removed the redundant callback instruction line directly beneath the heading.

# Harmony 3.64

- Added a one-click **Send Test Office Alert Text** diagnostic under Settings → Integrations → Twilio SMS.
- The diagnostic uses the same Twilio send function and resolved office destination as abandonment and Help Needed office alerts.
- Added a visible resolved office alert destination so administrators can confirm the live target before testing.
- No quote, pricing, venue, abandonment timing, or customer delivery logic was changed.

# Harmony 3.63

- Widened the mobile year selector so four-digit years no longer clip beside the native chevron.
- Added a mobile-only quote continuation cue: “↓ Scroll down for full price details & options.”
- Shortened the mobile date placeholder to `MM/DD/YYYY` while retaining the full desktop example and flexible date parsing.
- Added clear venue helper guidance: visitors may type any venue name or city; for private residences, city is enough.
- Shortened the venue placeholder to `Venue name or city` and clarified the venue-search fallback note.
- Preserved all Harmony 3.62 location rescue, five-minute inactivity, office SMS/email, pricing, completion, and notification behavior.

# Harmony 3.62

- Fixed city-only venue intake loops. Recognized Michigan localities such as Carleton are stored as the city and Harmony asks for the venue name next.
- Added generic loop prevention for future localities: an explicit `City MI` / `City, Michigan` entry is treated as a city, and repeating the same place after Harmony asks for its city is interpreted as “that is the city.”
- Venue remains the primary path, with `I Don't Know Yet` and `Private Residence` available only as secondary options.
- Added Carleton spelling recovery for `Carlton`, `Calrton`, and `Calton` while keeping service-area qualification separate from place-name recognition.
- Added a one-clarification maximum for unresolved venue/city entries, followed by a Help Needed rescue instead of another loop.
- Help Needed rescue saves the visitor's information, shows a clear human-follow-up message, sends the customer a reassurance SMS, sends the office an email and SMS, and cancels abandonment.
- Changed incomplete-quote abandonment from three minutes to five minutes of true inactivity.
- Added a throttled authenticated browser activity heartbeat so typing, calendar interaction, and clicking inside Harmony refresh the inactivity clock without interrupting the quote.
- Office now receives an abandonment SMS in addition to the existing abandonment email; customer abandonment SMS remains active. Each delivery channel is tracked independently so a retry cannot duplicate a channel that already succeeded.
- Enabled Month and Year dropdown choices now render solid black; only genuinely unavailable past-month choices remain gray.
- Preserved Harmony v3.61 launcher, Back navigation, Admin Test, pricing, quote calculations, DJEP/webhook flow, progress, resume, and notification behavior outside this scope.

# Harmony 3.61

- Site-wide Ask Harmony launcher now appears after roughly 500px of page scrolling instead of immediately.
- Site launcher is now available on mobile as a compact lower-right bubble.
- Desktop launcher keeps the existing pill style.
- Launcher remains suppressed on pages where the full Harmony chat is already rendered.
- No quote, pricing, availability, DJEP, notification, or customer-flow logic changed.

# Harmony 3.60

- Integrated the Back button into a consistent navigation strip on desktop and mobile.
- Kept the Back button compact on phones so it does not crowd the composer or action buttons.
- Increased desktop/laptop conversation scrollbar width and contrast for easier discovery and dragging.
- Left mobile touch scrolling behavior intact.
- No quote, pricing, availability, Admin Test, DJEP, notification, resume, or Back-navigation logic changed.

# Harmony 3.59

- Fixed Admin Test REST authentication after the protected test session starts. Admin-only REST calls now include the WordPress REST nonce, so authenticated administrators remain authenticated while walking through the normal Harmony flow.
- Added server-side ownership validation so an Admin Test session can only be continued by the same authenticated WordPress administrator who created it. Customer-facing behavior and all production quote/notification logic are unchanged.

# Harmony 3.58

- Reworked Admin Test Mode to walk the real customer flow with safe sample contact prefills, server-side test isolation, TEST MODE indicator, live version display, Reset Test, Preview Help, and Preview Snafu controls. Calendar, venue, Back navigation, progress, and conditional paths remain interactive. Admin Test sessions do not create lead records or trigger customer/office SMS, email, abandonment, non-quote reports, webhook/DJEP delivery, or ASAP callback alerts.

# Harmony 3.57

- Replaces the temporary Edit name / cell / email control with a true Back button throughout the quote-intake steps.
- Back returns to the previous intake question and lets the visitor correct the saved answer without restarting the quote.
- Back works with the calendar step and conditional Multiple Services / Other Event screens.
- Existing quote logic, pricing, availability, sold-out checks, lead storage, DJEP fields, abandonment, resume, and notifications remain unchanged.
- The Back action is handled server-side so corrected answers remain synchronized with the active Harmony session.

# Harmony 3.56

- Restored strict first/last-name title casing in the browser so every name word is capitalized before display/submission.
- Added First and last name to the existing contact correction dialog.
- Renamed the correction control to “Edit name / cell / email”.
- Contact edits now update the active session name through the same secured contact endpoint, with server-side name validation/title casing.
- The correction control remains hidden on the calendar step and afterward, preserving the clean 3.55 date experience.

# Harmony 3.55

- Hid the **Edit cell / email** control as soon as Harmony reaches the event-date calendar screen.
- The edit control remains available during the contact/service steps before the calendar.
- No contact values, resume data, notifications, availability logic, or quote logic were changed.

## 3.54
- Contact correction control now remains available through the event-date calendar step, then automatically hides as soon as Harmony advances beyond the selected date.
- No changes to saved contact data, resume behavior, notifications, or quote logic.

## 3.53
- Reordered calendar jump controls to Year first, then Month for faster future-date selection.
- Current-year month dropdown disables months that have already passed.
- Future-year selection immediately enables all months while preserving existing date logic.

## 3.52
- Added a WordPress setting for the calendar's first displayed year.
- Calendar year dropdown now shows exactly five years.
- The effective first year automatically rolls forward to the current year, so past years disappear without manual maintenance.
- Existing calendar, availability, sold-out-date, quote, resume, and notification logic is unchanged.

## 3.51
- Added clear down-arrow indicators to the Month and Year calendar dropdowns so visitors immediately recognize both controls as selectable.
- Preserved the compact 3.50 calendar layout and all existing date logic.

## 3.50
- Replaced bulky year-button row with compact month and year dropdowns in the calendar header.
- Reduced desktop calendar height so the full picker fits the Harmony window better.
- Preserved direct month navigation, future-date restrictions, and contact correction tools.

## 3.49
- Added quick year jumping and a month selector to the inline event calendar so next-year dates do not require repeated arrow clicks.
- Made the desktop calendar bolder and easier to scan while keeping the mobile calendar contained.
- Added an Edit cell / email control so customers can correct contact typos without restarting or losing quote progress.
- Contact edits update the active Harmony session and saved browser contact data without advancing the conversation.

## 3.48
- Replaced the event-date text field and calendar launch button with an always-visible inline calendar at the event-date step.
- Added larger centered desktop date targets, compact mobile sizing, past-date blocking, month navigation, and long-form confirmation while preserving the existing ISO date submission path and quote logic.

## 3.47
- Replaced normal typed event-date entry with a prominent native date picker in desktop and mobile Harmony interfaces.
- Added a large calendar control plus long-form visual date confirmation while preserving ISO date submission and existing quote logic.
- Prevented past dates at the picker UI and kept the date control within the Harmony container on narrow mobile screens.

## 3.45

- Changed the event-date input placeholder to `MM/DD/YYYY • Example: 07/31/2027` so visitors have an immediate format example.
- Preserved flexible date entry and added natural month-name short-year parsing, including `July 31 27` and `July 31, 27`, which normalize to 2027.
- Existing full-year natural dates such as `July 31 2027` and numeric formats such as `7/31/27` remain accepted.
- No changes to pricing, quote flow, venue behavior, notifications, progress, desktop contrast, or mobile layout.

## 3.44

- Improved desktop/laptop white-on-blue readability by changing standard blue answer buttons and visitor reply bubbles from the bright `#1597d4` to deeper `#0d6596`.
- White text contrast improves from approximately 3.3:1 to approximately 6.3:1.
- Scoped the color change to viewports 701px and wider and explicitly excluded `.harmony-device--mobile`, preserving mobile colors and layout.
- Header, progress bar, yellow controls, pricing, quote calculations, venue handling, notifications, Quick Test, and completion behavior are unchanged.

## 3.43

- Improved desktop/laptop chat readability without changing mobile typography or layout.
- Increased assistant and visitor bubble text to 16px on desktop with roomier line-height and padding.
- Widened desktop chat bubbles so longer questions wrap less aggressively.
- Reduced ultra-heavy assistant text from 900/950 to a crisper 800 weight on desktop.
- Darkened desktop input placeholder text for clearer readability.
- Preserved Harmony 3.42 venue recovery, instant add-on pricing, quote return, email retry, Test Mode, progress, and quote logic.

## 3.42
- Added high-confidence natural venue matching so phrases such as `Woodbridge in Bridgeport` can resolve the saved venue record and DJEP venue ID without another city loop.
- Added Bridgeport, Michigan to the approved service-area city recognition list.
- Venue corrections now replace unresolved location fragments instead of stacking conflicting answers.
- Post-quote FAQ answers re-render the active deterministic quote and no longer duplicate `Any other questions?`.
- Added deterministic service-price answers and one-click quote add-ons for combinations whose approved total is already known by the quote engine.
- Added Sarah-style regression coverage for venue parsing, FAQ return, Photo Booth pricing, and DJ + Photo Booth quote updates.

## 3.41

- Fixed completed office transcript emails being suppressed when another notification channel succeeded first.
- Office transcript email delivery is now tracked independently per quote hash.
- Failed office transcript emails retry up to three times at three-minute intervals, without resending customer email, SMS, or DJEP/webhook delivery.

## 3.40
- Added administrator-only Harmony Quick Test with numbered Harmony Test records, Craig's cell and email, normal notifications, and optional full DJEP send.
- Added selectable submission rows, bulk delete, individual print, and print-selected tools.
- Changed automatic conversation retention to 60 days.

## 3.39

- Increased standard blue quick-answer labels to 15px with 950 weight on desktop and laptop screens.
- Applied the readability improvement across service, referral, event-type, ceremony, combination, closing, retry, and other standard blue answer buttons instead of referral choices alone.
- Increased desktop answer-button minimum height to 40px with roomier padding and line height.
- Kept yellow quote-action, appointment, and instructional hint styles unchanged.
- Scoped the rule to viewports 701px and wider and explicitly excluded `.harmony-device--mobile`, preserving all mobile typography, wrapping, columns, spacing, keyboard, and viewport behavior.
- Preserved venue search, venue-ID handling, progress, pricing, quote logic, notifications, abandonment, and completion behavior.

## 3.38

- Increased referral-source quick-choice text to 13px on desktop and laptop screens only.
- Raised the desktop referral buttons to a 36px minimum height and added modest horizontal and vertical padding for clearer scanning.
- Scoped the change to `@media (min-width: 701px)` and excluded `.harmony-device--mobile`, preserving every existing mobile font, grid, wrapping, keyboard, and viewport rule.
- Preserved v3.37 venue search and venue-ID behavior, milestone progress, pricing, branches, lead capture, notifications, abandonment, and completion.

## 3.37

- Preserved numeric DJEP venue IDs when parsing Harmony's independent venue directory.
- Added the venue ID to the browser suggestion record and submitted it only when the customer selects a saved venue.
- Verified venue text and ID together on the server, with exact listed text resolving safely even when the browser ID is absent or incorrect.
- Stored `venue_id`, `venue_name`, `venue_city`, and `venue_state` in session and lead records.
- Added `venue_id`, `event_location_id`, `event_location_name`, `event_location_city`, and `event_location_state` to completed webhook payloads for DJEP bridges.
- Manual venues remain valid with venue ID `0`.
- Added venue-ID counts to the Harmony venue settings and copy result.
- Preserved all v3.36 search, progress, pricing, branching, notification, abandonment, and final-completion behavior.

## 3.36

Round 2 venue search rebuild:
- Rebuilt the venue picker from the clean Harmony 3.32/3.33 code path without the 3.34/3.35 page-scraping and REST fallback experiments.
- Harmony now copies the current Ready to Book venue records once from WordPress and stores its own independent directory. There is no public runtime link, page scraping, or automatic synchronization between the plugins.
- Existing installations with the failed four-entry demo directory are upgraded automatically. Larger owner-edited Harmony directories are preserved.
- Added an admin button to copy the Ready to Book venue list again manually when desired.
- Bundled the complete 48-entry fallback directory from Ready to Book 1.8.30 for installations where no saved Ready to Book list is available.
- Search matches venue names and cities, including uppercase city searches such as `LAPEER`, displays up to ten compact choices, and quietly closes when nothing matches.
- Selecting a result still submits the venue name and city through Harmony's existing parser, service-area check, quote logic, lead capture, and notification flow.
- Preserved the requested 10-pixel desktop and 7-pixel mobile spacing between visible action buttons and the composer.

Regression protection:
- Preserved all v3.32 milestone progress behavior, pricing, bundles, question order, ceremony paths, sold-out dates, office-quote routing, travel review, existing-customer routes, handoff, abandonment, texts, emails, DJEP behavior, and final completion behavior.
- Deterministic smoke suite: 195 passed, 0 failed.
- Browser checks passed at laptop, iPhone, and Android viewports for Lapeer search, keyboard selection, manual no-match entry, spacing, and sticky-navigation placement.

## 3.33

Round 1 guided quote improvements:
- Added 10 pixels of desktop separation and 7 pixels of mobile separation between Harmony's quick-action buttons and the message composer.
- Added a searchable venue picker to the existing venue-and-city question without replacing the chat flow or location parser.
- Venue results support name, city, and owner-managed aliases, with ranked matching and a maximum of seven visible choices.
- Selecting a suggestion automatically submits the saved venue name and city through the existing service-area and quote logic.
- Manual venue, private-residence, city-only, general-area, and undecided answers remain available when no suggestion applies.
- Added keyboard navigation, touch/click selection, ARIA combobox/listbox semantics, mobile-responsive results, reduced-motion support, and forced-colors support.
- Added an editable venue-directory field in Harmony settings. The release includes a small verified starter directory and does not copy the Ready to Book plugin or create a second venue engine.

Regression protection:
- Preserved all v3.32 pricing, bundle calculations, question order, conditional branches, progress behavior, lead capture, sold-out handling, service-area handling, human handoff, abandonment tracking, notifications, and final quote behavior.
- Expanded the deterministic smoke suite from 182 to 189 passing checks.
- Added browser checks for exact venue selection, manual no-match submission, action/composer spacing, and responsive behavior at laptop, iPhone, and Android viewports.

## 3.32

Milestone progress indicator:
- Replaced the hidden thin progress strip with a compact blue-and-yellow progress card placed inside the Harmony conversation, directly above the current question or final quote.
- Added a centered white percentage pill, `role="progressbar"`, live ARIA values, a 99% “Almost there. One more step!” state, reduced-motion support, and forced-colors support.
- Progress follows the existing quote state rather than a fixed question count: 10/20/30/40/50/60/70/80 core milestones, conditional in-between steps, 90% conditional completion, 99% final action screen, and 100% only after normal server finalization succeeds.
- Added server and browser high-water marks so progress never moves backward when conditional questions appear.
- Restart resets progress to the hidden opening state. Resume restores the saved percentage and migrates unfinished browser sessions from the approved 3.31 baseline key.
- Preserved the four-pixel mobile grid slot formerly occupied by the old strip, preventing the message pane from collapsing when the new progress card moves into the conversation.

Regression protection:
- Preserved pricing, bundles, intake order, service-area handling, sold-out handling, lead capture, human handoff, abandonment scheduling/canceling, quote delivery, text/email duplicate protection, and final quote behavior.
- Added deterministic coverage for DJ-only, DJ + Photo Booth, three-service wedding, ceremony, graduation, office-quote families, sold-out, travel review, existing customer, handoff, abandon/resume, restart, 99/100 completion, and notification counts.
- Corrected a baseline event-category omission found by the required matrix: Holiday events now route to the same office-quote family as school, corporate, community, and fundraiser events.

## 3.31

Date-optional quote flow:
- Fixed `looks_like_question()` only recognizing a question when the *entire* message started with a wh-word or contained a literal "?". A real question buried mid-message with no "?" (e.g. "Perfect, I'm through! How much is a dj and Photo Booth for 4 hours") was falling through to the flat event-date fallback instead of getting answered. It now checks each sentence/clause in the message.
- Added a two-step fallback for visitors who don't have a firm event date: first non-date reply asks for a rough month/season and explains why a date is needed for accurate pricing; a second non-date reply bypasses the date requirement entirely (only once phone and email are already captured), so the visitor isn't blocked from getting a price. This is an exception path, not the standard flow.
- Approximate timeframes ("September," "next spring," "Q1 2027") are now accepted as an estimated date rather than rejected by the exact-date parser.
- Quotes built from an estimated/bypassed date are flagged accordingly; the quote card now shows a note that pricing is based on estimated timing pending the exact date.
- The internal office lead notification now marks a date-pending lead as "NOT CONFIRMED, needs follow-up" so the team knows to circle back on timing.

## 3.0.30

Ceremony button:
- The "Need Ceremony Sound?" button on wedding quotes now gets its own full-width row in the quote-actions grid instead of sharing a row with View Quick Prices / Ready to Book. This also removes any risk of its height affecting sibling buttons through the grid's default stretch behavior.
- That own-row fix was first done with `grid-column: 1 / -1` inside the same grid as the row below it, which had a side effect: it kept an extra auto-fit grid column "alive" for every row in that grid, so the row below (View Wedding Rates / ASAP / Ready to Book) rendered with real unfillable empty space on the right instead of its three buttons stretching evenly across the row. Fixed by giving the ceremony button a fully separate grid container of its own in harmony.js, so it can no longer affect column sizing in any other row.
- Replaced the hard-flashing yellow/red blink with a small "Add-On" corner tag that swings gently. The button itself stays the same calm yellow as the other quote buttons; only the tag moves.
- Tag color went through a few passes: yellow-on-yellow (didn't stand out against the button) -> blue -> green (final), white text throughout. Green (#1a9c5c) is not one of the four existing brand colors (blue/yellow/red/black) used elsewhere in the plugin — flag this for whoever owns the Black Tie Productions brand guidelines if that matters.
- Removed two separate, overlapping blink implementations (2.0.12 and 2.0.30) that had been layered on top of each other without either being removed.
- Fixed an accessibility bug carried by the old 2.0.30 blink: its `prefers-reduced-motion` override re-enabled the hard color-flip animation (just slower) instead of turning it off. The new corner-tag swing correctly disables itself for reduced-motion visitors.
- The tag is marked `aria-hidden` so screen readers still announce only "Need Ceremony Sound?", not "Need Ceremony Sound? Add-On".

Testing (no other behavior change):
- Fixed `tests/smoke.php`: the 3.0.28 human-handoff/returning-DJ tests were placed after the script's `exit()` call and never ran, and called an undefined `fresh_state()` helper. Both are fixed.
- Added smoke-test coverage for all five 3.0.29 behavior changes (first-name-only intake, event-type/location recovery, venue-without-city handling).
- Added `tests/test-proofpoint-url.php`, a standalone regression test for the Proofpoint URL decode fix, covering both the simple case the old code handled and a URL with its own `?`/`=` query string that the old hardcoded replace list would have left mangled.

Housekeeping:
- Brought `readme.txt`'s Stable tag current (it had been stuck at 3.0.27 through several releases).

## 3.0.29
- Ask for the city when a venue name is entered without a recognizable city.
- Recover when a city or corrected venue/city is entered during the event-type question.
- Prevent recognized cities from being stored as event types.
- Accept first-name-only introductions and ask only for the last name.
- Decode Proofpoint-wrapped source URLs correctly in lead reports.

## 3.0.28

- Added a separate “Great choice!!” bubble after an approved venue/city is recognized.
- Moved the event-type question into its own follow-up bubble.
- Updated the closing message to say the visitor’s information will be sent to them in a flash.

## 3.0.26
- Fixed service-area matching for city-only, city + MI/Michigan, and venue + city responses.
- Added Ortonville to the built-in approved city list and hardened Additional Approved Locations matching.
- Explicit non-Michigan states are now classified outside the service area.
- Added a mobile-wide button-size safeguard so single quick actions can never stretch into full-screen panels.
- Made every one-button quick-reply tray compact, including DJ scheduling, office scheduling, retry, restart, call, and other future single-action links.
- Audited quick-reply, quote-link, composer, reset, history, and restart-dialog controls for oversized mobile dimensions.

## 3.0.24

- Changed the Already a Customer Skip option from a full-height panel to a compact centered mobile button.
- Preserved more screen space for the event-date question and composer.

## 3.0.23

- Answered when clients normally meet with their DJ before showing scheduling buttons.
- Clarified that DJ meetings are usually 7 to 12 days before the event and may be scheduled up to 30 days beforehand.
- Answered how to schedule through Client Hideout before offering the assigned DJ calendar list.
- Kept the unknown-DJ route pointing clients to Client Hideout and office help.

# Harmony 3.0 Changelog

## 3.0.22
- Updated the Already a Customer path to ask for the customer’s first name, then event date, before opening support questions. Either item can be skipped.
- Changed the available-date transition into two separate chat bubbles: the availability confirmation first, followed by the venue-name-and-city question.

# Harmony Changelog

## 3.0.21
- Hid Astra and common WordPress back-to-top controls while Harmony owns the mobile viewport, preventing the floating up arrow from covering Send.
- Reduced final quote action buttons to compact 56-pixel mobile controls.
- Returned more visible screen area to the wedding pricing card.

# Harmony 3.0.21

- Removed the oversized blank area above mobile quick choices.
- Anchored the mobile app to the iOS visual viewport so the phone field stays fully visible.
- Added automatic retries and visible Try Again recovery for connection failures.
- Shifted Restart away from the website hamburger menu and raised Harmony above sticky navigation.

- Fixed the iPhone keyboard viewport shift that could push Harmony's header, current question, or typing field partly off-screen.
- Added live visual-viewport correction during keyboard resize and scroll events without reintroducing the old blank band above Harmony.
- Expanded mobile quick-reply space so all available choices are shown when the screen has room, while long lists such as DJ names remain scrollable.
- Added a ceremony detour that works anywhere during quote intake. Harmony gathers the ceremony location, saves the price, and returns to the exact interrupted quote question.
- Restored the complete updated quote and its actions when ceremony service is added after pricing, preventing a dead end or forced restart.
- Added eight regression checks covering mobile viewport positioning, mobile choice visibility, mid-intake ceremony requests, quote resumption, and final ceremony totals.
- Passed 125 deterministic smoke tests with zero failures.

# Harmony 3.0.18

- Removed the stray customer-facing sentence stating that Craig or the office would confirm bundle savings and the final total.
- Removed the same sentence from customer SMS and customer email quote copies.
- Kept bundle-review status available internally for office records without displaying that boilerplate to the client.
- Added regression checks for wedding and social multi-service quote paths.

# Harmony 3.0.17

- Availability confirmations now include the full formatted event date, for example `Sunday, December 5, 2027`.
- Approved venue and city entries pass silently to the event-type question. Harmony no longer tells visitors they are inside the service area.
- Removed the generic office-confirmation sentence from customer-facing quote content.
- Customer quote SMS now includes the configured Meet & Greet link.
- Added regression coverage for the exact date wording, silent approved-location transition, and SMS scheduling link.

# Harmony 3.0.16

- Restored venue name and city as a required instant-pricing field.
- Restored service-area validation before Harmony creates a price quote.
- Correct quote order is now: name, cell, email, clickable services, date, referral source, date-availability result, venue and city, event type, calculating delay, quote.
- Inside-area locations continue to instant pricing. Outside or unconfirmed locations receive travel and staffing review instead of an unsupported instant price.
- Added regression tests that fail if venue/city is removed or if an outside-area event receives an instant quote.
- Preserved completed-quote and incomplete-quote customer text follow-up behavior.
- Passed 108 deterministic smoke tests with zero failures.

# Harmony 3.0.15

- Fixed an upgrade bug that forced Twilio off and could prevent customer quote and incomplete-quote follow-up texts.
- Existing enabled Twilio settings are now preserved during future updates.
- If version 3.0.14 disabled texting but complete Twilio credentials remain saved, 3.0.15 restores customer texting automatically.
- Added an on-screen quote notice confirming that the quote will also be texted when Twilio is enabled.
- Added regression tests for the completed-quote SMS path and the 3.0.14 Twilio restoration.
- Restored the approved instant-pricing order: name, cell, email, clickable service choice, date, referral source, event type.
- Removed the customer-facing venue/city question from the instant-price path. Venue and setup details remain subject to office confirmation.
- Added the prompt: “While I check your date, how did you hear about Black Tie Productions?”
- Added the availability result immediately after the referral answer.
- Added a three-second thinking pause before Harmony says she is gathering the price and current discounts.
- Added a second 3.5-second calculating pause before the quote card appears.
- Kept all supplied information skip-aware so Harmony does not repeat fields already captured.
- Updated the progress flow from eight required quote fields to seven.
- Passed 103 deterministic smoke tests with zero failures.

# Harmony 3.0.13

- Removed the customer-facing intake summary that appeared immediately before a completed quote.
- Added the brief transition `Great, [first name]. Here is your price quote.` and displays the quote card almost immediately.
- Preserved all collected details in conversation history, quote history, and office notifications.
- Updated deterministic regression coverage for the direct-to-quote flow.

# Harmony 3.0.12

- Fixed premature office handoffs for vague statements such as “I have questions” and “I need help.”
- Harmony now asks for the visitor’s actual question and keeps the conversation moving forward.
- Added contextual prompts for Photo Booth, DJ, music, and planning-question starters.
- Expanded statement-style question detection without treating vague starters as completed questions.
- Updated admin terminology so the history area uses Conversations, Non-Quote Chat, Incomplete Quote, Customer Support Chat, and Meeting Chat instead of labeling normal chats as incomplete leads.

# Harmony 3.0.11

- Updated the meeting chooser guidance to refer to the client’s assigned crew member rather than only the assigned DJ.

- Added optional email reports for non-quote conversations after a configurable inactivity period.
- Expanded Conversation History so all quote, support, question, and meeting transcripts can be reviewed together.
- Added conversation type, answer source, and report status tracking.
- Office Crew meeting links now open in the current browser page instead of a new tab.
- Photo Booth meeting requests now route directly from broader wording such as “meeting about my photo booth.”
- Reworded Photo Booth guidance and replaced the unnecessary office-meeting button with a direct clickable office call option.


- Expanded the meeting chooser to My Assigned DJ, Photo Booth Operator, and Office Crew.
- Added the final-confirmation reminder that booked clients should meet with their assigned DJ.
- Added direct handling for final-meeting, DJ-meeting, and Photo Booth operator meeting requests.
- Added the Photo Booth operator rule: the operator calls five days before the event, no Zoom or in-person meeting is needed, contact information is in Client Hideout, and the office can help sooner.
- Updated desktop and mobile shared response logic and regression tests.

# Harmony 3.0.8

- Corrected music-planning guidance so Harmony never tells clients to upload music.
- Special dances and other special-event songs must be typed into the matching planning-form fields in Client Hideout.
- Added optional YouTube-link guidance for identifying exact song versions.
- Music requests must be entered in Client Hideout as **Must Play**, **Possible Play**, or **Do Not Play**.
- Added spot-list guidance for cocktail hour, dinner music, and other specific event portions.
- Prohibited separate music lists through email, text messages, handwritten notes, or uploaded files.

# Harmony 3.0.7

- Stopped repeating the generic **Schedule a Meeting** button after every support or FAQ answer.
- Kept meeting scheduling available from the opening screen and whenever a visitor asks for it.
- Changed **Not sure / DJ not listed** to explain that the assigned DJ name and meeting scheduler are available in Client Hideout.
- Added a clickable **1-800-232-9750** office-call button using a mobile-friendly `tel:` link.

# Harmony 3.0.6

- Changed every generic **Schedule a Meeting** button to open the meeting chooser.
- The chooser now offers **Office Crew** or **My Assigned DJ** whether or not the visitor first selected Already a Customer.
- Kept office-specific and DJ-specific scheduling buttons linked directly to their Calendly pages.

# Harmony 3.0.5

- Added an existing-customer meeting chooser with **Office Crew** and **My Assigned DJ** paths.
- Added personal Calendly links for Mike, Larenzo, Chris, Tom, Aaron, Logan, Tony, and Nick.
- Added a **Not sure / DJ not listed** fallback that routes customers to the office crew calendar.
- Added editable DJ calendar settings using one `Name | Calendly URL` entry per line.
- Updated the office meeting page to `https://blacktieproductions.com/calendly/`.
- Prospects continue to schedule directly with the office crew.

# Harmony 3.0.4

- Removed the four shortcut buttons after a visitor selects **Already a Customer**.
- Existing clients now receive a simple welcome and can type their question immediately.
- Added a regression test requiring an empty quick-reply list in customer-support mode.

# Harmony 3.0.3

- Renamed the appointment button from **Schedule a Quick Chat** to **Schedule a Meeting**.

# Harmony 3.0.2

- Added deterministic generator and outdoor-power answers.
- Confirmed that Black Tie Productions supplies an ultra-quiet generator for outdoor services when notified in advance.
- Clarified that venue power is not required outdoors and the generator powers Black Tie Productions equipment only.
- Prevented generator questions from falling through to OpenAI.

# Harmony 3.0.1

- Fixed pricing-intent routing for operational questions beginning with “how much.”
- Current-customer support now answers known FAQs before starting quote intake.
- Added concise DJ-only and Photo-Booth-only space responses.

# Harmony 3.0.0

- Rebuilt Harmony around the current operations rules and exact digital intake order.
- Added the four-path opening experience for pricing, existing customers, questions, and meetings.
- Removed guest count from the standard lead model and quote flow.
- Updated wedding pricing, four-hour social pricing, ceremony sound, retainers, and balance timing.
- Restricted unapproved bundle calculations and custom-priced event categories.
- Added current sold-out, travel, short-notice, venue-space, arrival, teardown, access, power, and outdoor rules.
- Retired the 360 Photo Booth in customer-facing answers.
- Added safe agreement routing without promising refunds, credits, waivers, or exceptions.
- Preserved the existing plugin slug, options, leads, shortcodes, and integrations for in-place replacement of Harmony 2.5.1.
- Added deterministic smoke coverage for the Harmony 3.0 operating rules.

## 2.5.1
- Replaced the site-wide launcher letter badge with Harmony's configured avatar image.
- Falls back to the WordPress site icon when no Harmony avatar URL is configured.
- Keeps the launcher desktop-only and linked to the full quote page.

## 2.4.3
- Updated the abandoned-quote customer SMS with the Black Tie Productions call/text number.
- Added a direct link back to the Harmony quote chat.
- Added STOP and HELP instructions to the recovery message.

## 2.4.0
- Strengthened server-side abandoned-quote recovery after a valid cell number is collected.
- The customer receives the existing Harmony follow-up text even if they close the browser, subject to WordPress cron running.
- The office receives a clearly labeled Warm Lead email with every stored answer, conversation history, last activity, source details, customer-text delivery status, and a suggested follow-up.
- Completed quotes continue to cancel the abandonment alert so duplicate incomplete-lead messages are not sent.

## 2.3.8
- Updated the joke-ending timing: two seconds before the punchline, four seconds to read the punchline, then the thank-you message and a two-second pause before redirecting to the completion page.

## 2.3.6

## 2.3.7
- Renamed the closing action to **Send My Price Now!** while preserving immediate delivery, confetti, and completion-page redirect.
- Kept the existing three-minute automatic quote delivery when a completed quote is left open without pressing the button.
- Added a one-time three-minute incomplete-quote text after a visitor provides a cell number and then stops answering. Each new answer resets the timer, and completing the quote cancels the reminder.

- Split the open-date confirmation and venue question into two separate Harmony message bubbles for easier reading.

# Changelog

## 3.83
- Responsive hardening pass for the current Harmony experience without redesigning it.
- Mobile shell now gives the persistent progress bar, message history, composer, trouble link, callback form, optional comments, and confirmation state stable space on short/narrow screens and when the keyboard opens.
- Hardened callback modal and footer wrapping for mobile and mid-size desktop/tablet widths.

## 3.82
- After a successful Event Hero trouble/callback request, Harmony now shows a dedicated confirmation state: “We got it! ⚡ An Event Hero will contact you shortly. You can safely leave this page.”
- Added a “Return to Home Page” button that sends the visitor to the Black Tie Productions home page.
- Existing callback alerts and abandonment suppression remain unchanged.

## 3.80
- Event Hero trouble/callback submissions now permanently suppress abandonment messaging for both the customer and office.
- Browser activity and stale abandonment cron jobs cannot restart or deliver abandonment after human follow-up is requested.

## 3.79
- Added an optional “What happened?” comment field to the Event Hero callback form.
- Callback comments are included in the office callback email and SMS alert.

## 3.78
- Reserved enough desktop panel space for the persistent Event Hero help message and consent line on tall quick-reply steps.

## 3.77
- Fixed the persistent Event Hero help link so its click handler is attached during normal Harmony startup instead of only during calendar rendering.
- No visual, quote-flow, ceremony, progress, or pricing changes.

## 3.76
- Added a persistent customer fallback below the message composer: “Having trouble with Harmony or your quote?”
- Clicking the fallback opens a compact name/cell form and sends an Event Hero callback request through Harmony’s existing office-alert workflow.
- Admin Test continues to suppress external notifications while previewing the callback handoff.

## 3.75
- Kept the progress bar fixed directly below the Harmony header and above the scrolling conversation.
- Removed the misleading 99% “Almost there. One more step!” message before the quote.

## 3.74
- Hold the successful date-availability message for two seconds before the venue question.
- Restore desktop conversation height after the larger approved header.
- Proactively ask about ceremony sound only for wedding quotes that include DJ service; Yes opens the existing ceremony-location flow and No skips ceremony.

## 3.72
- Cropped only the transparent top padding from the exact home-page crew PNG so all heads render fully inside the header at useful size.
- Added a dedicated full-width blue blend backdrop layer behind the quote panel instead of relying on theme/body backgrounds.
- Kept the supplied cloud photograph, rounded black panel, Restart placement, quote flow, and admin behavior intact.

## 3.71
- Force the approved blended-blue background onto the actual HTML/body page so theme wrappers cannot leave a white backdrop.
- Reposition the exact crew cutout from the top of the header so no heads are clipped.

## 3.68
- Replaced stacked visual overrides with one clean approved quote-page style layer.
- Enlarged the exact home-page crew PNG in the Harmony header and removed all header bleed-through.
- Applied the approved blended-blue page background to the nearest quote-page content surface instead of the widget itself.
- Preserved quote logic, conversation flow, buttons, pricing, and admin-only version display.

## 3.67
- Corrected the approved Harmony visual implementation: clean cloud header asset, exact crew placement, tighter real Harmony portrait crop, thick rounded black panel border, and reliable blue page background by clearing theme backgrounds on Harmony page ancestors.
- No quote-flow, pricing, notification, or conversation logic changes.

## 3.65
- Refreshed the page-mode Harmony header with the approved Black Tie crew-and-clouds banner and enlarged real-photo avatar treatment.
- Added a bundled fallback Harmony portrait so the approved real photo displays even if no avatar URL is saved.
- Updated the page-mode quote background to the approved blended blue treatment while leaving the quote flow and functionality intact.
- Preserved admin-only version visibility behavior.

## 2.3.5
- Forced the completion confetti to display on iPhone, Android, and desktop, including devices with Reduce Motion enabled.
- Kept the existing completion timing, message, and redirect behavior unchanged.

## 2.3.4
- Shortened the ending button from “End with a Dad Joke” to “End with a Joke” while keeping the same timed joke, punchline, confetti, and completion-page flow.
- Changed Harmony’s assistant chat bubbles to Black Tie Productions brand yellow with bold black text for clearer separation from the light conversation background.

## 2.3.3
- Mobile only: moved Services and Referral Source choices directly beneath the current conversation so the large open area is used more naturally.
- Increased the completion celebration to a denser, longer confetti burst on mobile and desktop.
- Desktop layout and conversation logic remain unchanged.

## 2.3.2
- Added the full completion celebration and redirect flow to desktop as well as mobile.
- Dad Joke ending now pauses for the punchline, pauses for the closing message, launches confetti, and automatically opens the quote completion page.
- I’m All Set, Goodbye now launches confetti and automatically opens the completion page on both layouts.

## 2.3.1

- Added a compact mobile-only Back to Black Tie Productions bar so visitors can leave the full-screen quote experience without using browser controls.
- Added mobile conversation focus mode that keeps the current question and latest answer visible while preserving earlier answers behind a View Earlier Answers control.
- Stopped iPhone visual-viewport scroll events from repeatedly repositioning the chat and removed the double-counted viewport top offset that could create a blank gap above Harmony.
- Kept the keyboard open for typed questions, closes it for button-choice questions, and no longer forces focus after every response.
- Restored the mobile joke option as End with a Dad Joke while leaving desktop wording and layout unchanged.
- Added mobile confetti and an editable quote-completion redirect after I’m All Set, Goodbye.

## 2.2.0
- Mounts exactly one active Harmony interface per browser width.
- Keeps mobile and desktop markup inert until the correct layout is selected, avoiding duplicate IDs and competing event targets.
- Adds unmistakable MOBILE/DESKTOP version badges for cache verification during testing.

## 2.0.51
- Removed the fixed full-screen keyboard state that caused Android header jumping.
- Kept the compact mobile header while typing without replacing the page layout.
- Added reliable repeated scrolling to the newest message after content changes.
- Kept the composer visible above mobile keyboards with targeted page adjustment.

## 2.0.50
- Mobile keyboard mode now collapses the Harmony header to a slim bar, revealing more of the active question and response.
- Quick-choice buttons remain available in a compact layout while typing instead of abruptly disappearing.
- Reduced mobile keyboard-mode spacing while preserving the visible input composer.

## 2.0.49
- Fixed the mobile composer being covered by iPhone and Android software keyboards.
- Harmony temporarily pins to the visible phone viewport only while typing.
- Kept the joke action hidden on phones and available on desktop.
- Preserved compact post-quote actions so more of the price quote remains visible.

## 2.0.47
- Renamed the completed-quote action to `Ask a Question`.
- Renamed the closing action to `I'm All Set, Goodbye`.
- Hid `End with a joke` on phones while keeping it available on desktop and laptop screens.
- Reduced the mobile action area so it no longer crowds or covers the completed quote.
- Improved mobile keyboard handling by hiding quick replies while typing and keeping the composer inside the visible viewport.

## 2.0.46

- Shortened the final closing message to: “Thank you! Info will be sent. Questions? Call or text 1-800-232-9750. Have a SUPER day!”
- Removed the extra “You are all set.” prefix from the No, I’m all good flow.

## 2.0.45
- Changed the open-date message to: “Good news! Friday, May 5, 2028 is open. What is the venue name and city?”
- Shortened the quote-loading message to: “I am gathering your quote...”

## 2.0.44
- Kept the mobile composer visible when the iPhone or in-app-browser keyboard opens.
- Added Visual Viewport handling for Safari, Messenger, and similar mobile webviews.
- Changed the event-date input placeholder to "Date of your event".

## 2.0.43
- Shortened the mobile referral question to “While I check, how did you hear about Black Tie?”
- Kept completed quote cards positioned at the top of the mobile conversation window so pricing is immediately visible.
- Reduced mobile quick-action height slightly to preserve more room for the quote.

# Changelog

## 3.83
- Responsive hardening pass for the current Harmony experience without redesigning it.
- Mobile shell now gives the persistent progress bar, message history, composer, trouble link, callback form, optional comments, and confirmation state stable space on short/narrow screens and when the keyboard opens.
- Hardened callback modal and footer wrapping for mobile and mid-size desktop/tablet widths.

## 3.80
- Event Hero trouble/callback submissions now permanently suppress abandonment messaging for both the customer and office.
- Browser activity and stale abandonment cron jobs cannot restart or deliver abandonment after human follow-up is requested.

## 3.79
- Added an optional “What happened?” comment field to the Event Hero callback form.
- Callback comments are included in the office callback email and SMS alert.

## 3.78
- Reserved enough desktop panel space for the persistent Event Hero help message and consent line on tall quick-reply steps.

## 3.77
- Fixed the persistent Event Hero help link so its click handler is attached during normal Harmony startup instead of only during calendar rendering.
- No visual, quote-flow, ceremony, progress, or pricing changes.

## 3.76
- Added a persistent customer fallback below the message composer: “Having trouble with Harmony or your quote?”
- Clicking the fallback opens a compact name/cell form and sends an Event Hero callback request through Harmony’s existing office-alert workflow.
- Admin Test continues to suppress external notifications while previewing the callback handoff.

## 3.75
- Kept the progress bar fixed directly below the Harmony header and above the scrolling conversation.
- Removed the misleading 99% “Almost there. One more step!” message before the quote.

## 3.74
- Hold the successful date-availability message for two seconds before the venue question.
- Restore desktop conversation height after the larger approved header.
- Proactively ask about ceremony sound only for wedding quotes that include DJ service; Yes opens the existing ceremony-location flow and No skips ceremony.

## 3.72
- Cropped only the transparent top padding from the exact home-page crew PNG so all heads render fully inside the header at useful size.
- Added a dedicated full-width blue blend backdrop layer behind the quote panel instead of relying on theme/body backgrounds.
- Kept the supplied cloud photograph, rounded black panel, Restart placement, quote flow, and admin behavior intact.

## 3.71
- Force the approved blended-blue background onto the actual HTML/body page so theme wrappers cannot leave a white backdrop.
- Reposition the exact crew cutout from the top of the header so no heads are clipped.

## 3.68
- Replaced stacked visual overrides with one clean approved quote-page style layer.
- Enlarged the exact home-page crew PNG in the Harmony header and removed all header bleed-through.
- Applied the approved blended-blue page background to the nearest quote-page content surface instead of the widget itself.
- Preserved quote logic, conversation flow, buttons, pricing, and admin-only version display.

## 3.67
- Corrected the approved Harmony visual implementation: clean cloud header asset, exact crew placement, tighter real Harmony portrait crop, thick rounded black panel border, and reliable blue page background by clearing theme backgrounds on Harmony page ancestors.
- No quote-flow, pricing, notification, or conversation logic changes.

## 3.65
- Refreshed the page-mode Harmony header with the approved Black Tie crew-and-clouds banner and enlarged real-photo avatar treatment.
- Added a bundled fallback Harmony portrait so the approved real photo displays even if no avatar URL is saved.
- Updated the page-mode quote background to the approved blended blue treatment while leaving the quote flow and functionality intact.
- Preserved admin-only version visibility behavior.

## 2.0.42
- Improved mobile conversation space by removing selected quick-reply groups immediately.
- Limited tall mobile option groups to a smooth vertical scroll area instead of shrinking the conversation.
- Added a mobile-only More Quote Options control when a completed quote contains many action buttons.
- Desktop layout and behavior remain unchanged.

# Harmony 2.0.41

- Added comprehensive mobile-only responsive styling while preserving the desktop layout.
- Stacked ceremony and multiple-service choices vertically on phones so every label is fully visible without horizontal swiping.
- Added mobile reflow rules for quote actions, long labels, quote rows, the composer, header, and narrow webviews such as Messenger.
- Kept compact referral and event-type choices in two columns when space allows, with a one-column fallback on very narrow screens.
- Added horizontal-overflow protection throughout the mobile chat.

# Harmony 2.0.40

- Replaced all referral-source choices with the exact approved nine-value list.
- Referral selections are saved exactly as displayed.
- Standardized service values in office emails, office SMS alerts, and webhook notifications.
- Kept the expanded referral buttons compact in the current chat display area.

# Harmony 2.0.39

- Fixed ASAP office text alerts on upgraded installations by always using the configured office destination, with a fallback to +1 810-691-0583 when the newer setting is missing.
- Added a visible Last Twilio attempt status in the Twilio settings area, including the destination and Twilio error message when a send fails.
- Preserved the existing ASAP office email, customer quote delivery, and callback workflow.

## 2.0.38
- Changed the instant-quote deposit wording from “per main service” to “per service” in the on-screen quote and client SMS.
- Removed the duplicate Epic Party kicker so the quote header shows “Your Epic Party Pricing” only once.
- Kept the existing quote card in place after an ASAP callback request and displayed the callback confirmation message without re-rendering the quote.

## 2.0.37
- Added an immediate Twilio text alert to the office when the ASAP callback button is used.
- Added editable settings for enabling the urgent office text and choosing its destination number.
- Preserved the existing ASAP office email, webhook, and customer quote-delivery behavior.

# Harmony 2.0 Changelog

## 2.0.36
- ASAP callback now immediately sends the completed quote to the client using the existing customer quote-delivery builders.
- Existing urgent office callback notification behavior remains unchanged.
- Added the approved on-screen confirmation and closed the composer after submission.
- Centered the Photo Booth demo button label.

## 2.0.36

- Renamed eligible social-event quotes to “Your Epic Party Pricing” across on-screen quote data and client SMS output.
- Removed private-event wording from Epic Party quote headings, descriptions, and service labels.
- Preserved custom-pricing handling for corporate, school, fundraiser, prom, homecoming, community, and other office-review events.
- Updated instant-quote deposit wording to clarify that only a $100 deposit per main service holds the date and is deducted from the total.
- Added the $100-per-hour, per-service additional-hours statement to on-screen instant quotes and client SMS messages.
- Added an “I Need Someone to Call Me ASAP!” button to every completed quote.
- Added immediate urgent office email/webhook delivery using already-collected lead and quote information.
# Changelog

## 3.83
- Responsive hardening pass for the current Harmony experience without redesigning it.
- Mobile shell now gives the persistent progress bar, message history, composer, trouble link, callback form, optional comments, and confirmation state stable space on short/narrow screens and when the keyboard opens.
- Hardened callback modal and footer wrapping for mobile and mid-size desktop/tablet widths.

## 3.80
- Event Hero trouble/callback submissions now permanently suppress abandonment messaging for both the customer and office.
- Browser activity and stale abandonment cron jobs cannot restart or deliver abandonment after human follow-up is requested.

## 3.79
- Added an optional “What happened?” comment field to the Event Hero callback form.
- Callback comments are included in the office callback email and SMS alert.

## 3.78
- Reserved enough desktop panel space for the persistent Event Hero help message and consent line on tall quick-reply steps.

## 3.77
- Fixed the persistent Event Hero help link so its click handler is attached during normal Harmony startup instead of only during calendar rendering.
- No visual, quote-flow, ceremony, progress, or pricing changes.

## 3.76
- Added a persistent customer fallback below the message composer: “Having trouble with Harmony or your quote?”
- Clicking the fallback opens a compact name/cell form and sends an Event Hero callback request through Harmony’s existing office-alert workflow.
- Admin Test continues to suppress external notifications while previewing the callback handoff.

## 3.75
- Kept the progress bar fixed directly below the Harmony header and above the scrolling conversation.
- Removed the misleading 99% “Almost there. One more step!” message before the quote.

## 3.74
- Hold the successful date-availability message for two seconds before the venue question.
- Restore desktop conversation height after the larger approved header.
- Proactively ask about ceremony sound only for wedding quotes that include DJ service; Yes opens the existing ceremony-location flow and No skips ceremony.

## 3.72
- Cropped only the transparent top padding from the exact home-page crew PNG so all heads render fully inside the header at useful size.
- Added a dedicated full-width blue blend backdrop layer behind the quote panel instead of relying on theme/body backgrounds.
- Kept the supplied cloud photograph, rounded black panel, Restart placement, quote flow, and admin behavior intact.

## 3.71
- Force the approved blended-blue background onto the actual HTML/body page so theme wrappers cannot leave a white backdrop.
- Reposition the exact crew cutout from the top of the header so no heads are clipped.

## 3.68
- Replaced stacked visual overrides with one clean approved quote-page style layer.
- Enlarged the exact home-page crew PNG in the Harmony header and removed all header bleed-through.
- Applied the approved blended-blue page background to the nearest quote-page content surface instead of the widget itself.
- Preserved quote logic, conversation flow, buttons, pricing, and admin-only version display.

## 3.67
- Corrected the approved Harmony visual implementation: clean cloud header asset, exact crew placement, tighter real Harmony portrait crop, thick rounded black panel border, and reliable blue page background by clearing theme backgrounds on Harmony page ancestors.
- No quote-flow, pricing, notification, or conversation logic changes.

## 3.65
- Refreshed the page-mode Harmony header with the approved Black Tie crew-and-clouds banner and enlarged real-photo avatar treatment.
- Added a bundled fallback Harmony portrait so the approved real photo displays even if no avatar URL is saved.
- Updated the page-mode quote background to the approved blended blue treatment while leaving the quote flow and functionality intact.
- Preserved admin-only version visibility behavior.

## 2.0.34
- Removed the phrase "with the applicable package" from customer-facing service descriptions.
- Removed the "Forget saved contact info" option from the Restart / Start Over dialog while preserving restart and autofill behavior.

## 2.0.32
- Replaced the wedding customer follow-up SMS with Craig's approved concise wording.
- Removed the total, retainer language, Event Heroes closing, and SUPER day line from the wedding SMS only.

## 2.0.31
- Rewrote the customer wedding follow-up SMS in Craig-approved language.
- Added readable spacing, exact quote items, total, retainer terms, rate-sheet link, contact details, and STOP/HELP lines.
- Changed wedding DJ wording in SMS to “Wedding Reception DJ.”

## 2.0.30
- Made the ceremony-sound button alternate sharply between yellow and red for stronger visibility.
- Changed completed-quote delivery so tapping “End with a joke” or “No, I’m all good” sends the latest final quote immediately.
- Added a three-minute inactivity fallback after a quote is displayed or updated, including when the browser is closed.
- Ceremony additions replace the pending fallback payload, preventing an earlier incomplete quote from being sent.

## 2.0.29
- Highlighted the retainer, balance-due, and ceremony-retainer information in the quote card.
- Added a four-minute debounced delivery window for office email, customer email, Twilio SMS, and webhook notifications. A ceremony revision cancels the earlier pending delivery and schedules the final quote instead.
- Added a three-second pause between the joke punch line and the final thank-you.
- Added a clear one-time spelling correction prompt for unrecognized locations and explicitly allows city-only entries when the venue is unknown.
- Routed every Start over button through the same Restart dialog, including autofill, blank start, cancel, and forget-contact options.

## 2.0.28
- Updated the approved availability message to repeat the full event date with the correct day of the week, for example: `Good news! Your date is available, Saturday, May 6, 2028.`

# Harmony 2.0 Changelog

## 2.0.27
- Made the Need Ceremony Sound button alternate between brand yellow and red for stronger visibility.
- Clarified that ceremony sound never requires an additional retainer.
- Reformatted the plain-text office transcript with uppercase speaker labels and spacing between messages.
- Added redundant Twilio credential backups in regular and site options, automatic bootstrap on every load, and a forced database migration.

## 2.0.26
- Added a true customer quote resend flow. When a customer asks to resend, retext, or text the quote again, Harmony sends the current quote again through Twilio to the saved cell number.
- Removed incorrect language suggesting the resend would be emailed to the office.
- Added clear success and failure responses for retext requests.


## 2.0.25

- Added a dedicated protected WordPress option for Twilio status, Account SID, Auth Token, and sending number.
- Twilio credentials now restore automatically if the main Harmony settings option is reset or rebuilt during a plugin replacement.
- Blank Twilio SID and sending-number fields no longer erase saved values during unrelated settings saves.
- Added an explicit Remove all saved Twilio credentials control for intentional removal.
- Extended protected-setting preservation to the OpenAI API key and webhook signing secret.

## 2.0.23

- Changed office lead notifications to clean `text/plain` email with one labeled value per line for easier Zapier parsing.
- Removed the office-email HTML table, boxes, styled headings, and HTML content-type header.
- Restored live phone-number formatting as `(810) 691-0583` while preserving the caret by digit position.
- Kept the reset request guard and explicit composer unlock so phone entry remains usable after restarting the chat.
- Added regression checks for plain-text office email and safe reset-compatible phone formatting.

## 2.0.22

- Fixed the top-right reset flow so the message field and Send button always unlock for the new chat session.
- Cleared the composer immediately when starting over and made reset safe even if an older request or delayed response is still finishing.
- Added operation guards so stale responses cannot overwrite a newly reset conversation or leave the composer disabled.
- Stopped rewriting phone numbers during every keystroke, which avoids Mobile Safari caret and input failures after reset. Phone numbers are still normalized when submitted.
- Added mobile reset-and-phone-entry regression coverage.

## 2.0.21

- Expanded the final appointment call-to-action label to `Schedule a Phone, Zoom Video Chat, or In-Person Meet & Greet`.
- Preserved the configured Meet and Greet URL, yellow appointment styling, and new-tab behavior.
- Updated deterministic regression coverage for the exact approved label.

## 2.0.20

- Added a prominent wedding DJ-only bundle upsell inside the quote card.
- A DJ-only wedding quote now offers the customer a choice of adding either the Classic Photo Booth or Uplighting for $600.
- Clearly states that the $600 add-on price applies to one service, not both, and that other bundling discounts are available.
- Added separate one-click Photo Booth and Uplighting demo buttons inside the upsell panel.
- The $600 add-on amount is calculated from the editable DJ and pair-bundle prices, so it remains accurate when pricing is changed in Harmony settings.
- Added responsive styling and regression coverage for the new two-choice bundle offer.

## 2.0.19

- Fixed duplicated `DJ: What’s Included?`, `Photo Booth: What’s Included?`, and `Uplighting: What’s Included?` buttons after ceremony sound is added.
- The refreshed ceremony quote card still contains the three service-detail buttons once.
- The row below the updated quote now shows only `I have another question`, `End with a joke`, and `No, I’m all good`.
- Added regression coverage for the ceremony-update button layout.

## 2.0.18

- Added a final yellow `Schedule a Quick Meet & Greet` button after the closing thank-you.
- The button uses the editable Meet and Greet URL from Harmony settings and opens it in a new tab.
- Preserved the existing `I have another question` and `Start over` choices.
- Added regression coverage for the appointment link object, URL, label, new-tab behavior, and branded yellow styling.

## 2.0.17

- Updated the final closing message to confirm that the customer’s requested information will be sent shortly.
- Refined the office-hours wording to `We’re available every day from 10 AM to 10 PM.`
- Kept the public toll-free number clickable and preserved the `Have a SUPER day!` ending.
- Added regression coverage for the exact approved closing statement.

## 2.0.16

- Moved the service-interest question ahead of the event-date question so Harmony knows exactly which service or combination to check.
- New intake order is name, cell, email, services, date, referral source, venue/city, and event type.
- Kept the approved date transition: after the service choice, Harmony says `Got it. What date is your event?`
- Made the `Good news! Your date is available.` message service-aware, so a DJ-only sold-out date does not block an available Photo Booth inquiry, and Harmony never announces availability for a selected sold-out service.
- Preserved the selected services when a customer chooses `Check another date`, allowing the replacement date to be checked correctly without asking for services again.
- Added full-flow and regression tests for single services, combinations, service-specific sold-out dates, and replacement-date checks.

## 2.0.15

- Stacked all four multiple-service combination choices on phones so customers never need to swipe left or chase an off-screen button.
- Added hard horizontal-overflow protection to the chat transcript and quick-choice area.
- After any post-quote answer, Harmony now re-shows the service-detail buttons, ceremony button when still applicable, and ending choices for effortless one-click navigation.
- Repeated service-detail buttons use the same yellow quote-action treatment so they are easy to spot.
- Added `EVERYTHING!` to the beginning of the DJ, Photo Booth, and Uplighting inclusion descriptions.
- Replaced full demo URLs inside inclusion answers with an underlined clickable `CLICK HERE` label.
- Preserved link-only quote buttons as direct links without generating an unnecessary chat response.
- Added regression tests for mobile combination stacking, repeated detail actions, ceremony follow-up actions, named links, and all three revised inclusion descriptions.

## 2.0.14

- Fixed the intake glitch that could interpret the referral choice `Venue or Event Professional` as an event location.
- The venue name and city are now always collected before event type and services when that referral option is selected.
- Tightened labeled-location extraction so `venue`, `location`, or `city` only count when followed by a clear separator such as a colon, dash, or `is`.
- Added defensive session repair for the former accidental values `Venue or Event Professional` and `Or Event Professional`.
- Added regression tests for the referral choice, required location question, and automatic repair path.

## 2.0.13

- Removed the pre-quote customer summary so the quote card is the single source of the completed event details.
- Kept the approved `I am gathering your quote... Give me a few seconds...` message and extended the first quote reveal delay to five seconds.
- Replaced the entire missing-service upsell headline font with a clean sans-serif style so `Add Uplighting for only $495` is unmistakably readable.
- Expanded the Uplighting upsell copy to include up to 18 wireless uplights, custom color matching, and a bright-white projection monogram with the couple’s names.
- Preserved the retainer and balance-due line directly above the suggested Uplighting add-on panel.
- Added regression coverage for the removed summary, five-second delay, full-headline font override, revised Uplighting copy, and quote-card content order.

## 2.0.12

- Extended the first completed quote reveal delay from two seconds to four seconds while retaining the quote-gathering message and typing indicator.
- Moved the retainer and balance-due line directly below the current total, immediately before the suggested add-on service.
- Added a blink animation only to the `Need Ceremony Sound?` button without changing the button’s colors, shape, or layout.
- Rendered the add-on price in a dedicated, high-readability sans-serif numeric style so `$495` is unmistakable.
- Added regression coverage for the four-second reveal, quote-card content order, ceremony-button animation, and readable add-on price.

## 2.0.11

- Added `I am gathering your quote... Give me a few seconds...` immediately after the completed customer summary.
- Delayed the first completed quote card for exactly two seconds while a typing indicator shows that Harmony is preparing the result.
- Removed the word `more` from missing-service upsell headlines, including `Add Uplighting for only $495`.
- Reorganized quote actions into two intentional rows: ceremony, prices, demos, and Ready to Book on top; all three What’s Included actions together on the bottom.
- Made every customer-facing Harmony assistant response and question bold black, including post-quote service details and closing messages.
- Added regression coverage for quote timing, wording, button order, action grouping, and universal assistant emphasis.

## 2.0.10

- Enlarged the green AI Event Hero presence dot and added a subtle blinking pulse with reduced-motion support.
- Added a prominent missing-service upsell panel to completed two-service quotes.
- Added Craig’s editable $495 Uplighting upsell after a wedding DJ + Photo Booth quote, including the approved Uplighting demo link.
- Added one-click `What’s Included?` buttons for DJ, Photo Booth, and Uplighting inside every completed quote card.
- Added direct deterministic service-inclusion answers so customers can get the details without typing.
- Made joke setups and punch lines bold black.
- Rebuilt joke selection around the customer’s selected services, preventing unrelated Uplighting jokes after a DJ + Photo Booth inquiry.
- Added an admin pricing field for the DJ + Photo Booth Uplighting upsell amount.
- Expanded deterministic regression coverage for the pulse, upsell, service-info buttons, and service-matched joke flow.

## 2.0.9

- Removed the spoken `Do you have another question, or would you like to end with a joke?` prompt. The existing ending buttons now handle that choice without repeating it in the conversation.
- Removed the unsolicited Magic Mirror upgrade question from post-quote responses and added a server-side guard so AI-generated replies cannot reintroduce it.
- Removed the standard final-quote confirmation sentence requested by Craig from wedding and private-event quote copy.
- Strengthened the question styling so every assistant question and any linked text inside it remain bold black.
- Added regression coverage to confirm the joke remains available only as a button and the unwanted sentences cannot appear in customer-facing replies.

## 2.0.8

- Replaced the opening line with: `Hi, I’m Harmony! Get instant pricing and answers in 60 seconds!`
- Made the opening line and every Harmony question bold black, including questions followed by helper text.
- Restored the approved available-date transition: `Good news! Your date is available. What is the venue name and city?`
- Kept short-notice and sold-out safeguards from falsely announcing availability.
- Changed every action button inside the price quote to Black Tie yellow with bold black text, while regular quick choices remain blue.
- Top-aligned the Send button with the input field and matched their one-line heights.
- Updated the closing message with office hours, the clickable toll-free number, and `Have a SUPER day!`
- Added settings migration, deterministic regression coverage, and Chromium UI checks for the new opening, question color, availability wording, quote-button color, closing text, and composer alignment.

## 2.0.7

- Bolded question lines inside Harmony messages while keeping summaries and informational copy at normal weight.
- Added short-year event-date parsing, including `5/5/27` as May 5, 2027.
- Protected the core Flint-area market, including Burton and Mount Morris aliases, from stale or overly broad blocked-location overrides.
- Added mid-conversation location corrections so `Change the city to Flint` updates the location and resumes the proper intake question.
- Removed the early `quick office review` sentence before event type and removed the duplicate travel-review sentence above the quote card.
- Updated outside-area wording to: `That location appears to be a bit outside our normal service area. We cannot provide an instant price, but an Event Hero will review the exact venue and get with you soon.`
- Added six rotating DJ, Photo Booth, uplighting, playlist, cake, and microphone jokes while preserving the true two-second pause before each punch line.
- Added the public toll-free number to the final thank-you and made telephone numbers clickable in the chat transcript.
- Unified all quick-reply and quote-action buttons with a consistent Black Tie blue treatment, white bold lettering, black outline and shadow, and a yellow accent.
- Added deterministic tests for Burton, Flint corrections, Mount Morris aliases, short-year dates, revised travel wording, question emphasis, clickable phone links, and uniform buttons.
- Added Chromium UI checks for bold questions, button uniformity, composer alignment, and the clickable toll-free number.

## 2.0.6

- Replaced the disabled button-shaped event-type hint with a clear sentence: `Other event? Please type it below.`
- Made the event-type instruction more noticeable with a branded yellow marker treatment while keeping it visually separate from clickable choices.
- Reworked customer-facing button colors to Black Tie Productions blue, yellow, red, black, and white.
- Made quote actions and ending choices consistently bold.
- Vertically centered the Send button with the input field.
- Removed the unnecessary standard quote sentence about the date not being on the sold-out list. Short-notice warnings remain active.
- Added Chromium coverage for brand colors, event-type instruction styling, Send-button alignment, bold action labels, and removal of the sold-out-list sentence.

## 2.0.5

- Changed all example and hint text inside the input box to gray while preserving bold black customer-entered text.
- Restored the approved referral transition: `While I check your date availability, where did you hear about the Event Heroes here at Black Tie Productions?`
- Kept the referral step mandatory in the intake order and added a regression test proving it appears immediately after the date.
- Added a button-shaped, disabled `Other? Please type it below.` instruction beside the three event-type choices.
- Protected Flint, Flint MI, Flint Michigan, ZIP 48506, Genesee County, and Flint Charter Township from accidental generic blocked-location entries.
- Preserved specific venue-level nonapproved overrides, including venues located in Flint.
- Added an end-to-end pricing assertion proving a Flint lead receives an instant quote.
- Expanded browser testing for placeholder color, typed-text color and weight, referral layout, and the disabled Other instruction.

## 2.0.4

- Added a compact **End with a joke** choice to the final chat buttons.
- Final prompts now ask whether the guest has another question or would like to end with a joke.
- Joke delivery is split into a setup, a true two-second pause, and a separate punch line.
- Added a final thank-you message for the guest's interest in the Event Heroes at Black Tie Productions.
- Added safe, generic delayed-message sequencing to the front-end chat renderer.
- Kept the three ending choices on one compact row to protect the fixed-height chat layout.

## 2.0.3

- Restored live capitalization for customer names, venue names, city names, month-name dates, and typed event names before they appear in the customer chat bubble.
- Rebuilt live phone formatting so the cursor follows the entered digits instead of jumping backward into the number.
- Reduced referral choices to five compact colored buttons and arranged them in a no-scroll grid on the full-page chat.
- Changed the venue prompt to exactly: “Thank you. What is the venue name and city?”
- Changed event-type choices to Wedding, Birthday Party, and Graduation Open House. Other event types are typed directly into the chat box instead of using an Other button.
- Removed a hidden duplicate acknowledgement after the phone number so the email question reads cleanly.
- Rebuilt quote positioning so every new quote opens at the top of the quote card, including after layout and font changes finish rendering.
- Moved the ceremony-sound action into the quote card next to View Quick Prices and Ready to Book, and removed the duplicate ceremony quick reply.
- Added distinct colors to quote actions and quick-choice buttons.
- Shortened the rate-sheet action to “View Quick Prices.”
- Changed the standalone wedding DJ label to “Wedding Reception DJ” and removed MC wording from customer-facing content.
- Added a bold quote notice confirming that the displayed information will be texted to the customer.
- Added browser-driven UI regression testing for capitalization, phone caret behavior, compact referral choices, event-type buttons, quote positioning, action placement, and button colors.

## 2.0.2

- Restored the compact page-chat height used by the approved previous layout, capped at 535 pixels on desktop, with the conversation scrolling inside the panel.
- Made chat input and placeholder text black and bold so customer entries are easy to read.
- Removed the duplicate name acknowledgement so “Thanks” appears only once.
- Changed the event-date question to the approved wording: “Got it. What date is your event?”
- Updated the date hint to “MM/DD/YYYY or May 6, 2028” and added support for month-name dates with an extra comma.
- Updated the referral question to explain that customers may type their own answer in the chat box. The Other button now focuses the input instead of submitting “Other” as the answer.
- Removed the unnecessary inside-service-area announcement before the next question.
- Updated service buttons to DJ Service, Photo Booth, Event Lighting/Uplighting, and Multiple Services.
- Fixed referral answers such as Other and WeddingWire from being silently misclassified as an event type, which could incorrectly trigger private-event pricing for a wedding.
- Made wedding quote cards explicitly identify wedding pricing and state that packages include up to 8 hours.
- Versioned browser session storage so the corrected flow starts cleanly after installation instead of restoring a stale test conversation.
- Expanded deterministic regression tests for the exact wording, layout rules, referral handling, service buttons, and wedding classification.

## 2.0.1

- Added separate editable prices for every wedding bundle shown on Craig's approved rate sheet.
- Updated the wedding three-service bundle to $2,495.
- Updated private-event pricing to the approved four-hour rates and pair-specific bundles.
- Kept school, corporate, fundraiser, festival, public, and community events on custom office pricing with no instant chat quote.
- Added separate DJ, Photo Booth, Uplighting, and all-service sold-out date fields.
- Added owner-editable approved and nonapproved service-area overrides, with nonapproved entries taking priority.
- Added the Uplighting demo page setting and customer-facing demo links.
- Added a safe 2.0.0-to-2.0.1 settings migration and expanded automated tests.

## 2.0.0

Initial production release of the complete rewrite.

- Added a modular WordPress architecture with no runtime dependency on the previous plugin.
- Added signed server-side chat sessions, honeypot protection, and per-IP and per-session rate limits.
- Added Craig's latest one-question-at-a-time intake order, referral-source collection, low-friction quick replies, and immediate quote delivery.
- Added deterministic wedding and private-event pricing that OpenAI cannot modify.
- Added sold-out-date enforcement, service-specific sold-out handling, short-notice warnings, and a waitlist path.
- Added locked Michigan county, township, city, and edge-area recognition. Unknown and outside locations receive office review instead of guessed pricing.
- Added ceremony sound follow-up pricing after qualifying wedding DJ quotes.
- Added optional OpenAI Responses API FAQ support with strict JSON schema and server-side API keys.
- Added office email, optional customer email, optional Twilio SMS, and signed Zapier or custom webhooks.
- Added a dedicated lead table, admin list and detail views, safe CSV export, retention cleanup, and WordPress privacy export and erasure support.
- Added responsive page and floating chat modes, legacy shortcode compatibility, keyboard support, and reduced-motion support.
- Added deterministic command-line smoke tests.
## 3.0.28
- Added immediate human handoff recognition for agent, human, representative, live operator, real person, customer service, and call-back requests.
- Added phone capture and the approved human follow-up closing message.
- Added returning-DJ intent handling for clients requesting the same DJ from a previous event.
- Prevented the generic support fallback from repeating twice; the second miss now offers office follow-up.
- Saved current-customer first names into visitor details for conversation reports.
- Added Human Follow-Up Requested report classification and cleaner source-page reporting.
