Release notes for TheClosingCompanion beta. Updated as changes are deployed. If something feels off or you have a request, reach out directly to your beta coordinator.
client_messages table with full per-broker row-level security. No login required for clients — the URL token is the credential. Magic-link auth is on the roadmap for Phase 2.theclosingcompanion.com/client-closing-companion.html?token=… for sharing.blueprint_client_id on the transaction, tccId on the Blueprint row) which lives in Supabase and is unaffected by local storage. Once you link a client, that pair stays quiet across all sessions and devices.dayOverrides field.f35AdditionalDays, which is used when buyer invokes ATI to calculate the extended inspection deadline. Custom values up to 60 days supported. Old transactions continue to use the original 5-day default with no change.blueprint_client_id column. If no Blueprint match, the original "Add to Blueprint?" flow runs unchanged.commPct × price × split.tccLink library with weighted scoring (name +50, last-name only +25, address +30, close date +20, same side +10, same quarter +5) handles real-world messiness: "Smith, John" vs "John Smith," "John A. Smith" vs "John Smith," "123 Main St" vs "123 Main Street," apartment and suite suffixes, zip codes. 37 automated tests passing.canvas.toBlob() to stall silently during encoding. Logos now flatten to a white background before encoding and always save as JPEG, which is both reliable across browsers and visually indistinguishable at 92% quality for logo-sized images. Added 15-second encoding and 30-second upload timeouts with clear error messages instead of silent hangs.(###) ###-#### regardless of how it's typed or pasted. Handles leading country codes (1-206-555-1234), dots (206.555.1234), dashes, and parentheses. Preserves cursor position so editing mid-number doesn't jump you to the end. A lightweight MutationObserver catches dynamically-injected phone inputs automatically so brand settings, transaction detail drawer, contacts directory, and any future phone field all format consistently without per-field wiring.[Crop] console logs at every step (canvas obtained, blob created, uploading, upload complete) make debugging upload issues immediate. Button state resets on error so you can retry without a page reload.brokerages, presenting_brands, accounts, account_members — admin-scoped writes with an is_account_admin() helper function, private brand-assets Storage bucket.brand-assets Supabase Storage bucket keyed by {accountId}/{assetKey}.{ext}, overwriting any prior version.brokerages table via the transaction's account_id, with a hardcoded fallback (TCC_DEFAULT_BROKERAGE) so the footer never displays empty.is_placeholder = true) with a "Complete Setup →" jump-to-modal button, preventing accidental launches without required compliance data.custom_tasks, task_assignees, saved_timelines, listings, and tcc_roadmap were referenced by the code but never existed in Supabase; all writes had been silently failing and falling back to localStorage. All five now exist with proper schemas, indexes, and RLS policies. Existing localStorage data will sync to Supabase on next save.client_email and client_phone were being written by the Hub but had never been created on the transactions table, causing every upsert to silently drop those fields. Added both columns plus a lowercase index on client_email for fast lookups. Future transaction saves will persist client contact info correctly.*_client_read SELECT-only policies match rows via lower(transactions.client_email) = lower(auth.email()). Clients cannot write to any table.account_id on every transaction upsert. Previously this field was always NULL, leaving the new account/brand architecture unable to join back to transactions.color field on transactions that had been renamed to row_color in a prior session. Removed from the upsert row-map; the color-picker UI was already removed in v1.5.0.tcc-sw.js is now live, registers cleanly on every Hub load, and unlocks "Add to Home Screen" install prompts on iOS, Android, and desktop. Scaffolding for push notifications (push + notificationclick handlers) is in place for a future release. Network strategy is pass-through — no caching, by design, since TCC relies on real-time Supabase reads.tcc-manifest.json defines app name, theme color (#1a1a2e), display mode (standalone), and three icon sizes. Placeholder gold-on-ink TCC monogram icons generated at 192×192, 512×512, and 512×512 maskable. Favicon and apple-touch-icon added. App title standardized to "TheClosingCompanion" across meta tags.year_built and f17_date, so these fields weren't making it to Supabase. Added to both the save and load paths; existing transactions rehydrate correctly on next open.txnGetColor) is now auto-assigned by transaction type and remains as the visual differentiator.renderPaceBar where currentQ was referenced before declaration at lines 1581 and 1588. Moved the declaration above first use.roadmap.html (jesse@soundteamrealty.com only) with tabs for Ideas, Sprints, IP Tracker, and Beta Testers.prefillAddressFields() helper parses existing addresses back into components when promoting a live listing to an active transaction.ReferenceError in hubBuildTimelineAdjuster was referencing txn (which doesn't exist during wizard setup) when filtering ATI offset deadlines. Fixed by skipping ATI rows entirely during wizard setup, since they only apply mid-transaction..done { text-decoration: line-through } CSS rule was bleeding into the wizard step indicator because completed steps used className = 'wstep done'. Renamed to wstep-done class to avoid the collision. Completed steps now appear grayed/teal only — no strikethrough.contenteditable editors with a formatting toolbar: Bold, Italic, Underline, Font Size (Small/Normal/Large/X-Large), Text Color picker, and a variable inserter button. Formatting saves automatically to localStorage.htmlToText() contained literal newline characters inside JS string arguments (a Python write artifact), causing a browser syntax error that crashed the entire script and surfaced as renderSidebar is not defined. Fixed by using proper
escape sequences.z-index: 2–3 without pointer-events: none, sitting invisibly over the action buttons and swallowing clicks.renderPaceBar() crashed the entire render chain before updateProgress() could run. currentQ was declared after it was used. Fixed by moving the declaration to the top of the function.pendingTcc records older than 7 days are automatically dismissed and no longer fire the toast on every load.flex-shrink:0 so it can never be pushed off screen regardless of viewport width.{address}, {seller}, {mls}, {dom}, {closing}, and {broker} are auto-filled at send time.openComposeModal(null), which immediately threw an error trying to read escrow/lender off a null transaction. Fixed: Friday Update now drives the compose modal directly, wiring in the listing's seller email and bypassing the transaction lookup entirely.promoteToActiveFromLive — function declaration appeared twice in the pipeline script block after an injection, causing a parse error. Duplicate removed.openComposeModal — same injection issue caused this function to be declared twice. Duplicate removed.openHowToUse() and closeHowToUse() JS functions were missing. Both added — button now opens the modal correctly.tcc_bridge_v1. Blueprint reads and deduplicates these on load and on every "Import from TCC."$650,000) on input, matching the main transaction price fields.type="date" inputs now skip directly to the next field on Tab, bypassing the icon.#f8f4ef, surfaces: white, accent: gold #c9a84c.tcc_theme_v1) so a theme choice on any page applies everywhere.openSettings, closeSettings, font size, theme) were missing. Now fully wired.renderContacts() function that was shadowing the active implementation.renderSidebar is not defined console error on load.renderContact() but the function was never defined. Now shows Agent, Escrow, and Lender cards with Call and Email buttons.allowed_emails and blocked_emails tables, Edge Functions for approve/block/request-access via Resend.hrrmokcgyuxethpomwuf.supabase.co — all transaction data, check states, custom tasks, notes, contacts synced to cloud when signed in./blueprint — pipeline snapshot, per-client commission/GCI tracking, bell curve visualization, duplicate client feature, and Team Leader role with per-agent tabs.tcc_bridge_v1) enables cross-app data awareness.