Beta ← Back to Home

What's New

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.

v1.6.2 April 28, 2026 Patch
Client Messaging — Phase 1
Two-way messaging between broker and client — every transaction now has a unique client portal link the broker can share via email or text. Clients open the link, see their transaction status and timeline, and can send messages directly to the broker. Brokers compose messages from the Portal preview pane in the hub. New messages flow both directions and are stored in a dedicated 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.
Realtime delivery — broker side subscribes to Postgres change events filtered by owner, so client-originated messages appear in the inbox within seconds without refresh. Client side polls every 15 seconds — anonymous realtime requires extra config that's deferred to Phase 2. Both sides do optimistic local insert for instant UI feedback, then reconcile with the server.
Per-transaction portal links — every new transaction now generates a 48-character random token (192 bits of entropy). Existing transactions get their tokens backfilled automatically on first load. The "🔗 Copy Portal Link" button on the Portal pane copies a ready-to-paste URL like theclosingcompanion.com/client-closing-companion.html?token=… for sharing.
Read receipts — messages track read status separately for broker and client. Unread broker messages bump the inbox badge; broker messages are marked read by the client a few seconds after the portal opens, and client messages get marked by the broker on click. The infrastructure is ready for "Client read your message at 3:42pm" indicators in a future patch.
Visual Identity — Per-Transaction Colors & Avatars
Per-transaction color identity — every active transaction gets a distinct color from a 10-color palette (coral, mint, lavender, mustard, slate, peach, sage, plum, turquoise, pink). Colors appear as a left-border accent and a circular avatar before the address everywhere a transaction is referenced: sidebar list, dashboard active list, dashboard upcoming deadlines, CRM client cards, search results, and transaction picker pills. Same transaction shows the same color in every location. Colors are recycled when a transaction closes, so you never run out — and the same color can re-cycle to a new deal months later.
Role-aware avatars for scale — the colored ring around each transaction's avatar shows identity; the contents show ownership. For solo brokers and team leaders, the avatar shows the assigned broker's initials (so "JS" for Jennifer Smith vs "PR" for Pat Reynolds). For Transaction Coordinators, the avatar shows the team logo (uploaded via Settings → Brand Settings → Presenting Brand). The combination scales to thousands of transactions without confusion: at small books colors disambiguate; at 100+ active deals where colors necessarily repeat, the initials still tell each one apart.
Office tier already wired — when offices come online (planned for v1.7), the avatar resolver only needs one new condition at the top: office logo for office admins, falling back through team logo and broker initials. The render code stays unchanged.
Pipeline — Full Visibility
Sidebar Pipeline panel now shows every stage — the bottom Pipeline summary used to count only under-contract transactions. It now shows Upcoming Buyers, Upcoming Listings, Live Listings, Under Contract, Closing Soon, and Closed YTD. Each row is clickable: clicking Upcoming Buyers expands the matching pipeline section in the sidebar and scrolls to it; clicking Under Contract or Closing Soon goes to the Clients tab; clicking Closed YTD goes to History.
Dashboard Pipeline KPI — the "Total Transactions" KPI is renamed to "Pipeline" and now counts all four pipeline stages (under contract + live listings + upcoming listings + upcoming buyers). The sub-label below the number shows the breakdown ("3 under contract · 4 live · 3 upcoming listings · 2 upcoming buyers") so the count is always interpretable at a glance. Clicking Pipeline opens a grouped view showing every stage, each with its own section header — finally a single screen showing your entire book.
Listing & buyer milestones now count toward Deadlines This Week and Overdue — BBSA expirations, listing agreement expirations, price review dates, offer review dates, and pre-approval expirations now all increment the Deadlines This Week and Overdue KPI cards on the dashboard. Previously these were only shown in the lower deadline list and didn't update the top numbers — hiding pipeline urgency. A BBSA expiring tomorrow will now correctly show in your week count.
"Active" renamed to "Under Contract" — eliminates the long-standing ambiguity where "Active" could mean "in your active book" (anything not closed) or "under contract specifically." The label is unambiguous now.
Fixes
Cross-match prompt no longer re-asks after linking — the Blueprint × Hub cross-match prompt was re-appearing on every login after the user had already clicked "Yes, these are the same person" and linked the records. The scan was checking only the localStorage bridge for suppression, but the bridge isn't synced to Supabase — so any session on a different browser, or after a localStorage reset, would trigger the prompt again. The scan now also checks for the durable link state (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.
Active Transactions sidebar counter — the count next to "Active Transactions" in the sidebar was always showing 0 regardless of how many transactions you had. Fixed.
Reply form crashed silently — replying to a client message in the broker's inbox referenced the transaction variable before it was defined, throwing an error mid-flight that prevented the reply from saving. Fixed; replies now save reliably and propagate to Supabase as child messages of the parent.
Empty array load bug — if your transactions, listings, contacts, or workspace invites lists were empty (zero entries), the load function was treating the empty array as "no data" and skipping the assignment. This caused state to silently fall back to defaults instead of correctly loading an empty list. Fixed for all six affected arrays.
Co-op broker overwriting lender card — selecting a co-op broker contact via autocomplete was incorrectly populating the lender card with the co-op broker's brokerage, email, and phone. The contact-to-input mapping has been refactored to use explicit IDs instead of binary fallback heuristics; each role now fills its own card cleanly.
Create New dropdown stayed under the header — z-index on the Create New action menu was below the app header, causing it to render hidden behind it on smaller screens. Raised both layers; the menu now overlays correctly.
Modal focus trap — Tab inside an open modal could escape behind to the page underneath, scrambling focus. Tab now cycles within the modal's interactive elements and Shift+Tab cycles backward, matching standard accessibility expectations.
Polish
Whole-row click → checkbox-only click — checking off a checklist task no longer requires clicking precisely on the small checkbox; the entire row is clickable now, but only the checkbox triggers the toggle. Easier on mobile and trackpads.
Owner badges removed from broker checklist — the Agent / Buyer / Seller pills next to each task were redundant on the broker's view (you already know which transaction you're looking at). They're preserved on the client portal where they actually matter.
Live Listing card simplified — removed the right Special Details column that was redundant with the left grid. Listing Expiration moved to the left column. Single-column layout reads cleaner at any screen width.
Calendar icon contrast fix — the calendar icon on date-input fields was barely visible against the cream background. Switched to solid black for legibility on light themes.
Favicons added — the marketing site, Blueprint, and Changelog now have proper favicons. Marketing and Changelog use an amber "TC" monogram on a dark background; Blueprint uses a teal "BP" monogram. Inline SVG so no asset round-trip.
v1.6.1 April 27, 2026 Patch
Contacts Intelligence — Phase 1
Autocomplete from your contacts directory — the Escrow, Lender, TC, Co-op Agent, and Co-Broker name fields on transactions now suggest matching contacts as you type. Click a suggestion to autofill the name plus phone, email, and brokerage in one click. Suggestions are filtered by role: typing in the Escrow field only shows escrow contacts, typing in Lender only shows lenders. No more retyping the same escrow officer's contact info on every transaction.
Smart match scoring — suggestions sort by relevance: name starts-with the query first, name contains second, company name third. Phone numbers run through the global formatter on autofill so the formatting stays consistent regardless of how the contact was originally saved.
Keyboard-friendly — arrow keys navigate the suggestion list, Enter selects, Escape closes. Mouse and touch work as expected. The dropdown auto-closes on scroll or when you click away. Existing values you've already typed are never overwritten.
Multi-role aware — if a contact has additional role tags (e.g. someone who's primarily an Escrow Officer but also tagged as a Lender), they appear in both autocompletes. Their primary record stays single-role; tags just expand visibility.
Documents — Phase 1
Per-transaction document storage — every transaction now has a 📎 Documents button in the Manage Transaction drawer. Drag-and-drop or click to upload PDFs and images (PNG, JPG, WEBP, HEIC) up to 25MB. Files are stored in a private Storage bucket scoped to your account, with row-level security so only you can see your own documents.
Tag uploads to specific forms — each document can be tagged with a form ID from that transaction (Form 21, F22S, F17, etc.). When you tag a document with a form, that form is automatically marked as "sent" on the transaction's checklist — one less click. Tag with "Other" if it's not associated with a specific form.
Preview, download, delete — every uploaded document has a 🔍 preview button (opens in a new tab via 1-hour signed URL), a ⬇ download button, and a × delete button (with confirmation). Signed URLs are regenerated per request and never cached, so a stale link can't leak out.
Client visibility toggle — each document has a 👁/🔒 toggle. Broker-only by default; flip to make it visible. The client portal Documents section ships in a future Phase, but the visibility flag is already enforced at the database layer for when it does.
Editable Timelines & Additional Inspection
Edit any deadline directly from the checklist — every contingency line on a transaction's checklist (EM, IVP, inspection, financing, title review, neighborhood review, feasibility, walkthrough, etc.) now has a small ✎ pencil button next to its date. Click to open an editor that lets you either pick a new deadline date directly OR extend by N days from mutual/closing. Live preview shows the resulting date and how it differs from the current deadline as you type. Reset-to-default is one click. Edits made inline are equivalent to editing in the Manage Transaction drawer — both update the same per-transaction dayOverrides field.
Audit trail for every deadline change — when a deadline is changed (whether from the checklist pencil or the manage drawer), a structured note is automatically logged to that transaction's note log: original deadline, new deadline, day-count delta, and an optional reason field. The reason field accepts free text like "Mutual extension agreed via email Apr 28" and gets included in the audit entry. Useful both for personal record-keeping and as an evidentiary trail if a date dispute ever arises.
Earnest money default raised to 3 days — earnest money is now due 3 business days after mutual acceptance by default, up from 2. Existing transactions are unaffected unless their EM deadline was explicitly set to 2 days; new transactions default to 3.
Configurable Additional Time for Inspections (ATI) — the new-transaction wizard now shows an "Additional Time for Inspections (ATI)" field (default 5 business days) whenever Form 35 is selected. This sets the per-transaction 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.
Manual ATI trigger button — the inspection-period checklist line now has a "🔬 Trigger ATI" button that lets the broker manually invoke Additional Time for Inspections at any point during the inspection period (not only on the last day). Click → date picker → confirm. The system uses the trigger date — not the inspection-period end date — to calculate the extended deadline. ATI initiation is logged to transaction notes with date and day count for the audit trail.
Smart Client Linking — Blueprint × Hub
Duplicate detection when adding Blueprint clients — type a client name in the Blueprint and the system checks for duplicates before saving. If a match is found (same first + last name, OR same last name + same lead source), a three-way dialog asks: Same person — link to existing, Different person — keep both, or Same person, new deal. Choosing "same person, new deal" creates a new entry tagged as a repeat client so all of that person's deals can be grouped together later. No more accidentally creating duplicate records when a buyer from two years ago comes back to sell.
Auto-suggest Hub transactions from Blueprint — when you add a client to the Blueprint under contract or closed, the system scans your Hub for a matching transaction using fuzzy name matching. If a strong match is found (score ≥ 85), you're offered to link the two records. If no match, you can queue a new Hub transaction with pre-filled client info, side, and lead source. For prospect-level entries, a lightweight toast offers the same without interrupting your flow.
Auto-suggest Blueprint clients from the Hub — symmetric companion: when you create a new Hub transaction, the system scans your Blueprint for a matching client. If found, the prompt becomes "Found Sarah Mitchell in Blueprint Q3 — link?" with a clickable match card showing quarter, side, and status. Click to link both records and persist the connection in Supabase via the new blueprint_client_id column. If no Blueprint match, the original "Add to Blueprint?" flow runs unchanged.
Commission carries over to Blueprint automatically — when a transaction is sent to Blueprint (via Add to Blueprint, the cross-match link, or the Import from TCC button), the broker's net commission is now calculated in the Hub and written into the bridge. Blueprint reads it on import so closing price, GCI, and side all populate correctly without re-entry. If the bridge record predates this change or is missing commission for any reason, Blueprint falls back to recomputing from commPct × price × split.
Fuzzy name and address matching — new 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.
Stable IDs for every Blueprint client — every client record now gets a stable UUID on first load so linking, repeat-client grouping, and future sync remain reliable even when clients are reordered or moved between quarters. Older records are migrated automatically.
Repeat-client view — when a client appears in two or more entries in your Blueprint (a buyer who came back to sell, a repeat customer with a new deal), a small "🔄 N" badge appears next to their name. Click it to see every deal with that client across all quarters: status, side, sold price, GCI, and a lifetime roll-up showing total deals, closed deals, total volume, and total GCI. Click any entry in the list to scroll back to that row and highlight it. Lifetime client value, finally visible at a glance.
Visual link indicators — Blueprint clients linked to a Hub transaction now show a small 🔗 icon next to their name. Hub transaction cards linked to a Blueprint client show a small 📋 icon next to the address. Hover either for a tooltip. Confirms at a glance that records are connected without opening any modals.
Fixes & Refinements
Brand logo upload no longer hangs — transparent PNG logos (like those with checkerboard backgrounds exported from design tools) were causing 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.
Global phone number formatting — every phone field in the Hub now auto-formats to (###) ###-#### 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.
Better upload error handling — the crop modal now displays user-visible error messages (both inline and as an alert) instead of silently failing. Detailed [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.
v1.6.0 April 21, 2026 Major Update
Brand Architecture — Compliance & Identity
Two-layer brand model — every account now has a required Brokerage (DOL compliance layer: licensed entity, managing broker, office address) and an optional Presenting Brand (marketing identity: team name, tagline, colors, logos). Four new Supabase tables — brokerages, presenting_brands, accounts, account_members — admin-scoped writes with an is_account_admin() helper function, private brand-assets Storage bucket.
Brand & Compliance modal — new Settings drawer section opens a full-screen modal with three columns: Brokerage form (DOL-required fields), Presenting Brand form (optional marketing fields), and a live client-portal preview panel. All fields populate from saved Supabase data; saves are admin-only via RLS.
Logo & photo uploads with cropping — three upload slots (brokerage logo, presenting brand logo, agent/team photo) each route through a Cropper.js modal before uploading. Logos use free aspect ratio; the agent photo is locked to 1:1 square for circular team-photo rendering. Output is capped at 800×800px. Files upload to the brand-assets Supabase Storage bucket keyed by {accountId}/{assetKey}.{ext}, overwriting any prior version.
Live preview panel — the right-hand column of the Brand modal renders a mini client-portal mockup that updates in real-time as you type, pick colors, or upload images. Shows the presenting brand hero, welcome message, team photo, and DOL compliance footer together in a scaled-down frame.
WCAG contrast checking — brand color pickers now show live contrast ratios vs white. Primary and accent colors each display ✓ green (≥4.5:1), ⚠ amber (3.0–4.5:1), or ✕ rose (<3.0:1). A "Fix →" button snaps a failing color to the nearest WCAG-compliant shade by nudging lightness while preserving hue and saturation. A separation indicator checks primary-vs-accent distinction.
Preview as Client button — opens the real client portal in a new tab with dummy data ("Alex Preview" at "123 Demo Lane") and the broker's live brand applied. Includes a buyer/seller toggle in a dark banner at the top so you can see both roles. Unsaved form changes trigger an amber warning: "The preview shows saved data only — save your changes to see them here."
DOL compliance footer on client portal — every client portal page now shows a required disclosure footer with the brokerage name, address, phone, website, managing broker, agent license number, and brokerage logo. Data flows from the brokerages table via the transaction's account_id, with a hardcoded fallback (TCC_DEFAULT_BROKERAGE) so the footer never displays empty.
Brand-aware client portal hero — buyer and seller welcome heroes now display the presenting brand logo above the greeting. Hidden gracefully if no logo is uploaded.
Hub-wide brand footer — a small brand strip now sits at the bottom of every Hub page showing the presenting brand logo, name, and brokerage (e.g. "Sound Team Realty · RE/MAX Northwest"). Auto-hides when brand data is missing.
Blueprint brand line — the Business Planning Blueprint header now shows a subtle "[logo] Presenting Brand · Brokerage Name" line below the title, loaded asynchronously after auth.
DOL compliance banner — Hub displays a rose-colored banner at the top when the account's brokerage is still a placeholder (is_placeholder = true) with a "Complete Setup →" jump-to-modal button, preventing accidental launches without required compliance data.
Security & Schema Hardening
Five missing tables createdcustom_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.
Missing transaction columns addedclient_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-side RLS read policies — OTP-authenticated clients can now read their own transactions, check states, custom tasks, notes, account, brokerage, and presenting brand data. Seven new *_client_read SELECT-only policies match rows via lower(transactions.client_email) = lower(auth.email()). Clients cannot write to any table.
account_id writes on transactions — the Hub now writes account_id on every transaction upsert. Previously this field was always NULL, leaving the new account/brand architecture unable to join back to transactions.
Stale color column removed from upsert — the Hub was writing a 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.
Progressive Web App
Service worker deployedtcc-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.
Manifest & iconstcc-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.
Bug Fixes & Refinements
Landing page version strip updated — index.html changelog callout now correctly reads v1.6.0 (previously stuck at v1.3.0 through all of v1.4.0 and v1.5.0).
Year Built and F17 date persistence — the Hub's upsert row-map was missing 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.
Sidebar card simplification — Upcoming Listings and Upcoming Buyers cards now show address and client name only. Full checklist detail remains in the detail drawer, removing visual clutter without losing any information.
Color picker removed from sidebar & CRM cards — the color dot and swatch picker have been removed from client cards. The accent stripe (txnGetColor) is now auto-assigned by transaction type and remains as the visual differentiator.
Blueprint Pipeline Snapshot TDZ crash — second instance — after the v1.5.0 fix, a new temporal dead zone error surfaced in renderPaceBar where currentQ was referenced before declaration at lines 1581 and 1588. Moved the declaration above first use.
Product Roadmap moved to private page — the "Product Roadmap & Ideas" block has been removed from the Hub Dashboard and now lives at the email-gated roadmap.html (jesse@soundteamrealty.com only) with tabs for Ideas, Sprints, IP Tracker, and Beta Testers.
v1.5.0 April 6, 2026 Major Update
New Transaction Wizard — Address Fields
Structured address entry — Street Address, City, Unit # (optional), State, and ZIP are now separate fields in Step 1. State defaults to WA. All five fields assemble into a single formatted address string stored on the transaction. A prefillAddressFields() helper parses existing addresses back into components when promoting a live listing to an active transaction.
Year Built field — optional field in Step 1 alongside State and ZIP. If 1978 or earlier, an amber warning note appears immediately and Form 22J (Lead-Based Paint Disclosure) is automatically added to the selected forms. 22J remains available for manual selection on newer homes.
New Transaction Wizard — Forms & Timeline
Cash auto-selects Evidence of Funds (22EF) — selecting Cash now removes Form 22A (Financing Addendum) and automatically adds Form 22EF (Evidence of Funds). Toggling cash off reverses both. The adjustment fires both when the Cash button is clicked and when Step 3 loads, so the order of operations doesn't matter.
Timing descriptions removed from form selector — the day-count explanations under each form in the Select Forms step have been removed. Days and rules are still applied correctly to deadlines; they just aren't shown during selection since they can change.
"Next → Adjust Timelines" now works — a 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.
Form 17 late delivery toggle — in Step 4 (Adjust Timelines), when Form 17 or 17C is selected, a banner appears with a checkbox: "Form 17 delivered after Mutual Acceptance." Checking it reveals a receipt date picker. The Buyer Rescission Deadline (3 BD) recalculates from the receipt date in real time instead of mutual acceptance. The F17 receipt date is stored on the transaction object.
Unit No. removed from Contract Details — the Unit No. field on the Form 28 (Condo) panel has been removed. Unit number is now captured in Step 1 as part of the address fields and baked into the assembled address string.
Wizard Step Indicator
Completed steps no longer show strikethrough — a global .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.
Email Templates
Rich text editor — email template body fields now use 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.
Copy Formatted button — each template has a teal "📋 Copy Formatted" button that copies the full template (subject + body + sign-off) to the clipboard as HTML + plain text simultaneously. Pasting into Gmail or Outlook preserves all formatting. Falls back to plain text copy on older browsers.
Import Template — an "⬆ Import Template" button at the top of the templates section opens a modal to paste content or upload a .txt / .html file. Choose which template field to import into. Auto-detects HTML vs plain text. Opens the relevant template card after import.
Auto-collapse on open — opening one template card now automatically collapses all others.
Section order — Emails tab now reads: Email Templates → Reminder Settings (collapsible) → Email Reminders. Templates are the primary editing surface; reminders are the action queue.
Reminder Settings collapsible — the three reminder toggles (Friday Updates, Closing Week, Review Requests) now live in a collapsible block below the templates.
Clients Tab — Search
Search collapsed by default — the full filter panel is hidden behind a compact "🔍 Search & Filter" pill. Click to expand, click again to collapse.
Search Bar
Search no longer overflows the header — the global search input now collapses to an icon-only button (32px) when unfocused and expands to 220px on focus. It expands leftward into available space rather than pushing content off the right edge of the screen.
Role Gate & Auth
Role selection now clickable after deploy — the auth modal (z-index 9999) was sitting on top of the role gate (also z-index 9999) in DOM order, blocking all clicks. Fixed by: bumping auth modal to z-index 10001, role gate to 10000, and deferring role gate display until after Supabase auth resolves — so the auth modal always completes before the role gate appears.
Bug Fixes
SyntaxError on load fixedhtmlToText() 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.
Settings drawer content no longer leaks onto page — a duplicate Appearance/theme block injected in a prior session caused the settings drawer's div counter to close prematurely, leaving Notifications, Role, TC, App, Account, and Data sections floating in the normal document flow at the bottom of every tab. Removed the stale block; drawer now closes correctly at the footer wordmark.
Edit button on client cards now works — two root causes: an orphaned CSS block was corrupting the stylesheet parser; and timeline overlay elements had z-index: 2–3 without pointer-events: none, sitting invisibly over the action buttons and swallowing clicks.
"Fallen" renamed to "Terminated / Canceled" — updated in the checklist sidebar, Clients tab card button, edit modal dropdown, status labels, confirm dialogs, and all toast messages.
Blueprint Pipeline Snapshot now populates — a temporal dead zone error in 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.
v1.4.0 April 6, 2026 Major Update
Checklist — Transaction Picker
Inline transaction switcher — a scrollable pill row now appears at the top of the Checklist tab showing all active transactions. Click any pill to switch without leaving the tab. Hidden when only one active transaction exists.
Checklist — Status Actions
Status buttons moved to sidebar — "Mark as Closed" and "Terminated / Canceled" removed from the top action bar and relocated below the Transaction Progress card in the right sidebar.
Navigation
Scroll resets on tab switch — switching to any tab now scrolls the content area back to the top automatically.
Settings Drawer
Account + Data footer consolidated — merged into a single clean footer with a faint "TheClosingCompanion" wordmark at the bottom.
v1.3.0 April 6, 2026 Major Update
Checklist — Transaction Header
Transaction identity card — a header card now appears above the checklist groups showing the full property address, client name, side (Buyer / Listing / Dual Agency), price, mutual acceptance date, closing date, and MLS#. Left border matches the transaction's assigned color. Clears when no transaction is selected.
Checklist — Action Bar
Streamlined action bar — reduced from 8 buttons to 5. Primary actions always visible: 👁 Client View, ✉ Portal, ✓ Closed, ✕ Fallen. Secondary actions (Email Summary, Export .ics, Print, Send to Blueprint) moved into a ··· overflow dropdown. No more horizontal overflow.
Emails Tab — Badge
Reminder badge on nav tab — a red count badge appears on the ✉ Emails tab whenever there are unsent reminders due today (Friday updates, closing week emails, or review requests within 3 days of close). Updates on every dashboard load. Disappears once all reminders are handled.
Blueprint → TCC Bridge
Correct pipeline routing — Blueprint clients sent to TCC now open the right modal. Sellers open the Upcoming Listing modal pre-filled with name and address. Buyers open the Upcoming Buyer modal pre-filled with name. Previously both were incorrectly routed to the full Active Transaction wizard.
Persistent dashboard banner — undismissed Blueprint pending clients now appear as a persistent amber banner on the dashboard in addition to the toast. Survives page reloads until acted on.
7-day expiry — stale pendingTcc records older than 7 days are automatically dismissed and no longer fire the toast on every load.
Clearer toast language — toast now says "Add to pipeline as an Upcoming Listing/Buyer?" instead of the generic "Start a TCC transaction?" so the destination is explicit before you click.
Blueprint — Import from TCC
Ignore button per record — each closed transaction in the import modal now has an Ignore button alongside the Q1–Q4 buttons. Ignoring marks it handled without adding it to Blueprint and dims the row. It won't reappear on future opens.
Import All button — imports every pending closed transaction at once, automatically assigning each to the correct quarter based on its closing date (Jan–Mar → Q1, Apr–Jun → Q2, etc.).
Blueprint — Pace Bar
Quarter label removed — the pace bar label now reads "X of Y closes" with no quarter reference.
Future quarter closes excluded — closes entered in future quarters (e.g. Q4 when it's only Q2) no longer count toward the current pace total. Only quarters that have already started are included.
History — Moved into Totals
History tab removed from nav bar — Transaction History now lives at the bottom of the Totals tab, below the CSV export buttons. History is reference data, not a daily workflow tab. The nav bar is now: Dashboard · Clients · Checklist · Emails · Contacts · Totals · Team.
History section in Totals — year tab filters, stats bar (closed count, volume, avg days, GCI), and full expandable transaction cards with parties, forms, commission, and Reopen button. All existing features preserved.
All history redirects updated — any part of the app that previously jumped to the History tab (mark closed, global search, CRM history button) now routes to Totals and scrolls to the History section.
Contacts — Custom Role
"+ Add New…" in role dropdown — selecting this option in the Add Contact modal reveals a text input to type any custom role. The custom value saves as the contact's role and appears correctly in the role filter pills.
Clients Tab
Section title updated — "Client Tracker" renamed to "Active Clients."
Header — Navigation
+ Create New always visible — moved to the left of the search bar and given flex-shrink:0 so it can never be pushed off screen regardless of viewport width.
Settings Drawer
Collapsible sections — Deadline Notifications, Pre-Listing Task Defaults, Buyer Checklist Defaults, and App sections are now collapsed by default. Click any section header to expand. Display, Appearance, and Role remain open.
Max-width capped on mobile — settings drawer now caps at 420px even on narrow viewports. Previously went full-width making it feel like a page takeover.
Notification thresholds hidden when disabled — the individual threshold rows (Overdue, Today, 1 day, etc.) are now fully hidden when Enable Notifications is off, not just grayed out.
Client app: duplicate theme cards removed — orphaned Midnight, Light, and Custom theme cards that were rendering twice in the client app settings drawer have been removed.
Index Page
Logo contrast fixed — "TheClosingCompanion" in the header was dark text on a dark background. Now renders in warm white for proper contrast against the semi-transparent dark header.
Feature bullets updated — hub and client app cards now reflect current capabilities including the Emails tab, seller three-phase portal, and production totals.
Version strip bumped — changelog strip updated to v1.3.0.
v1.2.0 April 5, 2026 Major Update
Emails Tab (New)
Dedicated Emails tab added to the hub nav bar. Three sections: Reminders, Templates, and Settings.
Friday Update reminder — fires every Friday for each active live listing. Shows address, seller, MLS#, and a "Due Today" badge. Pre-fills the compose modal with the listing's seller email, subject, narrative body, and NWMLS stats table structure. Once sent, the button becomes "↺ Resend."
Happy Closing Week reminder — fires on Monday of any week a transaction closes. Shows upcoming closings within 14 days so you can see them coming. Separate buyer and seller versions pre-filled based on transaction side.
Review Request reminder — appears for any transaction closed in the last 30 days. "Send Soon" badge for the first 3 days post-close. Pre-fills with your full review request letter including the Google review link.
Editable templates — Friday Update (opening narrative + sign-off fields), Happy Closing Week (buyer and seller versions), and Review Request all editable in-place. Changes save automatically. Each has a "↺ Reset to default" button. Variables like {address}, {seller}, {mls}, {dom}, {closing}, and {broker} are auto-filled at send time.
Reminder settings — toggle each reminder type on/off independently.
Client Portal — Seller Three-Phase Journey
Portal tab now live in the client app — ◎ Portal added to the nav bar for both buyer and seller clients. Previously built but hidden.
Seller portal — three-phase journey — sellers see all three phases of their sale in a single scrollable timeline: Pre-Listing (prep milestones), On Market (MLS#, DOM, price), and Under Contract → Closing (key dates with approximate deadlines). Phase progress pills in the hero update automatically as the transaction advances.
Collapsible phases — past phases collapse once the transaction moves on, but sellers can always click to expand and review their full journey from day one.
Buyer portal — buyers see a closing-focused view: days-to-close countdown, all 10 closing milestones with live completion status, team contacts, and a buyer FAQ (earnest money, inspection, financing contingency, walk-through, closing day).
Role-aware — the portal automatically detects whether the client is a buyer or seller based on their email and shows the appropriate view.
Dashboard
Closing Soon banner — a green alert row appears on the dashboard for any transaction closing within 3 days. Shows "Closing Today," "Closing Tomorrow," or "Closing in N days." Clickable to jump directly to that transaction's checklist.
Global Search
Search bar in the nav header — searches active transactions, closed history, upcoming buyers, upcoming listings, live listings, and contacts as you type. Results appear in a floating dropdown with section labels. Click any result to navigate directly. Esc to close, Enter to select the first result.
Live Listings — Price Reduction Log
📉 Price button on each live listing card. Opens a prompt for the new price, logs the change with date and previous price, and updates the listing's current price. Full price history displays inline on the card below the notes field.
Email Compose — Templates
Template picker in the compose modal — five one-click templates above the recipient selector: 🤝 Mutual Acceptance, 🔍 Inspection Reminder, 🔑 Closing Instructions, 💵 Earnest Money, 🚶 Walk-Through. Each pre-fills the subject and body using the transaction's actual data.
CRM — Client Cards
Next task is now clickable — the "Next: [task name] · [date]" line on CRM client cards navigates to the checklist and scrolls to that specific task, highlighting it with a 2-second teal flash.
Duplicate buttons removed — each active transaction card previously showed both "☑ Deadlines" and "☑ Tasks" doing the same thing. Consolidated to a single "☑ Tasks" button.
Fallen Through — Quick Action
✕ Fallen Through button added to the checklist action bar (alongside Mark Closed). Hidden when the transaction is already closed or fallen. Confirms before marking, then removes the transaction from the active pipeline.
✕ Fallen button added to CRM client cards for the same quick action without navigating to the checklist first.
History Tab
GCI on collapsed card headers — net commission now shows inline on each closed transaction card in amber without requiring a click to expand. Role-gated (brokers and team leaders only).
Contacts
New contact roles added — Stager, Photographer, Contractor, and Financial Advisor added to all contact role dropdowns and tag pills throughout the app.
Duplicate "Broker" option removed — the Broker role appeared twice in every role dropdown. Consolidated to a single entry.
Bug Fixes
Friday Update email crash — the Send button on Friday Update reminders called 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.
Duplicate promoteToActiveFromLive — function declaration appeared twice in the pipeline script block after an injection, causing a parse error. Duplicate removed.
Duplicate openComposeModal — same injection issue caused this function to be declared twice. Duplicate removed.
v1.1.1 April 3, 2026 Bug Fix + Features
Client Portal — Invite Flow
Send Portal Link — new button in the transaction action bar. Opens a pre-filled email to the client with the portal URL, sign-in instructions (OTP), and a personal note from the broker. No client email on file? A toast explains where to add one.
Invite to Portal — new button on Live Listing cards (appears when a seller email is on file). Sends the seller a pre-filled invite to the client portal with listing-specific copy.
Blueprint — Referral Log
Edit entries — each referral log row now has an ✏ edit button. Clicking it populates the form with the existing entry values so you can update any field without deleting and re-adding. The form header and save button update to "Edit Entry" / "Save Changes" to make the mode clear.
Bug Fixes
Feedback link broken — the "send feedback" link on the index page was Cloudflare email-obfuscated and returned a dead URL. Replaced with a direct mailto link.
Timeline button dead link — the ◈ Timeline button on transaction cards opened a file that no longer exists (Timeline was retired as a standalone tool). Button replaced with ☑ Tasks/Deadlines, which navigates to the checklist tab.
? button non-functional in Client App — the How to Use modal was fully built but the openHowToUse() and closeHowToUse() JS functions were missing. Both added — button now opens the modal correctly.
v1.1.0 April 1, 2026 Feature Sprint
Co-Brokered Transactions
Co-broker opt-in added to Add and Edit Transaction modals. Check "Co-brokered transaction" to expand a section for the partner broker's name, brokerage, email, and phone — with contact autocomplete.
Primary Broker toggle — when two brokers share a deal, designate which one client communications come from. Defaults to the creating broker; swappable at any time. Drives the client portal "Your Broker" name, email sign-off, and notification routing.
Co-broker task ownership — "Co-Broker" added as a 6th owner option in the checklist task cycle, appearing only on transactions where a co-broker is enabled. Badge shows the co-broker's first name for clarity.
TC and Team Leader "Transaction Broker" field — when a TC or Team Leader enters a transaction, a broker-of-record field appears. The selected broker's name drives all client-facing communication, not the TC's.
Lead Source & Referral Tracking
Lead Source fields in TCC — every transaction now has a Lead Source dropdown (Referral, Past Client, Sphere, Open House, Online, Social Media, Sign Call, Agent Referral, Other), a Sub-Source detail field (placeholder updates per source), and a "Referred By" name field.
Referral & Lead Source Log in Blueprint — a dedicated collapsible panel below the Prior Year section. Log entries show client name, source, sub-source, referred-by name, date, notes, and a Thanked checkbox. Panel subtitle shows how many referrers still need a thank-you.
Searchable and filterable — search across client name, sub-source, referrer, and notes. Filter by source category. Blueprint is the source of truth; TCC entries sync to Blueprint automatically via the shared bridge on every page load.
Bridge sync — when a transaction with a lead source or referrer is saved in TCC, a referral entry is written to tcc_bridge_v1. Blueprint reads and deduplicates these on load and on every "Import from TCC."
Blueprint — Annual Pace Bar
Annual pace bar added below the bell curve. Shows total closes vs. annual goal with a fill bar, a pace-line tick at where you should be by now, and a pill — "N behind pace," "N ahead of pace," or "on pace."
Quarterly opportunity chips — when a quarter ends short, the shortfall rolls forward as a gold "+N opportunity" chip on the next quarter. Cumulative across all ended quarters. Chips start collapsed by default; click to expand the honest breakdown.
Exceeded quarters show a green "+N over goal" chip. The next quarter's goal is never modified — overages are celebrated, not redistributed.
Pace bar is hidden from print output.
Upcoming Listings
Add Upcoming Listing modal simplified — "Listing Agreement Expires," "Price Review Date," and "Pre-Listing Tasks" removed from the add modal. These fields remain available in the listing detail view after entry.
Pre-Listing Tasks moved to the detail view — tasks now live in the listing detail panel after the listing is created. Includes a text input to add custom one-off tasks (with × remove), and inline check/strikethrough without re-rendering the page.
Pre-Listing Task Defaults in Settings — set your standard tasks that auto-populate on every new listing. Add custom permanent items, remove defaults, or reset to the built-in six. Per-listing custom tasks are separate from defaults.
Est. List Price field now formats as currency ($650,000) on input, matching the main transaction price fields.
Upcoming Buyers
Add Upcoming Buyer modal stripped down — removed Target Price Range, Target Areas, Pre-Approval Expiration, Notes, and the old Buyer Milestones checklist. The add modal now has three fields: Buyer Name, BBSA Signed (checkbox), and WA Real Estate Pamphlet Sent.
BBSA expiration date — checking "BBSA Signed" reveals a date field for the expiry. An expiry chip appears in the buyer detail card when within 7 days.
Buyer Checklist in detail view — mirrors the Pre-Listing Tasks pattern. Default items (BBSA signed, WA pamphlet sent, Pre-approval obtained) plus a text input to add custom items per buyer with × remove.
Buyer Checklist Defaults in Settings — same management interface as Pre-Listing Task Defaults. Permanent custom items carry over to every new buyer.
Bug Fixes
Live Listing modal broken — the liveListingModal was nested inside listingModal due to a missing closing tag, making it invisible regardless of what the open function did. Both modals are now correctly structured as independent overlays.
Double-tab on date fields — Chrome's date input has two internal tab stops (the date segments and the calendar icon). All type="date" inputs now skip directly to the next field on Tab, bypassing the icon.
Contacts directory now starts with all category sections collapsed so the full group list is visible at a glance. Click any header to expand.
Index settings button removed — the index page is a gateway only, and theme syncs automatically via the shared key.
v1.0.0 March 29, 2026 Major Update
Blueprint — Settings & Navigation
⚙ Settings button moved to the header, next to the user email badge. Sign Out removed from the header and placed inside the Settings modal footer — only visible when cloud-synced.
Settings button removed from the bottom action bar — it was already accessible from the header.
Prior Year "Enter Data" moved out of Settings and into a dedicated tab inside the Prior Year panel. Saving auto-switches to the Summary tab and selects the newly entered year. Panel now shows even when no prior year data exists, with Enter Data as the default tab.
Appearance — Shared Theme Engine
Blueprint cream/gold palette is now the default for all four TCC products — Hub, Client App, Index, and Changelog. Background: #f8f4ef, surfaces: white, accent: gold #c9a84c.
Shared theme engine (v1) deployed across all pages. One storage key (tcc_theme_v1) so a theme choice on any page applies everywhere.
Three theme presets — Classic (Blueprint cream/gold, default), Dark (original TCC navy), and Slate (cool blue-grey light). Dark and Midnight are consolidated into a single Dark preset.
Custom theme — three independent color pickers: Background, Text color, and Accent color. Eight accent presets (Gold, Teal, Sky, Indigo, Violet, Pink, Orange, Green).
Blueprint Appearance section added to its Settings modal — matching Background and Accent color presets with live preview swatches. Defaults correctly to Classic on every load unless a preference has been saved.
Fixed service worker cache preventing new deploys from being visible. Both Hub and Client App now include a version-keyed cache-bust script that unregisters stale service workers and forces a clean reload on first visit after each deploy.
Settings — All Pages
Client App Settings drawer was non-functional — all settings functions (openSettings, closeSettings, font size, theme) were missing. Now fully wired.
Index Settings button was broken due to a truncated file from a prior partial edit. Index rebuilt cleanly with all theme and settings functions restored.
Settings theme options are now identical across Hub, Client App, and Index — Classic, Dark, Slate, and Custom — replacing the inconsistent mix of Dark, Midnight, Light, and Custom that varied per page.
Dashboard
Avg. Days to Close KPI card removed from the dashboard. The three remaining cards — Total Transactions, Deadlines This Week, and Overdue — are more immediately actionable.
Completed tasks no longer appear in Upcoming Deadlines. The default deadline view now excludes any task that has been checked off. Tasks remain visible in the Checklist tab and within each transaction. The week and overdue filtered views already had this exclusion — now consistent across all views.
v0.9.9 March 29, 2026 UX + Terminology
Contacts Directory — Rebuilt
Client added as a first-class contact role — now appears at the top of the role dropdown and as a tag option. Clients can also be Escrow Officers, Lenders, or Brokers simultaneously.
Multi-role support — contacts now have a primary role plus optional additional role tags. A contact appears in every category they belong to. Role tags display as colored pills on each contact card.
Role filter pills at the top of the directory — All, then one pill per role with a count badge. Click a pill to filter and expand that category. Search still works across all roles.
Collapsible category sections — all groups start collapsed so you see the full directory at a glance. Click any header to expand. Selecting a role filter pill auto-expands that category.
No Company field for Client contacts — the Company field hides automatically when Client is selected as the primary role, and returns when switching to a professional role.
Buyer's Agent / Seller's Agent consolidated to Broker — the directory no longer splits broker contacts by side. Which side a cooperating broker represents is determined at transaction creation, not in the contacts directory.
Removed duplicate renderContacts() function that was shadowing the active implementation.
Washington State Terminology
"Agent" replaced with "Broker" throughout the application — Washington State licenses real estate professionals as brokers, not agents. Updated: role gate, transaction modals, cooperating party fields, portal messaging, dual agency confirmation, and all UI labels.
"Cooperating Agent / Broker" → Cooperating Broker. "Your Agent" in the client portal → Your Broker. Role gate option → Broker.
v0.9.8 March 29, 2026 Feature + Fixes
Notification System
Notification panel now persists until acknowledged — no more auto-dismissing. Click any item to navigate directly to that transaction's checklist and see the overdue task highlighted.
New inline action sheet per notification item: Mark as Done, Extend Deadline (with date picker), or Skip for Today. Marking done checks the task in the checklist in real time.
Save for Later defers all reminders to next session. Panel auto-closes with a confirmation toast when all items are resolved.
Task Ownership
Every checklist task now has a responsible party badge — Agent, Client (Buyer), Client (Seller), TC, or Broker. Click the badge to cycle through owners. Overrides shown with dashed border.
Default assignments baked into NWMLS form library: EM Due → Client (Buyer), Insurance Application → Client (Buyer), HOA Document Review → Client (Buyer), Agreed Repairs → Client (Seller), all others → Agent.
Client Contact Fields
Client phone and email fields added to both Add Transaction (Step 1) and Edit Transaction modals. Data persists in localStorage and Supabase for future invite flow.
Bug Fixes
KPI overdue count now correctly excludes closed and fallen-through transactions. Previously showed inflated counts from unchecked tasks on closed deals.
Template literal syntax error in NWMLS form library corrected — caused renderSidebar is not defined console error on load.
v0.9.7 March 28, 2026 UX + Features
Checklist
Handoff summary removed from checklist view. Escrow and Lender don't own tasks in this tool — the checklist now fills the full page with contract deadlines only.
Assign button removed from checklist items. Will be re-evaluated once the task ownership model is fully defined.
Settings & Auth
Sign Out moved to Settings — now appears under the Account section at the bottom of the Settings drawer. Header shows email badge only.
Settings Account section shows signed-in email with green sync indicator. Hidden when running in local (offline) mode.
Dashboard
Pipeline stat numbers are clickable — Active and Closing Soon navigate to Clients tab with status filter applied; Closed navigates to History tab. Numbers only clickable when > 0.
Overdue KPI count now matches the filtered list when clicked — was counting tasks from closed transactions.
Client App
Listing Notes and Agent Notes removed from client-facing views. These are internal agent tools and should not be visible to clients.
Contact tab now works — was calling renderContact() but the function was never defined. Now shows Agent, Escrow, and Lender cards with Call and Email buttons.
Notification Panel
Replaced individual toast stacking with a single consolidated panel. Items grouped by Overdue, Due Today, and Coming Up. Per-item dismiss + Save for Later for the whole panel.
v0.9.6 March 27, 2026 Major Features
Access Control & Auth
Full OTP authentication system via Supabase — magic link login, allowed_emails and blocked_emails tables, Edge Functions for approve/block/request-access via Resend.
Role-based access: Broker/Agent, Team Leader, Transaction Coordinator. Each role sees different features and data scope.
Transaction Management
ATI (Additional Time for Inspections) — prompt fires on inspection period expiry day with three options: Satisfied, Terminated, or ATI Initiated (with date picker). Adds separate ATI deadline to checklist.
Waived/N/A toggle column in the deadline adjuster for IVP, Form 17, HOA Delivery, HOA Review, and other key deadlines.
Closing group added to checklist — Final Walkthrough moved from Financing to Closing (pink). Closing Date also in this group.
Form 17 Seller Disclosure Delivery row removed — Buyer Rescission now calculates directly from mutual (3 BD). Form 22D HOA Delivery corrected to BD rule.
Dashboard KPI Cards
KPI cards are now clickable. Total Transactions shows all active deals with click-to-checklist. Deadlines This Week filters to 7-day window. Overdue filters to past-due unchecked tasks.
Blueprint Two-Way Bridge
TCC ↔ Blueprint cross-match system — fuzzy name matching between active transactions and Blueprint pipeline clients. Link, dismiss, or mark as already-in-both. "📋 Blueprint" button in checklist action bar for manual re-sync.
UI / UX
Timeline redesign — no overlapping labels. Three-zone layout: Today label above track, dots on track, all date labels below. Fill bar shifts amber >75%, rose if overdue.
Sidebar accordion fills full available height. One section open at a time, scrollable content.
Client name logic corrected for seller-side transactions — cards, sidebar, portal greeting, and print header all use the right name based on commission side.
Avatar/initials removed from transaction cards. Color picker moved to top-right dot per card.
Sidebar hidden on Clients, History, Contacts, Totals, and Team tabs — only shown where relevant.
v0.9.5 March 22, 2026 Infrastructure + Launch
Deployment & Infrastructure
theclosingcompanion.com launched — domain via IONOS, DNS migrated to Cloudflare, deployed to Netlify free plan via GitHub connection.
Supabase backend live at hrrmokcgyuxethpomwuf.supabase.co — all transaction data, check states, custom tasks, notes, contacts synced to cloud when signed in.
PWA support for both Hub and Client apps — install to home screen, offline-capable, service worker registered.
Business Planning Blueprint
Blueprint tool launched at /blueprint — pipeline snapshot, per-client commission/GCI tracking, bell curve visualization, duplicate client feature, and Team Leader role with per-agent tabs.
TCC ↔ Blueprint shared localStorage bridge (tcc_bridge_v1) enables cross-app data awareness.
v0.9.0 March 15, 2026 Initial Beta
Core Transaction Management
NWMLS form library — all major NWMLS addenda (Forms 21, 22A, 22AA, 22D, 22EF, 22J, 22K, 22S, 22T, 22VV, 35, 35F, 38A, 65A, 65B, and more) with dynamic BD/CD deadline calculation tied to mutual acceptance date.
Five PSA types — Residential (Form 21), Condo (28), Vacant Land (25), Commercial (20), MH/Park (23). Each PSA pre-selects appropriate forms.
Commission tracking — gross commission (% or flat), agent split, net calculation. Compensation card on checklist. Buyer/Seller/Dual Agency side support.
Checklist with progress ring — grouped by form category (Financing, Inspection, Disclosure, Title, Contingency, Occupancy, Closing). BD/CAL indicator per task. Custom tasks per group.
Pipeline sidebar — upcoming listings, upcoming buyers, live listings, and active transactions. Stat counters for Active, Closing Soon, and Closed YTD.
Team Leader mode — multi-agent pipeline view, per-agent KPI cards, assign transactions to agents. TC assignment per transaction.
Client portal preview — agent can preview what the client-facing checklist and timeline will look like before sharing. Portal tab in checklist view.
MileLog PWA — standalone voice-enabled mileage tracker with odometer entry, toll tracking, IRS-formatted reports, and CSV export.