SPM Command Center
User Guide and Standard Operating Procedure (SOP)
A plain-language guide to every part of the Solar Power Midwest dashboard.
Written so anyone can follow it, step by step.
Solar Power Midwest, LLC
Naperville, Illinois
Internal use only
Version 3.19 · Updated September 11, 2026
What's new
Recent updates to the dashboard and this guide. The newest version is at the top.
Version 3.19 · September 11, 2026 · Current
A small proposal follow-up: the generated proposal now explains the battery honestly and supports solar-only. When a design includes a battery, the PDF says roughly what the storage costs and that it is the main reason the payback runs longer, then makes the case for it anyway (backup during outages, and using your own daytime solar at night instead of buying it back, which is worth even more at a municipal utility that pays a low avoided-cost rate for exported surplus), and it leaves solar-only open as an option. Set the battery count to 0 on the form and the whole proposal renders as a clean solar-only document, with the title, spec, warranties, backup language, and interconnection note all dropping the battery.
- Proposal PDF: when a battery is included, an honest ROI paragraph in Dave's voice gives its rough cost, notes it lengthens the payback, and makes the case for it anyway (backup plus using your own daytime solar at night, sharper at municipal utilities that pay a low export rate), then leaves solar-only open. Setting the battery count to 0 renders a clean solar-only proposal end to end.
Earlier versions (39)
Version 3.18 · September 11, 2026
A batch built around the Proposal Generator, plus new tabs and phone tooling. The Proposal tab becomes a full in-house proposal builder: drop in a SolarGraf design, an Aurora shade report, or an electric bill and it auto-fills production, panel specs, roof planes, and usage; PVWatts now runs per roof face; and you no longer have to type a price at all (it auto-calculates solar at $4/W plus battery at $1,100/kWh, with the $3,369 customer-appreciation volume discount pre-filled through September 15, 2026). The proposal PDF is reworked from Dave's notes with an at-a-glance value box, an offset explanation, a financing footnote, size-tiered SREC pricing, and guardrails that block a 0 kWh proposal. New tabs arrive: Personal Lines (a call log for Dave's and Priscilla's direct numbers), Interval Data (ComEd interval-order tracking under Ops), and Tutorials (in-app screen recordings under the new top-level SOP item). The Inbox is rebuilt into sections (Texts, Voicemails, Missed calls, Missed transfers, AI calls), the AI receptionist's missed live transfers now alert the whole team and can auto-create a lead, the texting bot is renamed Betty Bot, Comms gains private group channels, the calendar shows Dave's open hours and per-block timezones, and the service-area gate now covers website and Fixr leads.
- Proposal tab, auto-fill: three upload boxes (SolarGraf design, Aurora shade report, Electric bill) read the document and fill production (Year-1 kWh), panel count and watts, roof planes, and annual home usage. An uploaded design shows as a labeled chip with a summary of what was pulled. The Electric bill field also auto-fills from the newest utility bill already in Documents. PVWatts now supports multiple roof faces: add a roof plane per face (kW, tilt, azimuth) and it sums them for the total.
- Proposal tab, pricing: you no longer have to enter a price. Leave System price blank and it auto-calculates (solar $4/W + battery $1,100/kWh + a $3,369 increase) and pre-fills the $3,369 Customer appreciation volume discount with an order-by September 15, 2026 deadline; after that date the discount stops auto-filling and the raised price stands. Uploading a design fills the price too. Two optional rebate fields (Solar/inverter and Battery) show as credits. To show a savings-only proposal now, uncheck the What it costs section instead of clearing the price.
- Proposal tab, personalization and saving: inputs, the personal note, section choices, and the roof render now save per lead (a Clear saved link resets), so switching tabs no longer clears the form. New Co-buyer first name greets both decision-makers. A Personal note box (with Draft from customer context) adds one warm first-person sentence at the top. A Sections in the PDF checklist omits any section. The roof render auto-fills from the newest Design-category image (with a thumbnail and a Use latest Design image button). The tab text is a bit larger.
- Proposal PDF: reworked from Dave's notes, with an at-a-glance value summary box, an energy section that leads with a What [offset]% means for your home explanation, a bulk-order explanation of the volume discount, bold SREC amounts with an estimate disclaimer, a financing footnote on the System price, and an offset donut that names its home-plus-EV denominator. The cover reads here's the system I'd build if this were my home.
- Proposal accuracy and guardrails: SREC payouts are size-tiered (a system over 10 kW AC uses the Illinois Shines 10 to 25 kW price, not the 0-10 kW price). Usage is required for any proposal PDF, so a 0 kWh / 0% offset proposal can no longer go out. A rep warning flags a system producing over 110% of usage, the payback chart labels stay legible, and all customer-facing copy uses the public (844) 497-6527, never Dave's cell (guarded at the phone chokepoint).
- Lead Documents: new Design (lime) and Shade Report (teal) categories, and a lightning-bolt Extract usage button on a utility bill that reads the annual usage (kWh/yr), utility, and rate. The lead panel now shows the address lat/lng with a one-click copy button, and the Text quick-action button is relabeled Comms.
- New Personal Lines tab (under Leads, next to Dialer): a live log of every call to Dave's and Priscilla's dedicated direct numbers, with caller, time, duration, recording player, and AI transcript, plus an All / Dave / Priscilla filter. Those personal lines are set up with the PERSONAL_LINE_* env vars.
- New Interval Data tab (under Ops): tracks ComEd interval-data orders and maps each order number to the customer account (order #, account #, electronic ID, product interest, status, dates, notes), with add, inline-edit, search, and delete.
- SOP is now its own top-level menu item with two sub-tabs, Dashboard Guide and Tutorials, moved out of Executive Overview. Tutorials records an in-app screen walkthrough that saves as a playable, auto-titled video card with a click-to-seek transcript. Intel Capture is now its own rail icon (between War Room and Command) that jumps straight to the recorder.
- Inbox rebuilt into sections via a segmented control (All / Texts / Voicemails / Missed calls / Missed transfers / AI calls), each with an attention count; voicemail playback and transcript live inside the Inbox, and a row opens the caller's lead. The AI calls section is the full 844 AI-receptionist log (via a Retell webhook), and a call Retell flags as unsuccessful shows a Follow up badge.
- AI receptionist missed live transfers now text Dave, Priscilla, and the setter (Austin), name who the receptionist was trying to reach, show in the bell and toaster, send a web push, and drop a note on the matching lead. A missed transfer from a caller who is not in the system yet auto-creates a lead (tagged missed-transfer and unverified), skipped for no-callback-number and obvious non-customers, and not auto-texted.
- The texting and booking bot is renamed Betty Bot across the dashboard (Follow-Up Engine panel, Betty Bot Sandbox, Betty Bot Brain, per-lead AI-reply switch), with a Betty avatar on bot-sent texts. Betty Bot now always offers at least two specific appointment times, honors a next-week request by shifting the offered times, will not invent a service or partner it cannot confirm, and answers roofing questions vaguely (SPM works with roofers, Dave handles it) instead of deferring entirely.
- Comms gains private group channels: a Main plus private channel switcher above team chat, members-only and enforced at the database, with the first channel (Awesome Ai Integration) seeded. The customer-facing chat now shows automated nurture and sequence emails in the thread, timestamps inbound email replies at receipt time, and renders an email the way the customer saw it in a sandboxed frame. Polish now shows a calm amber note when it declines to rewrite for compliance, rather than a red error.
- Calendar: Dave's available (open) hours now show in all three views alongside the time-off overlay, and each time-off block has its own timezone picker (Central default, with Eastern/Mountain/Pacific). A new Hot-reply flag puts a red Wants a quote pill on a lead who texts back wanting a quote or callback, with a bell and push alert, and clears when a human replies.
- The service-area gate now covers website and Fixr lead intake (was Facebook/Instagram only): a lead outside SPM's Illinois service area is saved and tagged out-of-area but fires no team alert or auto-nurture texts, and it fails open so a real Illinois lead is never dropped. The SEO What to do next panel now groups the fixes it handles itself (like auto-resubmitting the sitemap) under Handled automatically, and the Windows & Siding Simulator gets a Download before/after (to text) button.
- Turning the AI bot back on for a lead it had escalated now re-answers the customer's last question instead of staying silent, and still never re-runs over a human who already replied.
Version 3.17 · August 29, 2026
A batch built around a new Proposal Generator, a rebuilt lead-window tab bar, and the move to Google Meet. The lead window gains a Proposal tab that reproduces Carbon Solutions' REC calculator in-house (with a PVWatts production estimate) so you can get a proposal number without logging into their portal, a Dave Meetings tab that turns each held meeting into next steps, and a rebuilt Design tab now called the Windows & Siding Simulator (real color swatches, a before/after slider, and an SPM Blackout preset). The lead tab bar drops the Team chat tab, scrolls sideways, and shows labeled action buttons. Meetings become one Meetings Archive page (out of Comms) that pulls in Google Meet recordings with AI titles, sectioned summaries, a jump-to-line video player, and their own transcript section. Leads get a Hit List tab of Red Hot next-steps. Plus: long call recordings play and transcribe, email attachments and a Dave sender, the SolarGraf prompt uses every roof face, Dave gets his own booking and reminder alerts, and a cluster of War Map, SEO, and battery-sizing fixes.
- New Proposal tab on a lead: a live Auto-calculated readout fills in the derived numbers as you type system size, price, and Year-1 kWh (kW DC/AC, offset %, RECs and price, gross REC value, vendor fee, net SREC payout, the CSG collateral/application-fee/after-energization/quarterly breakdown, net cost after SREC, and payback year), reproducing Carbon Solutions' REC calculator in-house. An Estimate Year-1 kWh from PVWatts button fills the production field from the system size and optional roof tilt/azimuth. It is a preliminary estimate; SolarGraf and the signed CSG Disclosure Form stay authoritative.
- The lead-window Design tab is renamed Windows & Siding Simulator and rebuilt: upload a straight-on home photo, pick a siding color and a window/trim color from real swatches, and Apply colors recolors only the siding and window frames on the actual photo (the house is untouched, so it looks real). The first apply takes about a minute; changes after that are quick. An SPM Blackout preset makes the branded all-black look (AI render), and Present mode has a drag before/after slider. Generate/Replace-photo controls show only in Edit mode.
- New Dave Meetings tab on a lead: a per-meeting result and action steps from held or ad-hoc appointments, plus an overall status/next-steps rollup. Action steps push to the Red Hot Hit List, and held meetings feed the Hit List AI checklist. Recording a voice memo on a customer who recently met Dave auto-drafts that meeting's result and next steps as a Suggested from a voice memo banner; Confirm accepts, Edit tweaks, Dismiss clears, and nothing is written until you Confirm.
- The lead tab bar dropped the Team chat tab, now scrolls sideways when there are too many tabs to fit (desktop and mobile), keeps each label on one line, and shows an icon per tab instead of colored dots. The quick-action button row is now labeled with text and icons (was icon-only): Call, Text, Email, then one button per tab, so the buttons always match the tab bar.
- New Leads > Hit List tab: every Red Hot lead as a card with an AI-generated, editable next-steps checklist (built from its notes, messages, and calls). Check steps off, edit, add your own, or Refresh for new AI steps. Cards lay out in up to three columns, carry an urgency dot (green under 4h since last contact, amber under 24h, red older), make Call the primary button, and collapse fully-handled leads into Cleared today; the lead stays in Red Hot until moved by hand.
- Recorded meetings are now one Meetings Archive page, reached from the War Room flyout (out of Comms, which is now just Team chat and Direct). It holds team and customer meetings with in-page filters (Team/Customer/All, Google Meet/Zoom/All, Newest/Oldest, 20 per page). Google Meet recordings sync in via a Sync from Google Meet button and an automatic 6-hourly check that reads the Meet Recordings folder in Google Drive, transcribes each, and posts it with a summary (needs a one-time Google reconnect for Drive read access).
- Meeting debriefs read better: a Google Meet meeting's Gemini notes render as collapsible sections (Summary, Decisions, Suggested next steps) with a Copy notes button, Meet meetings now generate action items, and the full verbatim transcript lives in its own collapsible Transcript dropdown with a Copy transcript button. Watch video on a Meet recording opens a native player with a live transcript side panel: click a line to jump the video there, and the current part highlights and auto-scrolls. Meetings also get an AI-written title and subtitle from their notes instead of the generic War Room Meeting, with older ones backfilled on sync.
- Long call recordings now play and transcribe: a long recording (an hour+) that errored on play now plays, and one too big for the standard transcriber goes through Deepgram instead of failing. Until the Deepgram key is set, a too-long recording says exactly that with its size instead of a generic could-not-process message.
- New Copy SolarGraf prompt button on a lead bundles the customer's info, the measured roof pitch/azimuth/orientation (Google Solar), the AI context brief, and the full conversation into one prompt for SolarGraf. It now lists every measured roof face, largest first, and tells the design AI to prioritize south/SE/SW faces and skip north ones; on rural roofs Google cannot read, it hands SolarGraf the address to measure.
- Email compose gains file attachments (up to 5 files, 10 MB each and 20 MB total, sent via Resend, and refused rather than sent without the files if Resend is down) and adds Dave as a From sender alongside Austin and Info. The Documents Download button now actually saves the file to your device instead of opening the image in a new tab, in both the Documents list and the image viewer.
- An internal note left on a customer's chat thread now alerts the whole team (bell, push, and Slack) and posts a short reflection into Team Comms, so a note on one lead's thread is not missed by teammates not looking at that lead.
- The solar roof-score section adds a System size (kW) input and Get PVWatts production button for an on-demand annual-production estimate, a clearer new-build error that points you to NearMap for imagery, and a Satellite imagery obtained tracking toggle next to Electric bill received. Battery recommendations are now sized off the actual PV system size (a Battery, actual system size kW input on the lead panel; Ops customers use their System size DC/AC fields) and do not appear until a real size is entered.
- Customers can upload their electric bill from the You're booked confirmation card: it lands in the lead's Documents as a utility-bill, flips Electric bill received on, and stops the bill-reminder texts.
- New Ops battery-only proposal button (System & equipment) for homes where solar is not viable: pick a backup tier and days, enter SPM's price and financing, and it generates a branded PDF with a shareable customer link. Resilience-first, no incentives quoted.
- Dave now gets his own booking and reminder alerts (all behind one on/off switch, off until enabled): a text and email the moment any appointment is booked, a throttled text when a client replies, and reminders at 24h, 8am day-of, 6h, 1h, and 10 minutes before. Appointment cards also show a Rescheduled by ... line and alert the team on every reschedule.
- War Map polish: pin-popup action buttons wrap onto a second line instead of running off the edge, the Route + enroute tasks and Suggested stops panels line up cleanly, and the enroute halos are colored by brand (SPM blue/green, Illinois Energy purple/brown, leads by age).
- AI visibility now draws the Competitors named by AI and Review sites lists as bar charts, adds a Share of voice by engine card, and adds a Ranking moves since each fix dumbbell chart on the SEO coach panel. The SEO auto-tasker now ignores out-of-area cities and gives concrete internal-link suggestions (exact pages, sentence, and anchor) for page-2 nudges.
- The AI bot got safer and clearer: once a customer's bill is on file it stops implying the bill was not sent, it says today/tomorrow instead of a weekday for near-term consults, it never affirms customer-specific approvals it cannot verify (HOA, permitting, eligibility, exact savings) and defers those to Dave, and it can now web-search general public facts (does SPM serve a town, how a public incentive works) and relay a short answer with Dave will confirm on the call, never customer-specific ones and never a number.
- The Claude Skills marketing page was removed from the Air Campaign nav (rail, flyout, and Reference group). Calendar is now its own rail icon with a Month/Week/Day/Book event flyout, the Pipeline flyout lists the Leads tabs and Tactical Tools sub-pages directly, and the Referral asks page shows by name in the mobile menu. Show/Hide controls are now bordered pills with chevrons and section dividers are more visible.
Version 3.16 · August 16, 2026
The War Map gets a full route planner for planning a driving day. Set a start and an end (an address, or a lead or customer by name), add stops, and it draws the driving route with drive time and distance. Type "hq" in any box to drop the point at SPM headquarters, which also shows as a permanent HQ pin. Along the route it surfaces who is worth stopping for: an enroute-tasks accordion (leads to knock, customers to ask for a referral or review, color-coded by lead age with customers in gold) and a top-right suggested-stops flyout that pulses a pin in neon cyan on hover. Click a route pin or an enroute circle to open that person's detail card on the map, or click anywhere along the route to open Google Street View of that spot in a modal.
- New War Map route planner. Set point A and point B (type an address, or an existing lead or customer by name) plus optional stops, and it draws the driving route with drive time and distance. Routes can be saved (named "From [A] to [B]"), are shared with the team, and survive navigating away and back. Type "hq" in any box to drop the point at SPM headquarters (2423 Durango Ln, Naperville), which also shows as a permanent SPM-logo HQ pin on the map.
- Enroute tasks: leads and customers within the on-the-way distance of the route are highlighted with a suggested action (knock a lead, ask a customer for a referral or a Google review), listed in a collapsible accordion and color-coded to match the Labels legend (leads by age green/yellow/orange/red, customers in gold).
- Suggested stops: a separate top-right collapsible flyout ranks the highest-value nearby leads and customers within the on-the-way distance. Hovering one pulses its pin on the map in neon cyan; Add stop drops it into the route. The on-the-way distance slider filters both the enroute tasks and the suggested stops.
- Clicking a route pin (A/B or a stop) or a green/purple enroute circle opens that lead's or customer's detail card right on the map (even when the Leads/Customers eye toggle is off), and pins zoom on hover. Clicking anywhere along the drawn route opens Google Street View of that spot in a modal (rotate, look, zoom) with an Open in Google Maps link.
- Route input polish: the boxes show one address-suggestion dropdown at a time and close it when you click away, and removing point A or B clears the drawn route, its enroute highlights, and the drive-time badge.
Version 3.15 · August 12, 2026
This batch is mostly Zoom leaving and a big menu tidy-up. New virtual appointments and screen clips move off Zoom onto Google Meet and Google Drive; every past Zoom meeting, transcript and summary stays exactly where it was. The left menu was reorganized: the old Growth group split into Recon (field sales) and Air Campaign (marketing), Comms and War Map and the Guide each stand on their own, Finance moved under Ops as Software costs, and a few tabs were renamed. Referral rewards now actually pay out, through Tremendous. On top of that: a customer photo survey with an optional reward, audio transcription on a lead, an Enphase production feed, a battery read from the customer's own utility usage file, contract preview-before-save and legally binding e-signature, and a cluster of War Map fixes.
- Zoom is being replaced by Google Meet. A virtual appointment now creates a Google Meet link instead of a Zoom link (confirmations and reminders are unchanged), and screen clips now upload to Google Drive. Past Zoom meetings, transcripts and summaries all stay on the Meetings screen; new Zoom recordings are no longer pulled in. Watch video plays the Google Drive copy, so recordings keep working after the Zoom account is deleted.
- Meeting recordings are archived in Google Drive, in the TEIG shared drive under SPM Zoom Archive, split into Sales calls with customers, Team meetings, and Unsorted. Everyone in the SPM Workspace can watch them.
- The left menu was reorganized. The old Growth group is now two groups, Recon (field sales) and Air Campaign (marketing). Comms, War Map, and the Guide each got their own spot in the menu. The single-item Money group is gone and Finance now lives under Ops, renamed Software costs. Renames: Fix queue is now Search issues, Force Multiplier is now Advocates, and Taskers is now Tasks.
- The three search screens (Traffic and Search, Search issues, AI visibility) are now one tabbed Search screen, and the Instagram DM Setter is a tab inside the Social Media Hub.
- The phone menu now shows each section's sub-tabs, so Air Campaign's Search, Social Media Hub, Testimonials, Referral asks and Claude Skills are all reachable on a phone. The drawer used to show only the top-level rows, so those views could not be opened on mobile at all.
- Referral rewards now pay out. Each advocate or customer row has an Approve and Pay button that sends the reward through Tremendous (they pick Venmo, PayPal, ACH, or a gift card), plus a year-to-date paid figure and a 1099 review flag once someone crosses $2,000 in a year. Approve and Pay stays disabled until the person has an email on file and a positive balance.
- Customers can be sent a guided photo-capture link, and an optional reward can be switched on per job from the Follow-Up Engine (a toggle plus an amount). The reward is off until an owner turns it on.
- New on a lead, in the Notes area: Transcribe a recording. Upload an in-person consult, a voice memo, or any audio that is not already a call or Zoom recording, and the transcript plus an AI summary save as a note. The audio itself is never stored.
- Ops customers can name their inverter brand. Set it to Enphase and a Connect Enphase button generates a link to send the customer (they approve access in their own Enlighten account), then the record shows their linked system and a daily-refreshed production line.
- New on an Ops customer, in the Documents tab: upload the utility usage file the customer downloads from their own ComEd or Ameren login (Green Button Download). The dashboard then shows their annual usage, peak demand, average day, how spiky their usage is (which is what decides whether a battery pays), and an estimated battery value.
- Contracts now preview first and save nothing until you choose Save to documents. Every version you generate is kept and stays usable, with the newest carrying a Latest badge, and generated contracts also appear in the Documents section of the Ops side panel. Auto-fill from documents is much faster (each document is read once into a per-customer memory, instant after the first time) and it now tells you when two documents disagree about a field.
- Each contract version has a Send for signature button that emails the customer a legally binding e-signature request. It offers a free test send (nothing emailed) before the real one, and once signed the signed copy and the certificate of completion save automatically.
- New Electric bill received switch on a lead. Turn it on once a customer has sent their bill and the booking confirmation, the 24 hour reminder and the morning-after nudge all stop asking for it.
- War Map: the brand chips under Customers now really filter the pins (before, they only changed which layer showed and every pin stayed on screen), a customer pin now says which company installed the job, a household that is both an Illinois Energy record and a customer shows one pin instead of two, and the pin for an address you searched is now much larger and pulses. The address search bar moved from the left toolbar to a prominent bar at the top-center of the map.
- War Map: RR365 is no longer its own customer brand chip. RR365 window, siding and door customers now show under the single Illinois Energy label in the brown accent, alongside the Illinois Energy households.
- Hover: the Send to me button is now Send to Austin and Dave, and sending a capture to yourselves no longer fires a download-the-app invite at staff who already have it. The link goes to Austin, and everyone on the list gets a text that it was requested.
- Service requests texted to Operations now say whose install it is: OUR install, ANOTHER COMPANY installed it, or Installer UNKNOWN, so nobody agrees to service another company's system by mistake.
- SEO area consolidated from six tabs to three (Traffic and Search, Fix queue, AI visibility); System health moved to Executive Overview; the Fix queue now leads with striking-distance wins and auto-queues the strongest of them; and a second AI quality check drops recommendations built on made-up numbers or busywork before they reach the queue. SEO-GEO reports get an Export report button.
- Ops tracker: a new Industry column tags each customer with product lines (Solar, Battery, Heat Pump, Geothermal, Windows, Siding, Doors), multi-select for crossover jobs, colored blue for Solar Power Midwest and amber for Renovate Right 365.
- Referral asks rebuilt from cards into a checkbox list with a bulk Ask selected action and a sliding-pill status filter; click a name to compose a single ask.
- The AI texting bot now stops re-asking a decided buyer questions they already answered and drops a Product interest note (the customer's own words) so Dave sees the spec before the consult. It also establishes who did any prior work (windows, siding, doors, solar, roofing, batteries) before ever asking for a referral, and introduces the SPM Reputation app in stages.
- The Bot Sandbox opens with a Bot version history panel: every Bot Brain save logs itself (who, when, how much changed) and code-side bot upgrades are listed alongside them, newest first.
- New notifications now also slide in as a top-right toast that auto-dismisses, alongside the existing sound and the bell dropdown.
- Executive Overview: the secondary sections (Reports, 13-Week Planning, Dialer, Ops and Leads, System health) now tile two-across on large screens.
- Meeting and call transcripts now mask spoken card, bank routing and account numbers and spoken passwords (ordinary numbers like system sizes and prices are left alone), and a few meeting subtitles that were written from the first minute of small talk were corrected.
- Leads: a new Copy to Ops button adds an existing customer to the Ops tracker in one click (or links their existing Ops record instead of duplicating), and leads that are real Ops customers now show the gold customer card treatment.
- Referrals: a Copy review link button now sits directly above the Show review QR card bar, so a rep can paste the Google review link into a text or email instead of only showing the QR code.
- The Leave a review screen drops the Back link under the comment form, opens at the stars every time instead of resuming where you left off, and shows one Share Review button at five stars instead of two.
Version 3.14 · August 5, 2026
A batch about the things that quietly did not work. Photo uploads failed with no reason on anything much over 4MB, and iPhone HEIC photos showed as blank grey icons because no mainstream browser can display them; both are fixed everywhere photos are uploaded. The Polish button rewrites a text you already wrote and refuses if the rewrite invents or drops a figure. Appointment reminders get a plain on/off switch, and booking gets an override for the gap between appointments. Meetings and the Guide come out of hiding in the menu, and "Has solar" now says who installed it, which decides who may be offered the referral and who gets serviced rather than sold to. Also in this batch: the SPM Reputation app now asks customers for a star rating and routes five-star customers to our review page and everyone else to a private comment form, with the link that keeps that inside Google's policy.
- Photo uploads no longer fail with a bare "upload failed". A 4MB photo would work and a slightly bigger one from the same camera would not, because every byte crossed the dashboard and anything over the platform limit was rejected before we could explain why. Photos are now shrunk before sending and go straight to storage. Fixed on lead documents, the customer capture link, work-order photos and photos attached to a customer text.
- iPhone HEIC photos are converted to JPG automatically on every upload path, so thumbnails appear like any other photo. Chrome, Firefox and Edge cannot display HEIC at all, which is why they were showing as blank grey document icons. Nothing to do on your end.
- Voice notes record at a smaller size, so a long one no longer silently fails to send.
- NEW: a Polish button in the customer text composer. It rewrites wording you have already typed, reads the conversation first so it will not reintroduce you mid-thread, and refuses the rewrite if it adds a price or number you did not type, or drops one you did. If the message conflicts with a company rule it says so instead of quietly rewriting the offer. One-tap Undo.
- NEW: a plain on/off switch for appointment reminder texts, on the appointment itself, flippable at any time rather than only at booking. Rescheduling from the lead panel now has the same 'send texts' switch the appointment window has; before, it always texted the customer with no way to stop it.
- NEW: an 'Ignore the gap between appointments' tick box when booking, so you can book back to back. It waives only our own padding; a real clash with something on the calendar is still blocked.
- Meetings is its own menu item. It was a Comms sub-tab called 'War Room', so you had to already know that meetings lived behind that name to find one. The Guide is its own item too, instead of being buried inside Executive Overview.
- Air Campaign's ten pages now open in a flyout panel rather than adding ten rows to the menu.
- 'Has solar' now records WHO installed it. Green 'Has solar (ours)' means we did, and it matters: those are the only customers who may be offered the $150 referral, they get routed to service rather than a sales pitch, and the AI bot will not ask them whether they have solar.
- The first text to a new lead now lands in about 4 minutes and never later than 5. The 3 minute wait before it is deliberate, so nobody is texted while still filling in the form; the engine behind it now runs every 2 minutes instead of every 5.
- Hover measurements: from a lead's Notes tab you can send a capture request to the customer or to yourself. Worth knowing before you promise anything, Hover cannot measure photos you already have; the capture has to be done walking the property in their app.
- A referral sent from the SPM Reputation app now lands on the Leads board, not just the rewards ledger. Referrals submitted from the DEMO app show with a purple DEMO badge, earn nothing, create no lead card, and are excluded from the referral count and conversion rate.
- Zoom Clips: record one from Team Comms, drop one into an email as a clickable thumbnail, and see them on a lead. The Sync from Zoom button now reports what happened with clips rather than only recordings.
- The first pipeline column is now 'Imported/Aged Leads' (was 'New Lead'), with a separate 'New Leads' column after Red Hot for genuinely fresh arrivals. Red Hot Leads is pinned: automatic moves leave it alone, so texting one no longer re-files it.
- Virtual appointments: a 'Create a Zoom link' button for bookings that have none, host switching from the details window, and the Zoom link sent to the customer by text and email 10 minutes before the call.
- NEW in the SPM Reputation app: customers rate us out of five stars. Five stars opens our review page (Google and any other platform we list); four and below opens a private comment form that comes straight to us, and three or less pings the team. One private message per customer, so the same complaint does not arrive twice; five-star customers are not limited.
- The comment form carries the line "If you would prefer to post a review instead of addressing your concerns, tap here", and it has to stay. Google's policy says merchants must not "discourage or prohibit negative reviews, or selectively solicit positive reviews from customers", and the test is whether the customer is PREVENTED from reaching the public path. With that link we are prioritising the private route, not gating the public one. Without it Google can unpublish the reviews we already have and block new ones.
Version 3.13 · August 2, 2026
The batch where GoHighLevel goes away and the left menu is rebuilt. GHL is retired: availability, appointments, notes, tags and texts all run on the dashboard's own database plus Google Calendar, and the tabs that pushed to GHL are gone. The left menu is now a thin icon rail whose flyouts list EVERY page, so nothing is hidden inside a tab bar any more, and four tabs got names that say what they are. Comms gains one search box across all three surfaces plus your customer threads in Direct. Three quiet bugs turned up and are fixed: the dialer queue could only reach 36 of the last 1,968 leads, door-knock bookings texted the homeowner nothing at all, and turning AI replies back on never answered the message that was waiting.
- GoHighLevel has been retired. The dashboard is the source of truth: leads, stages, appointments, availability, notes, tags and texts all live in its own database, with Google Calendar for appointments. The toolbar buttons that managed the old connection (GHL ingest, Preview push, Push to GHL live, Check GHL vs dashboard) are gone. Nothing was deleted from GoHighLevel; the dashboard simply stopped reading it.
- The left menu is a thin column of icons. Hover one and its pages appear beside it. The point is that EVERY page is now listed there: pages used to hide their own sub-pages behind a tab bar, so you could only find a page by first landing on its parent.
- Renamed so the names say what they are: Eagle's Nest is Executive Overview (mountain icon), Air Raid is Leads, Sniper Scheduler is Calendar, Delivery is back to Ops. Nothing moved; only the labels changed.
- Referrals is its own menu group now (Force Multiplier + Recruit) instead of a corner of Air Campaign, where the same programme was showing up in three places under two names.
- Photo Library is in the menu, under Ops. It shipped reachable only by typing its web address, so unless you knew the URL you could not get to it at all.
- FIXED, and this one was costing calls: sending leads to the dialer only worked for a lead that existed in GoHighLevel. That was 36 of the 1,968 leads from the previous 30 days, so queueing 400 leads quietly queued a handful and the dialer session had almost nothing to call. The queue now takes every lead with a phone number.
- FIXED: a door-knock booking sent the homeowner no confirmation text. A GoHighLevel workflow used to send it, so retiring GHL made the door knock the only way to book that told the customer nothing, with no error to notice. It now confirms like every other booking.
- FIXED: turning AI replies back on for a customer never answered the message that arrived while they were off. The bot only acts when a text arrives, so a customer who replied during the pause had already been passed over and nothing looked again. The switch read "AI replies are on" above a message nobody was ever going to answer. Handing the conversation back now picks up a waiting reply, and does nothing if a human already answered.
- Comms has one search box across Team Comms, your own direct messages and customer texts, each result labelled with where it came from. Your DMs stay yours: it can only ever return conversations you are part of.
- Comms > Direct lists your recent customer text threads under the staff list, with the same unread badges. They are links into the real conversation on the lead rather than a second chat window, so there is only ever one place a text actually sends from.
- The AI bot no longer asks something the customer already told it, rewrites a draft once when its own safety check rejects it instead of escalating straight away (7 of 23 escalations in one 30-day stretch were the bot blocking itself), and closes by asking whether something would be helpful rather than asking for 20 minutes.
- The first text to a new website lead waits about 3 minutes instead of sending instantly, so nobody is texted while still filling in the form. The follow-up engine runs every 5 minutes instead of hourly, so a resumed sequence catches up promptly.
- The War Map no longer covers the left menu when it opens.
Version 3.12 · July 30, 2026
A batch about trusting what the dashboard tells you. Three things were quietly lying and are now fixed: the AI bot went completely silent on any customer who answered "Yes" (the word was being read as a texting opt-out keyword), the Sentry panel reported 897 lost texts when the real number was zero, and message timestamps were showing a different clock than the calendar next to them. On top of that: Sentry findings now open up to show you which leads are actually affected, Eagle's Nest gained a per-product table and a Toolkit page, the Air Raid board gained Appointment Canceled and Needs a Proposal columns, spreadsheets preview inside chat, the calendar colours anything that is not a customer or team meeting, and 5,390 Illinois Energy households are on the War Map as look-but-do-not-contact pins.
- FIXED, and this one was costing conversations: a customer replying "Yes" to one of the bot's questions got total silence. "YES" was in the list of texting opt-in keywords (with START and UNSTOP), so an ordinary answer was mistaken for a compliance keyword and the reply, the stage move and the team alert were all skipped. Every "Yes" this system ever received got no answer. A one-word Yes is now just an answer.
- FIXED: the Sentry panel was reporting "897 texts sent but never recorded" when the true number was zero, and undercounting neglected leads (67 when it was really 181). Both were faults in Sentry's own queries, not real problems with your data.
- Sentry findings are now collapsible. Closed you see the title and a count; open it and you get what to do plus the actual leads or advocates behind the number. A partial list says "Showing 12 of 181" so it is never mistaken for the whole problem.
- Times now follow your own time zone instead of a mix. The calendar was showing Central while message timestamps showed your computer's zone, an hour apart with no labels. Anything you might repeat to a customer (a booking, a scheduled text) is labelled CT or ET, and shows the customer's time next to yours when they differ. Sign out and back in after a zone change.
- New in Eagle's Nest: a By product line table (leads, appointments, consults, sold and close rate for each product, with 30/90/all-time), and a Toolkit tab holding every SPM link in one place. The product table is deliberately honest: a product with no sales record says so rather than showing 0%, and leads with no product tag get their own row instead of being dropped.
- Air Raid board: new Appointment Canceled column (between Appointment Booked and Consultation Held) and a new Needs a Proposal column (between Consultation Held and Proposal Sent), so a cancelled appointment and a customer waiting on numbers are both visible instead of blending into other stages.
- The AI bot got better at knowing who it is talking to: it reads the pipeline stage so it stops pitching a first consult to someone who has already met Dave, it offers existing customers a callback from Dave rather than appointment slots, it routes service requests to service instead of selling a consult, it introduces itself once instead of mid-thread, and if its AI model is briefly unavailable it falls back to another model instead of going quiet.
- Spreadsheets (.xlsx) now preview inside Team Chat with sheet tabs, sticky headers and a row count, instead of only offering a download.
- Sniper Scheduler: anything that is not a customer appointment or a team meeting (a vendor call, a supplier demo, a personal block) now shows in amber with a legend, so the sales day stops looking busier than it is. Meeting chips also show a guest count when two or more people are invited.
- War Map: the Customers label now splits by brand (SPM / RR365 / Illinois Energy), and 5,390 Illinois Energy households from Dave's original company are on the map. Their pins are grey, not gold, meaning look but do not contact: nobody has cleared them for outreach yet.
- Taskers: list view has Open / In progress / Done chips with counts you can toggle, plus bulk actions. Call reminders from a sequence no longer create Taskers; they appear as a note on the lead, where the phone number is.
- Air Campaign sub-nav is grouped (Website / Instagram / Customers / Reference), and the Referral Hub lives under Customers with advocate wallets, per-product reward structure, a rep leaderboard, and an Add a referral button so reps can record one on a customer's behalf.
- Outbound texts now show who sent them (AI bot, a named automation, or the rep's name), and a per-customer switch turns AI replies off for one person without stopping their follow-up sequence.
- Recovery: texts that Twilio delivered but the dashboard failed to record can be restored from the Follow-Up Engine, so a customer's timeline is never missing messages they actually received.
- Call recordings: the waveform actually seeks now. Clicking a spot in the wave jumps to that point.
- Chat bubbles cap at a readable width on a full-screen desktop instead of stretching the width of the window, and image attachments we send show a preview instead of a broken icon.
- Documents tab: drag and drop anywhere on the section, six large drop tiles (drop onto one to file it straight into that category), a List / Cards toggle, bigger icons, and PDFs marked with a red PDF badge.
- FIXED: 16 leads had a literal {{Zip Code}} placeholder saved as part of their address, because the webhook sent the placeholder instead of the value. Those are corrected, and placeholders are now stripped on the way in.
Version 3.11 · July 29, 2026
A batch built around the phone and the AI setter. The 844 number now answers with a menu that routes callers to the right person and doubles as a spam filter, every call through it is recorded and announced, and voicemails finally attach to the customer who left them. The AI booking bot got a lot smarter about what it says: it answers ownership-versus-lease questions directly, explains why there is no single price instead of dodging, offers appointment slots to hold rather than asking for a commitment, and ends on a referral ask instead of a hollow sign-off. Texts can now be scheduled for later, with a queue you can cancel. Plus a new Instagram DM setter tab, Documents promoted to its own tab, picture messages, saved AI drafts, internal-note alerts, and utility detection fixed for 724 customers.
- New 844 phone menu: press 1 for a new project (setter line), 2 if already working with us (Dave), 3 for service on an installed system (Priscilla), 4 for anything else (voicemail), # to repeat. Every caller hears the recording notice first, and it cannot be skipped.
- The phone menu is now the spam filter: a caller must press 1, 2 or 3 to make anyone's phone ring. Silence, a wrong key, or a caller ID the network flags as faked all go to voicemail, so robocallers never reach a personal cell. Unanswered real calls now go to voicemail too.
- Every call through the 844 menu is recorded, including legs to personal cells, and whoever answers hears a private announcement naming the customer and what the call is about. The automated voice moved from Amazon's basic robotic voice to their neural one.
- Voicemails now attach to the customer who left them: the unheard badge in Air Raid finally works, the voicemail appears on the customer's timeline with its transcript, and the team is alerted. Voicemails from unknown numbers still appear in the Voicemail tab as before.
- Outbound call recording is ON by default in the dialer. Customers can now have more than one phone number, so a call from a work line or a spouse's phone attaches on its own, and a new unknown-calls list lets you assign anything we could not match. Inbound call durations are recorded properly, and 37 past calls were backfilled.
- Texts can be scheduled for later: a Later button beside Send with presets and a custom time, and a pending queue you can cancel. A scheduled text cancels itself if the customer replies first, and is skipped (with a reason) if they opt out or move to a no-contact stage.
- The AI booking bot answers how-we-operate questions directly instead of deflecting, including sell-versus-lease, with SPM's real ownership reasoning. It still never quotes a price, but now explains why the range is wide (usage sets panel count) rather than saying it depends.
- The bot offers times as open slots and asks to hold one, aims for the next 72 hours with a single gentle nudge, and never ends with a generic sign-off: it pivots to a referral ask. Customers hear the $150 thank-you; non-customers are only asked if anyone comes to mind. Manufactured urgency is banned.
- The bot can move an appointment a customer already has, and now answers customers who have already booked (previously it stopped reading their texts entirely the moment they booked). Escalation alerts name the customer and their number.
- New Instagram DMs tab: the review queue for the AI Instagram DM setter, with what it has learned about each person and any draft awaiting approval. Starts in shadow mode; going live is one toggle. Conversations only become leads once genuinely qualified.
- Documents is now its own tab in the customer window (it was buried in Notes), with a folder shortcut and a download button on every file. You can send pictures in the customer chat (MMS), images open in a viewer window instead of a new tab, HEIC files explain themselves instead of showing a broken icon, and Save to documents works on every image.
- Texts you send are signed with your first name, with a pill to turn signing off per message. Named accounts can be required to confirm before a customer-facing text goes out.
- The pre-position package and every AI draft reply are now saved as a version history on the customer, with a Load into email button. Fixed the pre-position package coming back in an unexpected format.
- Adding an internal note now alerts the team (bell, phone push, and Slack). Only notes a person types trigger it; AI summaries and automatic notes stay silent.
- ComEd versus Ameren is now detected from the ZIP rather than the state field, so 724 more customers name their real utility instead of being told about "your utility". Booking texts now ask for a photo of the electric bill BEFORE the appointment, and the confirmation text is optional per booking.
- Air Campaign: the Improvement queue added three keyword row types (Keyword fit, Competing pages, No page yet), marks predicted estimates with a Forecast chip, and now separates safe fixes (auto-PR) from structural fixes (approval required). Indexing health explains every not-indexed reason in plain English. A new Content interview panel collects the four questions only SPM can answer. Keyword corpus grew from 206 to 622 terms.
- The doors follow-up sequence is complete (Day 3 to Day 45); it used to go quiet after Day 1. Analyze on uploaded audio in Team Comms works again, voice notes gained a Copy transcript button, team chat inside a customer window accepts file attachments, and the Sniper Scheduler appointment window has a View customer details button.
Version 3.10 · July 26, 2026
A large batch: two new left-nav tabs (Finance, for SPM's own tech-stack spend, and Work Orders, a dispatch board for field-service jobs), a big Ops expansion (a physical Install timeline, an As-sold-vs-current change-order panel, and Site & jurisdiction fields), a unified SEO Improvement queue in Air Campaign that ranks fixes and feeds the Auto-Tasker, a new field-tool turf map with required recording consent and a door-knock funnel, the Energy Independence Model wealth-analysis panel, and the pipeline now moving leads through stages on its own as texts, calls, emails, and bookings happen. Also: fixed virtual-appointment booking and phantom cancellations, Slack and Zoom-sync integrations, a reworked incoming-call popup, lead archive/restore, and a long tail of smaller Air Campaign, Air Raid, and Sniper Scheduler polish - see the full list below.
- New left-nav Finance tab: visualizes SPM's own tech-stack costs (monthly cost by service, colored by who pays, a personal-vs-company donut, and KPI tiles) from the asset inventory.
- New left-nav Work Orders tab (after Ops): a dispatch board for field-service work (site evaluations and service/warranty calls), separate from the solar Ops module, with an urgency-chip card per job and a detail drawer to set type, status, customer, tech, and photos. Needs a one-time owner setup before it saves.
- Ops: a new Install sub-tab tracks the physical build (survey to activation) separate from paperwork; an As-sold vs current panel flags system changes since the contract was signed; and a new Site & jurisdiction section holds County/AHJ/HOA/Engineering/monitoring-card-expiry fields. The old "Sync from Builder Prime" button is gone - the dashboard is the source of truth.
- Contract generator: a Solar / Windows & Siding toggle generates a Renovate Right 365 Home Improvement Agreement (currently a watermarked draft, not yet customer-ready). Proposals also get a trackable customer-view link (Sent -> Viewed -> Signed).
- Lead pipeline now auto-advances stages on real activity: New Lead to Attempting Contact on any outreach (including the native text/voice-note path and the first automated send), to Engaged / Qualifying on a text reply, inbound call, or email reply, to Appointment Booked the moment any appointment is booked (rep, self-serve, or AI bot), and to Requested to NOT be Contacted on STOP or an email opt-out.
- Air Raid: deleting a lead now archives (soft-deletes) it instead of erasing it, with a Restore button in a new Archived bucket; a Check GHL vs dashboard button runs a read-only reconciliation; the lead search box is always visible with a jump-to suggestion dropdown; and the mobile toolbar row scrolls sideways.
- Incoming-call popup reworked: Ignore now lets the caller keep ringing (~20s) before voicemail, Send to voicemail drops the call immediately, and Open lead jumps to the matched lead; it also plays a real ring. The Air Raid nav badge now counts new non-lead inbound texts live.
- Field tool (Intel Capture): homeowner recording consent is now required before booking (Illinois all-party consent), a DNC warning banner shows for opted-out or do-not-contact numbers, a one-tap "log the knock" flow feeds a new door-knock funnel card, and a new Turf map plots knocks by outcome with a coverage-heatmap toggle.
- New Energy Independence Model panel (Customer details > Notes): profile a customer and compute ranked ownership scenarios (payback, ROI, IRR, NPV) with a one-page Wealth Analysis PDF; includes commercial demand-charge and farm/ag REAP grant inputs. Needs owner setup, and the money assumptions still need Dave's sign-off.
- Fixed virtual-appointment booking (no more false "could not book" errors) and phantom appointment cancellations; confirmation and reminder texts now go out for virtual appointments with the Zoom link; appointments show a "Booked by" line; and the "appointment needs a status" notification names the real date/time.
- Team Comms: a Sync from Zoom button recovers meetings the webhook missed; outbound Slack notifications for bookings/leads/Ops events (needs an owner-set webhook URL); Scheduled Meetings now support full edit (title/date/time/talking points) plus add/delete; a Bot Brain knowledge editor and A/B message variants were added to the Follow-up Engine; and a Recover missed inbound messages button backfills a past outage.
- Air Campaign: Social Media Planner cards get a Schedule button; the old Map sub-tab was removed (the page now opens on Website); Google Search gained a unified Improvement queue (five SEO detectors ranked by clicks-won versus effort, each with a Queue fix button that feeds the Auto-Tasker, plus a weekly auto-build) on top of new Page-2 opportunities and weak-CTR query lists; a new AI answer visibility (share-of-voice) panel was added; the Today visitor chart now breaks down by hour; internal Germantown traffic is excluded from all metrics; every Website section is collapsible; and a new Integrations health panel flags quiet webhooks.
- Recon: the War Map is no longer a sub-tab inside Ground War (it now lives under its own left-nav item); its city-targets score-card section is collapsible; and HVT gained a batch of new Illinois cold-storage/cannabis-cultivation/creamery targets plus a Check for new targets button.
- Glossary of smaller fixes: Tactical Tools gained first-call scripts by lead type with objection panels, and the lead-window Script tab now leads with a matching phone script (open by default) plus Notes/Script quick-action icons; the opt-out line is now disclosed only once per contact everywhere it's sent; Taskers gained an optional due date with an Overdue/Due Today/Due This Week triage; and duplicate-number inbound texts now link to the right lead.
Version 3.9 · July 18, 2026
A large batch making the dashboard the source of truth for your pipeline, plus a social content planner, a lead-panel super-tag rail, and several Air Raid board upgrades. You now add, rename, and reorder pipeline columns right in the dashboard - the old "Sync from GHL" button is gone, replaced by a "GHL ingest: On/Off" toggle (whether the dashboard still pulls from GHL) and a "Preview push to GHL" dry-run. Leads move themselves: New Lead to Attempting Contact on any outreach, to Engaged / Qualifying when a lead replies, and to Requested to NOT be Contacted on STOP. The board zoom now scales the whole card (not just width), each column can be drag-resized from its header and click-sorted by date, there is a new "Has Solar (another company)" super tag, and the Reports "Blocked" list is fixed on mobile. Air Campaign's Social Media tab opens on a new Planner (Board / Calendar / Queue) for planning posts, with the connected Facebook/Instagram/LinkedIn accounts now showing live analytics, and Reports > Social shows live per-platform metrics. In the lead window, the product super tags now sit in toggleable rows under the aerial photo with a change log. The Follow-up Engine and AI booking bot are now one panel; the activity drawer shows each message's content; the bot recognizes an existing appointment and won't double-book; and the first automated text always includes the opt-out line. The public booking page brands by industry (Renovate Right 365 for windows/siding/doors), the "to discuss next meeting" agenda moved to the Team Comms War Room, and Eagle's Nest Reports gained a one-click Deploy button on each built PR. Also fixed: website leads that intermittently were not reaching the dashboard (a cold-start timing issue), and door-KNOCKED leads no longer show the door-replacement product tag.
- Air Raid: you now create pipeline columns in the dashboard itself via + Add column (type a name; no need to add the stage in GHL first). The old "Sync from GHL" button was removed.
- Air Raid toolbar: a "GHL ingest: On/Off" toggle controls whether the dashboard still pulls leads/updates from GHL; turning it off makes the dashboard fully authoritative. A "Preview push to GHL" button shows what the dashboard would send out to GHL (dry run, nothing sent).
- Air Raid: leads move stages automatically - New Lead to Attempting Contact on any outbound, to Engaged / Qualifying when a lead replies by text, and to Requested to NOT be Contacted when a lead texts STOP.
- Air Raid: the Zoom slider now scales the whole card (text, badges, spacing), not just column width, and opens comfortably on desktop / compact on mobile.
- Air Raid: drag the right edge of a column header to resize that column (cards scale with it), and click a column header to sort it newest-first / oldest-first.
- Air Raid: new "Has Solar" super tag (chip + filter) for a lead who already has solar from another company; toggle it per lead in the lead panel.
- Eagle's Nest Overview: the Reports section is collapsible and the Operational Overview moved to the top, above Taskers. Reports > Social shows live per-platform social metrics. The Reports "Blocked" list no longer clips on mobile, and each blocked item's description sits under its action buttons.
- Eagle's Nest Reports: each built PR now has a "Deploy" button that merges the PR to ship the change live (asks you to confirm first). Requires a GitHub token set in the dashboard environment.
- Air Campaign > Social Media: new default "Planner" tab - plan posts with Board (Idea/Draft/Scheduled/Posted, drag cards between stages), Calendar (month grid), and Queue views. The Facebook/Instagram/LinkedIn sub-tabs now show live analytics; the Compose tab publishes now or schedules for later.
- Lead window: the product super tags line up in rows under the aerial photo - active ones (from intake) lit, off ones toggleable - with a Change log dropdown showing who toggled which tag when.
- Follow-up Engine: the AI booking bot is now one unified panel with the engine; each activity row's drawer shows the message content; the bot recognizes a lead's existing appointment and won't double-book; and the first automated text to a contact always includes "Reply STOP to opt out."
- Public booking page: now brands by the lead's industry - Renovate Right 365 for windows/siding/doors, Solar Power Midwest for solar/commercial.
- Team Comms > War Room: the "to discuss next meeting" agenda (flagged Taskers/Seeds) now lives here next to the scheduled-meeting details.
- Fixed: website form leads that intermittently were not reaching the dashboard (a cold-start timing issue in the intake) - they now always land in New Lead. And door-KNOCKED leads no longer show the door-replacement product tag by mistake.
- Website: "Door replacement" is now a selectable service on the estimate and contact forms; a new /home-solar-cost page explains Illinois solar cost and payback; and the homepage loads faster on phones (the background hero video no longer downloads on mobile).
Version 3.8 · July 16, 2026
A big batch across the Sniper Scheduler, the lead window, and Air Campaign. The Sniper Scheduler now color-codes appointments by host (Dave blue, Priscilla purple, Austin teal) with meeting type shown as a shade plus an icon, adds a third meeting type (Virtual, which auto-creates a Zoom meeting), lets you pick and reassign a Host on any appointment, adds an Attendees section with RSVP status and the ability to invite more people, lets you edit an event's exact Start and End time, and shows the timezone on the When line. The lead window gets a new violet Script tab (the Outreach Playbook filtered to that customer), and the Customer Facing Chat composer gained a one-click Draft button (now including the customer's own booking link in drafted texts), an auto-growing message box, a Save to documents link under any photo or file a customer sends, a Voice note button that texts a tap-to-listen audio link, and Link offers toggle chips that control which appointment types a customer's booking link offers. The email compose modal adds a From dropdown (Austin or Info) with automatic team BCC, plus a Pre-position package button. Edit customer info now auto-fills a missing city/state/ZIP from Google when you save a partial address. Air Campaign gets a new Website analytics tab (AI search referrals, Leads by source, Google Search keywords, and an AI 'What to do next' panel) and real Connect buttons (via Zernio) for Facebook, Instagram, and LinkedIn, plus a Writing voices panel so each teammate can connect their own Gmail to train their writing style. Lead source is now a nested taxonomy (Knocked/Internet with sub-sources) reflected in the Kanban filters and War Map legend, Fixr/SolarReviews intake now captures and reliably saves the Origin URL and context note, the Permit Difficulty by Jurisdiction panel is now collapsible, and War Room debrief action items now have completion checkboxes.
- Edit customer info: saving a lead with a street address but no city or ZIP now auto-fills the missing city/state/ZIP from Google, only when it finds one confident match.
- Appointment modal (Sniper Scheduler): a new Attendees section shows who is invited on a Google appointment, with their RSVP (accepted/declined/maybe/pending), and lets you add more people by email right from the modal; adding someone writes to Google Calendar and emails them an invite.
- Lead window: new violet Script tab shows the Outreach Playbook automatically filtered to that customer's industry and to the stage matching how aged the lead is, with Copy buttons and stage pills to browse.
- Customer Facing Chat composer: a one-click Draft button (violet sparkle, next to the mic) writes the best next text for the lead using their industry, lead age, and the conversation so far, then drops it in the box to review and send.
- Appointment modal edit form: you can now edit an event's Start and End time directly (Central) from the pencil Edit button, alongside Title/Type/Lead; the change writes to Google Calendar. (The slot-based Reschedule flow still exists for lead appointments.)
- Appointment detail modal: the When line now shows the timezone (e.g. "11:00 AM - 12:30 PM CDT") so the meeting time is never ambiguous.
- Customer Facing Chat composer: the message box now grows taller as you type, then snaps back to one line after you send (also grows to fit an AI/voice draft).
- Sniper Scheduler: appointments are now color-coded by host (Dave = blue, Priscilla = purple, Austin = teal) with the meeting type shown as a shade (phone lightest, virtual medium, in-house darkest) plus a phone/video/house icon. Existing appointments show in Dave's blue until a host is assigned.
- Booking an appointment: you now pick a Host (Dave/Priscilla/Austin, defaults to Dave) and can choose a third meeting type, Virtual, alongside Phone and In-house. Titles read "[Type] consultation with [Host]: [Customer]".
- Booking a Virtual appointment auto-creates a Zoom meeting (under the SPM Zoom account) and puts the join link on the calendar invite; the appointment pop-up shows a "Join Zoom meeting" link.
- Appointment pop-up: shows "Hosted by [Name]" and, in edit mode, a Host dropdown so you can reassign any meeting to a different host (which recolors it on Google Calendar too).
- Permit Difficulty by Jurisdiction (AHJ) panel is now collapsible: click its header to fold/unfold the county cards. It auto-expands when you click a county on the map so the focused card is visible.
- Email compose modal: a From dropdown lets you send as Austin (austin@) or Info (info@). Every email now blind-copies (BCC) Dave, Priscilla, info, and you for team visibility, hidden from the customer.
- War Room meeting debrief: each action item now has a checkbox to mark it complete. Completed items strike through and dim, and the state is saved so it stays done after a reload.
- Customer Facing Chat: when a customer sends a photo or file, a "Save to documents" link now appears under it. Pick a category and it files the attachment into the lead's Documents in the Notes section.
- Air Campaign > Website tab: new "AI search referrals" panel shows visits that came from AI answer engines (ChatGPT, Perplexity, Gemini, Copilot, Claude), broken down by engine, your GEO scoreboard for whether AI is citing the site.
- Air Campaign > Website tab: a "Leads" tile and a "Leads by source" panel now show conversions (estimate/contact/booking form submits + phone-number taps) broken down by traffic channel, so you can see which channels actually produce leads.
- Air Campaign > Website tab: new "Google Search" section (from Search Console) shows the actual keywords people use to find you on Google, top queries with clicks/impressions/position, totals, and top pages in search.
- Air Campaign > Website tab: new "What to do next" AI panel. Click "Get recommendations" and it reads your live GA + Search Console numbers and returns prioritized, specific SEO and GEO action steps. On-demand so it only runs when you click.
- Lead panel: new "Link offers:" toggle chips (Phone / Virtual / In-home) next to Copy booking link. Turn a type off and the customer's pre-filled booking link stops offering it; at least one type must stay on. Enforced server-side too.
- Voice note to customer: new "Voice note" mic button in the lead Conversations composer records a note and texts the customer a tap-to-listen link; sent notes show an audio player in the thread.
- Lead source is now a nested taxonomy: parent (Knocked / Internet) with child sub-sources (Canvassing; Fixr / SolarReviews / SPM Website). Both the Kanban filter bar and the War Map Leads legend now have nested source chips. Backfilled ~1,300 aggregator leads as Internet > Fixr.
- Writing voices (Social Media > Strategy): each person (Dave, Austin, Info, Priscilla) now connects their own Gmail read-only to learn their individual writing voice; per-person Connect/Disconnect + "Rebuild all". Separate from the calendar/email-send Google connection.
- Fixr / SolarReviews intake now captures each lead's "Origin URL" (the aggregator site it came from) into the lead note.
- Fixr / SolarReviews intake notes now actually save (fixed a silent NOT NULL failure); setters will now see the full Fixr context note on each imported lead.
- Email compose modal: new "Pre-position package" button generates a one-page pre-position email in Dave's 6-part structure, with an optional personal-note box, for sending before an appointment.
- SMS "Draft" button now includes the customer's own pre-filled booking link as the call to action, instead of a generic booking page.
- Marketing > Social Media: Facebook, Instagram, and LinkedIn sub-tabs now show a real Connect button (via Zernio) and a Connected status with a Refresh action, replacing the "Coming soon" placeholders. Discord unchanged. (Analytics + posting come in later phases.)
Version 3.7 · July 14, 2026
A big polish batch across the War Map, Team Comms, the lead window, and mobile. The Recon War Map got a full redesign: a new left-nav War Map shortcut that opens it in full screen, owner locations as blue house-pin icons, a collapsible Layers box with a turn-all-on check box, a two-column Labels toolbar with glossy icons, a centered Hide/Show icons pill, and a new High-value targets layer that pins your farm and manufacturer prospects with detailed popups (address, owner, phone, email, an estimated kW range, monthly bill, and permits). Every pin now opens a redesigned card that fades in above the pin with a tail pointing at it. Team Comms gained read receipts (Seen by), a right-side message toolbar with Copy and an AI button that turns a message into Taskers or Seeds, a reaction picker that no longer clips at the screen edge, and a Save to a record button that now files an attachment to an Air Raid lead as well as an Ops customer. The lead window's Conversations tab is now the blue Customer Facing Chat (with the amber Team chat beside it), photos a customer texts now show in the thread, Edit info has address autocomplete and a Save that works for every lead, and the Documents list shows colored file names, photo thumbnails, and an in-app viewer. The top-bar Refresh button was retired in favor of live updates everywhere. Mobile got a pinned dialer number, disabled page zoom, smooth accordion and menu animations, roomier calendar cells, a book-event window that fits the screen, an auto-opening full-screen call window, and push notifications for new leads and customer replies. Website: the Energy Plan Builder now captures a property address so those leads reach the dashboard with an address on file.
- Recon: a new War Map shortcut in the left menu jumps straight to the War Map and opens it in full screen automatically; exit full screen to return to the normal map + territory list.
- War Map: owner locations now show as a blue house-pin icon instead of a plain dot.
- War Map: the AHJ, Parcels, Businesses, Owner pins, and High-value targets overlays are gathered into one collapsible Layers box with a check box at the top that turns every layer on or off at once (each still toggles on its own). On desktop it sits at the top by the full-screen button; on mobile it sits lower-left and opens upward.
- War Map: a new High-value targets layer pins your dairy-farm and manufacturer prospects (indigo farm/factory pins). Turn it on, click Geocode prospects once to place them, then click a pin for a popup with the business name, a Farm or Manufacturer badge, address, owner, phone, email, an estimated kW system-size range, an estimated monthly electric bill, and any permits on file (blank fields show Not gathered / Not on file).
- War Map: clicking any pin opens a redesigned popup card that fades in directly above the pin with a downward tail pointing at it, and fades out when closed. It applies to every pin type (leads, customers, reviews, owner locations, high-value targets).
- War Map: the Labels toolbar is laid out in two columns with large glossy gradient icons; the Sync map pins control is a compact refresh icon that spins while it works; and the Hide/Show icons control is a blue labeled pill centered along the bottom of the map.
- Team Comms: read receipts. A Seen by line with teammate names appears under your most recent message once teammates have read past it.
- Team Comms: the message action buttons moved to the right side of a message and now include Copy (to clipboard) and an AI button (the sparkle) that extracts action items and adds each to Eagle's Nest as a Tasker or Seed in one tap. On mobile the buttons appear just above the bubble so they are no longer cut off. The reaction picker opens toward the message so it is never clipped, and applied reactions show larger and bolder.
- Team Comms: a shared file's Save to a record button now files it to either an Ops customer or an Air Raid pipeline lead (search by name or phone); saving to an Air Raid lead uses the lead document categories (Utility bill, Contract, Proposal, ID / Ownership, Photos, Other).
- Lead window: the Conversations tab is now the blue Customer Facing Chat (with a banner reminding you messages go to the customer) sitting next to the amber Team chat. Photos a customer texts to the SPM number now show right in the thread (tap to open full size).
- Lead window: Edit info now has Google address suggestions on the Street address field (pick one to fill street/city/state/ZIP), and Save changes works for website and dialer leads that were never in GHL. A full-screen toggle next to the close X expands the whole lead window on desktop.
- Lead window Documents: each file's name is colored to match its category, photos show a thumbnail preview, and clicking a file opens an in-app viewer (images, PDFs, video, audio). Photos, PDFs, and a voice note a homeowner attaches on the website flow in automatically.
- The top-bar Refresh button was retired. The command center updates live on its own: chat, reactions, leads, and notifications in real time, and the calendar, Ops tracker, Taskers/Seeds, and customer chat auto-refresh in the background. (AI status-summary cards keep their own Refresh on purpose.)
- Mobile: your SPM dialer number is pinned under the top bar on every page, page pinch-zoom is disabled (maps still zoom), accordions and the slide-in menu animate smoothly, month-view calendar cells are roomier and scroll to show every week, the book-event window fits the screen, and the full-screen call window opens on its own when a call starts dialing.
- Push notifications now also fire for a new lead coming in and for a customer texting back, on desktop and the installed phone app.
- Air Raid: each product super-tag pill now carries a matching icon; Solar is amber and Siding is blue; and the Referral, New text, and Missed call badges use the same clean icon style.
- Website: the Energy Plan Builder now asks for a property address (with Google autocomplete) so those leads arrive on the dashboard with an address instead of No Address on File.
Version 3.6 · July 13, 2026
A big batch across Eagle's Nest, the calendar, the lead window, and outreach. Eagle's Nest got a top badge bar that jumps to and expands any section, collapsible Operational Overview / 13-Week Planning / Dialer / Ops & Leads sections, a new 13-Week Planning board (the 12+1 operating rhythm with the four quarterly sessions, a live sprint tracker, and Add-to-calendar), Subject + Details fields when adding Taskers and Seeds, voice dictation on all four of those fields that stays on until you tap the mic again, assignable Taskers/Seeds with an Assignee filter, an in-app attachment viewer, and an auto note to Team Comms when a Tasker is completed. The calendar now shows Dave's time-off in all three views, has a Month-view size control, auto-invites Priscilla to every event, shows the date in the appointment When line, and fixes two timezone bugs (booking a day scheduled it a day late, and clicking a day opened the wrong one). Dave now gets his own text + email reminders 24h before and at 8am the day of each appointment. The lead window's Notes tab gained a categorized Documents section, the conversation thread hyperlinks URLs and has a new AI voice assistant that drafts a text from what you say, and three AI helpers (Draft from last contact, Generate note from history, Summarize communication) now read the full local conversation history. Outreach now uses the right company name per industry (Solar Power Midwest for solar/commercial, Renovate Right 365 for windows/siding). Customers (Won stage) show in gold on the board and map, possible-duplicate intake leads are flagged, and the War Room lists your Scheduled Meetings. Email delivery moved to Resend.
- Eagle's Nest: a badge nav bar at the very top (Taskers, Operational Overview, 13-Week Planning, Dialer, Ops & Leads). Click a badge to jump to that section and auto-expand it. The Taskers badge shows the active count.
- Eagle's Nest: the Operational Overview, 13-Week Planning, Dialer, and Ops & Leads sections are now collapsible accordions; each remembers whether you left it open or closed.
- Eagle's Nest: new 13-Week Planning section (the 12+1 operating rhythm). Shows the four quarterly strategic planning sessions with dates and week ranges, a live 'Week X of 13' progress bar and countdown to the next session, the standing agenda, a 'Copy to share with team' button, and an 'Add to calendar' button that creates all four sessions (9-11am Central, inviting Dave and Priscilla). Dates recompute automatically each year.
- Eagle's Nest: when adding a Tasker or a Seed you can now enter a Subject and a separate Details body; both save to the item.
- Eagle's Nest voice dictation now works on all four add fields (Tasker Subject, Tasker Details, Seed Subject, Seed Details), each with its own mic. Only one listens at a time, switching fields moves the mic, and each stays on until you tap it again instead of stopping on a pause.
- Eagle's Nest: Taskers and Seeds can be assigned to a specific person. Each card has an assignee dropdown, the board has an Assignee filter (Everyone / Unassigned / a person), and promoting a Seed opens a popup to optionally assign it. Requires the 2026-07-13-executive-todos-assignee.sql migration.
- Eagle's Nest: clicking a Tasker attachment now opens it in an in-app viewer modal (previews images, PDFs, video, and audio; other file types get a download button) instead of a new browser tab.
- Eagle's Nest: when a Tasker is marked done, a 'Tasker completed: ' note is posted to the Team Comms chat automatically, once per completion, attributed to whoever finished it.
- Calendar reflects Dave's time-off in all three views: Month days show a gray Off/Busy chip and tint, Week columns show an Off/Busy badge and the unavailable ranges, and the Day view banners a full-day off and grays out unavailable hours. Data comes from the Availability tab's time-off blocks.
- Calendar Month view: a new size control (S / M / L, top-right) expands the week-row height and day-column width and shows more appointments per day at larger sizes. Your choice is remembered.
- Appointments now auto-invite Priscilla (priscilla@solarpowermidwest.com) as an attendee on every booked appointment and every Other event, alongside Dave and the customer.
- Appointment detail modal: the When line now shows the date (e.g. Mon, Jul 13) in front of the time.
- Fixed a booking timezone bug: booking a day scheduled it for the next day, and the picker defaulted to and allowed past days. It now anchors to Central time and disables the back arrow at today. Also fixed clicking a day in Month/Week view opening the wrong day.
- Reschedule flow: a new Enter exact time toggle lets you type any exact date and time (Central), even outside normal availability, keeping the appointment's length.
- Dave now gets his own reminders about each booked appointment, 24 hours before and at 8am Central the day of, by both text (630-605-9655) and email, each with the lead's name, time, and phone. Off until DAVE_REMINDERS_ENABLED is turned on.
- Lead window Notes tab: a Documents section with Ops-style colored category boxes (Utility bill, Contract, Proposal, ID / Ownership, Photos, Other). Click a category to upload straight into it; each shows its count in its color and the file list is color-coded. Supports images, PDFs, Office docs, and video.
- Conversation thread: URLs in text messages are now clickable links (e.g. a booking link you text), opening in a new tab.
- Conversation thread: a new AI voice assistant (mic next to Send). Tap it, say what you want (e.g. 'draft a text to Mark reminding him of our appointment'), tap to stop, and AI writes the text reply from the lead's conversation history into the composer for you to review and send.
- Draft from last contact, Generate note from history, and Summarize communication now read the full local conversation history (dashboard texts + native calls, not just GHL-synced), fixing the false 'no communication history' error.
- New Draft from last contact button in the Email a lead modal writes a short on-brand follow-up email into the Subject and Message from the lead's latest calls, texts, emails, and notes.
- Fixed meeting action-item extraction dropping every item on longer meetings (the AI response was capped too low and got cut off mid-answer). Long meetings now extract their full action-item list.
- Outreach now uses the right company name per lead industry: solar and commercial leads hear Solar Power Midwest; windows and siding leads hear Renovate Right 365. Applies to the Outreach Playbook, the automated follow-up messages, appointment reminders and confirmations, and the Draft-from-last-contact email.
- Outreach Playbook: the lead-age tabs (Day 1 ... 1 year) now sit under the Industry filter and stay frozen at the top while you scroll.
- Lead cards no longer show a redundant product tag under the colored product super tag (a Windows lead showed both a Windows super tag and a plain windows tag; now just the super tag).
- Customers (leads in the Won stage) now stand out in gold: a gold gradient card with a gold left border on the board, and gold pins/clusters on the War Map (referral-target customers get a blue ring so they still stand out).
- Duplicate-lead flagging: a new intake lead with a different email but the same phone as an earlier lead still lands as its own card, now marked with an amber 'Possible duplicate' flag. Same-email intakes still merge as before. Requires the 2026-07-13-lead-duplicate-flag.sql migration.
- Team Comms War Room: a new Scheduled Meetings section lists upcoming team meetings, the recurring Daily Alignment Meeting (10:30 AM CT daily) and the four quarterly 13-week planning sessions, each with a Join button.
- Contract generator: the Auto-fill from documents button now only reads documents in the five key contract categories (Engineering, PVWatts, Carbon Solutions, Illinois Shines/ABP, SPM Contract), ignoring uncategorized uploads.
- Email delivery moved to Resend for reliability (with the connected Gmail as a fallback). Applies to Dave's reminders, lead emails, website auto-replies, and follow-up emails; needs the Resend API key set.
- War Map: Owner pins and Parcels for DeKalb, a per-roof 'Show sun here' overlay, business badges with category icons, a one-page prospecting proposal button, the Check solar roof button, age-colored lead dots, a unified CRM legend, and label placement that only drops on real houses/businesses (with a Place anywhere override).
Version 3.5 · July 11, 2026
Lead products got clearer and leads now flow in from more places. Solar is its own colored chip on the card and in the filters, and any lead with no clear product shows a red Missing Industry chip instead of quietly defaulting to Solar. Fixr and SolarReviews can now send leads straight into the dashboard, already tagged and dropped into New Lead, and known-product Fixr leads auto-enroll into the follow-up sequence the moment they arrive; a new Enroll in follow-up button lets you start that sequence by hand for any other lead. The War Map got a Label toolbar so you can drop, filter, and edit colored pins (Banger, Hot Prospect, Not Home, Renter, and more) on individual addresses, plus clickable business labels that open a research card with a one-click AI solar prospect brief and a Find businesses near here button to scan an area for commercial and ag targets. The Outreach Playbook got a sticky Industry tab bar, source-aware copy that shows Website and Fixr versions side by side when the wording differs, corrected wording (leads requested an estimate, they did not run one), and utility-aware copy that names ComEd, Ameren, or your utility automatically based on the lead's location.
- The follow-up sequence schedules spaced call tasks, not just texts and emails: every track (Solar, Windows, Siding, Commercial) prompts three phone-call attempts on Day 0, Day 3, and Day 7. Each shows up as a Tasker in Eagle's Nest for you to make; the dashboard never auto-dials, and these calls do not count against the texting cap.
- Air Campaign has a new Social Media tab (alongside Map, Testimonials, and Referrals) with a ready-to-use SPM social media playbook built from eight growth frameworks, a jump-to menu, and Copy buttons on the message snippets. It is reference content only.
- Lead cards and list rows show a colored product chip for Solar, Windows, or Siding, alongside the existing Commercial, Agricultural, Geothermal, and Heat Pump chips. Solar is now its own chip instead of the default guess.
- A red Missing Industry chip shows on a lead with no clear product instead of defaulting it to Solar, and you can filter to these leads to classify them by hand.
- War Map: a new Label toolbar on the left lets you pick a label (a Knockbase-style set like Banger, Hot Prospect, Not Home, Renter, and more) and click the map to drop a colored, saved pin. Toggle a label's eye to filter its pins on and off, and use Edit label set to add, rename, recolor, or delete labels. Click a pin to relabel it, add a note, or delete it.
- War Map: on the Street base map, clickable business labels open a research card (name, address, phone, website, rating) with a Generate solar prospect brief button that writes an AI commercial/ag solar assessment in SPM's voice. A Find businesses near here button scans a spot on demand for best-fit commercial, industrial, and agricultural prospects and drops clickable business pins.
- Fixr and SolarReviews leads can now be delivered straight into the dashboard, already tagged with a product, landing in New Lead.
- Fixr leads with a known product auto-enroll into the follow-up sequence when they arrive; Missing Industry leads are never auto-texted.
- A new Enroll in follow-up button in the lead window's Follow-up area manually starts the automated sequence and sends the first text; it only shows when the lead is not already enrolled.
- Outreach Playbook copy is source-aware: Fixr leads get wording that says they requested an estimate, website leads get requested an energy plan, chosen automatically by where the lead came from.
- Outreach Playbook screen: a sticky Industry tab bar (All, Solar, Windows, Siding, Commercial) lets you jump between products without scrolling.
- Any playbook message that differs by source now shows the Website and Fixr versions side by side, each with its own Copy button and length check.
- Playbook copy no longer says leads ran an estimate, since they only requested one; and lower your ComEd bill is now lower your electric bill.
- Utility-aware playbook copy: messages now name the lead's actual electric utility, ComEd for northern Illinois, Ameren for central and southern Illinois, or your utility for out-of-state leads, chosen automatically from the lead's location.
Version 3.4 · July 11, 2026
Lead handling and calling got sharper: mark how a lead's phone answers (Normal, Google Voice, or Answering machine) right on the card, with a synced GHL tag, and the in-call bar can now expand to a full-screen call window with a dial pad. Booking is safer and smarter: it warns when a lead has no email, in-home visits need a 2-hour runway to book (phone stays 1 hour), and customers can get an automatic confirmation text once an admin turns it on. The calendar fixes appointment popups that used to show 'Unknown', and clicking an empty day or hour now opens Book event preloaded. Eagle's Nest Taskers is now a drag-and-drop Kanban board with Group by and Sort, plus a new Seeds area for capturing raw ideas and a 'To discuss next meeting' agenda panel. The War Room debrief renames Follow-ups to Action items and adds a Seeds List the meeting AI pulls out on its own. A red Join War Room button now sits at the top of the left nav, Recent Calls show real outcomes you can quick-tag, and Dialer KPIs count Answered only for real conversations. A Communication summary AI recap button was added to the lead window and the calendar popup, and the phone app got a Call my cell toggle for calling from an iPhone without dropped calls.
- Lead panel: a new 'How they answer' control (Normal, Google Voice, Answering machine) shows as a badge on the Kanban card and syncs as a tag to GHL.
- Book appointment now warns you when the lead has no email on file, since only Dave gets the calendar invite in that case.
- The in-call bar can expand to a full-screen call window with a big name, number, and timer, an in-call dial pad, and large Mute and Hang up buttons.
- Calendar appointment popups now correctly show the customer's name and notes (matched by lead id, GHL contact id, or a unique name match) instead of sometimes showing 'Unknown'.
- Clicking an empty day or hour on the calendar opens Book event preloaded to that time, and Day view shows a green plus on hover to invite you to add an event.
- A new Communication summary button in the lead window's Notes tab and on the calendar appointment popup writes a short AI recap of all calls, texts, emails, and notes; it only runs when you click it and stays saved until you refresh it.
- The War Room debrief renames 'Follow-ups' to 'Action items': it always shows, sits in an accent card, tags each item with a color-coded priority, and has a '+ Taskers' button to copy it into Eagle's Nest.
- The War Room debrief also shows a separate 'Seeds List' of ideas the meeting AI pulls out on its own, each with a '+ Seeds' button to plant it into Eagle's Nest.
- Eagle's Nest Taskers is now a drag-and-drop Kanban board with a Group by toggle (Status or Priority) and a Sort toggle (newest or oldest first).
- Taskers cards show a color-coded priority dot and sort by priority (high to low, then newest).
- Eagle's Nest gained a Seeds area (Solar Seeds): plant a raw idea, then Promote it into a Tasker when it's ready to act on.
- Taskers and Seeds can both carry an optional personality Label (Immediate, Urgent, Important, Fun, Circle Back) and a Category (Solar, Vision, Team, Ops), shown as chips on the card.
- A new 'To discuss next meeting' agenda panel collects anything flagged with the amber flag icon; it stays visible even when the Taskers bar is collapsed, and 'Done discussing' removes an item.
- A red 'Join War Room' button now sits at the top of the left nav (above Eagle's Nest) and in the mobile nav drawer; the top-bar SPM emblem is back to its original size.
- Recent Calls now show a real outcome per call (Talked, Voicemail, No answer, Booked); an untagged call reads 'Not logged' and you can tap the badge to quick-tag it.
- Dialer KPIs now count 'Answered' only for calls where you actually spoke with the customer, and Talk time and Avg call reflect real conversations only.
- The phone app has a 'Call my cell' toggle: turn it on and Call rings your own phone first, then connects the customer, so calls don't drop when you switch apps on your iPhone. Leave it off on a computer.
- Booking now requires a 2-hour runway before the first available in-home appointment slot; phone consultations still allow booking as soon as 1 hour out.
- Booked appointments can send an automatic confirmation text (date/time, an electric-bill tip, and a Reply YES ask); it is off by default until BOOKING_CONFIRMATION_SMS_ENABLED is turned on, and opt-outs (STOP) are always honored.
- This guide's own Jump to a section list is now grouped (Getting started, Air Raid, Ops & field, Overview & tools, Reference) and alphabetical within each group.
Version 3.3 · July 9, 2026
Availability and booking became dashboard-run. You now set Dave's bookable hours (and block days or time windows) in the new Dave's availability tab, and those times drive the Book appointment window instantly; appointments are created on a connected Google calendar and automatically invite Dave and the customer, only offer times at least an hour out, and show back on the dashboard calendar. The left menu was tidied: Comms is now Team Comms, the customer text Inbox moved to Air Raid, and Tactics + Scripts + AI Caller were grouped into one Tactical Tools tab. Eagle's Nest got a collapsible Taskers bar at the top, every box is collapsible, and the KPIs and Recent Calls merged into one Dialer KPIs box. The Air Raid filters now sit behind a Filters button (collapsed by default), the Intel list can be sorted with temperature and industry tags on each card, the mobile calendar fits the screen, the dialer stays connected in the background, and refreshes are faster.
- New Dave's availability tab (in Sniper Scheduler): set weekly hours, block whole days (a date range), or block a labeled time window on a day. It is the single source of truth and edits reflect in booking instantly.
- Appointments now book onto a connected Google calendar (an admin connects it once from Connect Google Calendar) and appear back on the dashboard calendar. Time off you set also mirrors to that Google calendar.
- Every sales appointment automatically invites Dave (dave@solarpowermidwest.com) and, when the lead has an email, the customer - both receive the calendar invite.
- Booking only offers real, future times: past times and anything within the next hour are hidden, and times can't run past Dave's closing time.
- Left menu tidy-up: Comms is now Team Comms; the customer text Inbox moved from Team Comms to the Air Raid page; and Tactics, Scripts, and AI Caller are grouped into one Air Raid tab called Tactical Tools.
- Air Raid: the Targets view opens on Board, and the search box, filters, dialer-queue bar, and legend now sit behind a Filters button, collapsed by default so the board fills the screen.
- Eagle's Nest: your Taskers to-do list is a collapsible bar pinned to the top; every box (Dialer KPIs, Ops status, Air Raid status) is collapsible; and the setter KPIs and Recent Calls were combined into one Dialer KPIs box (renamed from Recon KPIs).
- Intel list: sort by name A-Z or Z-A, most recent, oldest, temperature, or industry, and each lead card shows temperature (Hot/Warm/Cold) and industry (Residential/Commercial/Agricultural) tags.
- Two-way texting from the SPM number: send and receive texts in the dashboard (mirrored to GHL, STOP honored); the message icon on a lead opens the Conversations tab, and non-lead texts collect in an Inbox.
- Incoming calls to the SPM number forward to your cell, record automatically, and log to Recent Calls; when you answer a forwarded call you first hear a short 'Dashboard call' announcement so you know it came through the dashboard.
- Recent Calls: rows expand in place to the recording, AI summary, and transcript; a bold red 'Recording captured' badge marks recorded calls; and the collapsed row shows the call result. Answered now means a real conversation (voicemails don't count) and Qualified means you completed the conversation (a DQ counts too).
- Lead cards flag attention: a red badge for an unread text and an amber badge for a missed call.
- Editing customer info now only sends the fields you changed, so an unrelated edit (like the address) no longer fails on a duplicate phone/email.
- The dialer stays connected in the background (its calling token refreshes on its own), fixing calls that used to fail after about an hour of the tab sitting open.
- Moving a lead card between stages no longer changes its 'last touched' time - only a real text, call, or email does.
- The SOP guide's Jump to list wraps to fit and is collapsible (collapsed by default), the calendar has subtle hover and glow effects, and the whole command center refreshes faster.
Version 3.2 · July 6, 2026
Air Raid became a full calling hub. It now has five sub-tabs: Targets, Tactics, KPI, Dialer, and AI Caller. The Dialer is a phone app (Favorites, Recents, Contacts, Keypad, Voicemail), and Voicemail is now fully working: a real inbound call pops a global incoming-call alert on any page (Answer, Send to voicemail, or Ignore) that shows the matched lead, and unanswered calls land in Voicemail as a recording with an automatic transcript and an unread badge. A KPI scoreboard tracks the Dials to Answered to Qualified to Booked funnel, two new call outcomes (Qualified and DQ) were added, and Eagle's Nest gained a Recon KPIs box and a Recent Calls log. The AI Caller can place a safe test call. The whole dashboard now defaults to dark mode, Ops gained a Job Type column and drag-to-reorder columns, and the Recruit Demo walkthrough is now a 10-step lead-to-close-to-SREC money path.
- Air Raid now has five sub-tabs: Targets, Tactics, KPI, Dialer, and AI Caller.
- Dialer is a phone app with five bottom tabs (Favorites, Recents, Contacts, Keypad, Voicemail); it always opens on Keypad. Place calls from the Keypad with Mute, Hangup, and DTMF; typing-suggestions float over the keys; backspace deletes one digit (hold to clear); Recents show an incoming vs outgoing arrow.
- Recording is toggled by a round REC button. Instead of an automated message to the customer, a short private reminder plays to the rep to say out loud that the call is being recorded (Illinois all-party consent).
- Voicemail is fully working: a real inbound call pops a global incoming-call alert on ANY page with the matched lead's details and three choices (Answer, Send to voicemail, Ignore). Unanswered calls land in the Voicemail tab as a recording with an automatic transcript and an unread badge.
- Two new call outcomes: Qualified and DQ. Qualified advances the lead's stage like Booked; DQ does not.
- Air Raid KPI tab: a setter scoreboard with the Dials to Answered to Qualified to Booked funnel, conversion rates, outcomes and effort, a Today/Week/Month/All toggle, and a masked Recent Calls log.
- Air Raid AI Caller tab: a Send a test call panel dials only a number you type; real-lead batches stay locked until enabled on the server.
- Eagle's Nest: a Recon KPIs box (this week's dials, answered, qualified, booked plus rates) and a Recent Calls log with masked numbers.
- The whole dashboard now defaults to dark mode; switch to light with the top-bar toggle and your choice is remembered. Nav icons do a small hover pop, and the top-bar refresh is a smooth in-app refresh.
- Ops customer list: a new Job Type column (Roof Mount, Ground Mount, or Both) and you can drag a column header to reorder columns (a plain click still sorts).
- Recruit Demo (guest/demo view): now a 10-step lead-to-close-to-SREC money path, adding a one-click contract slide, a full-lifecycle tracker slide, and an editable Illinois SREC calculator using the real current Illinois Shines block price.
Version 3.1 · July 5, 2026
The dashboard is now the SPM Command Center, with a war-themed makeover. Pages were renamed with new tactical icons: Eagle's Nest (was Executive Overview), Air Raid (Virtual Leads), Comms (Team Comms), Sniper Scheduler (Calendar), Recon (Canvassing), Air Campaign (Marketing), and Armory (Parts). Sub-tabs and screens got matching names (War Room for recorded meetings, Ground War, KPI, Wins, War Map, HVT, Tactical, Intel Capture, Targets/Tactics, Intel and SOP). Under the hood, recorded meetings now transcribe and post a recap automatically with no manual click, each meeting gets an auto subtitle and permanent Ask-this-meeting Q&A, calendar view-switching is instant, chat shows PDF/DOC file badges over an animated backdrop, notification badges are more prominent, and Ops customer actions moved into a Toolkit column.
- Renamed throughout: the app is the SPM Command Center. Left menu: Executive Overview to Eagle's Nest, Virtual Leads to Air Raid, Team Comms to Comms, Calendar to Sniper Scheduler, Canvassing to Recon, Marketing to Air Campaign, Parts to Armory (Ops and Recruit Demo unchanged), each with a new tactical icon.
- Renamed sub-tabs: Eagle's Nest has Overview / Intel / SOP; Air Raid has Targets and Tactics; Comms has Comms and War Room; Recon has Ground War (with KPI, Wins, Lead Intake, War Map, HVT, Tactical, Import Intel) and Intel Capture; recorded meetings are the War Room (its recap opens as the War Room Debrief).
- War Room (meetings): recordings now transcribe and post a recap automatically after they end (no manual click); Retry reliably re-pulls from Zoom; each meeting shows an auto one-line subtitle under a larger title; Ask-this-meeting questions and answers save permanently with a delete button; clicking a meeting card opens its War Room Debrief.
- Comms (chat): file attachments show a colored type badge (red PDF, blue DOC) in a tighter bubble, Word docs preview inline, and voice notes and their summaries no longer get cut off on mobile; the background has a drifting SPM emblem plus subtle particles that react to your cursor.
- Sniper Scheduler (calendar): switching Month / Week / Day is now instant with a smooth fade.
- Look and feel: subtle glow accents across active tabs, cards, and key buttons; notification count badges are more prominent (gradient, ring, and glow).
- Ops: each customer row's action buttons now live in their own Toolkit column.
Version 3.0 · July 5, 2026
Meetings are now transcribed by AssemblyAI in the background (long meetings no longer fail), with real speaker names, an editable Summary format, and a search box. The Generate contract window is stricter and smarter: 'TO CONFIRM' placeholders are treated as blank, every field must be filled or excluded before you can generate, and each field has an Exclude toggle that prints N/A in the contract. Word (.docx) attachments now preview inline in Team Comms, the left sidebar follows light/dark mode with subtle glow accents, and Team Comms got iMessage-style polish.
- Meetings - every recording is transcribed automatically by AssemblyAI in the background, so long meetings no longer time out or fail; speakers are labeled with their real names, Claude then writes the summary, and a recap posts to the chat.
- Meetings - a Summary format box lets you edit how the AI writes the recap (your format is remembered for future meetings), and a search box finds a past meeting by topic or by words spoken in it.
- Ops Generate a contract - any auto-filled value that reads 'TO CONFIRM' is now treated as blank and flagged 'needs input', so a placeholder never rides into the contract.
- Ops Generate a contract - each field has an Exclude toggle: excluding a field that doesn't apply (for example Trenching on a roof mount) leaves it out of the required-fields check and prints N/A in the final contract.
- Ops Generate a contract - the Generate contract button stays greyed out until 100% of fields have input (filled in or excluded), so a contract can't be generated with blanks.
- Team Comms - Word documents (.docx) now preview inline in the in-app file viewer, rendered privately in your browser, just like images and PDFs; other file types still show a download card.
- Team Comms - iMessage-style polish: consecutive messages from the same person are grouped, a glass reply/react toolbar, a fade at the top of the thread, and on mobile you long-press a message to reveal its actions, with more prominent Save-to-Ops and Download buttons.
- Appearance - the left navigation sidebar now follows light or dark mode (it used to be always dark), and subtle glow accents highlight the selected tab, the SPM logo, and cards when you hover them.
Version 2.9 · July 5, 2026
Generate the SPM solar agreement PDF right from a customer in Ops, now with an 'Auto-fill from documents' button that reads a customer's uploaded files and fills in the contract fields for you. Your entries save as a draft until you generate, still-missing fields are highlighted, and contract history clearly marks the Current version with Sent / Signed / Void statuses (signed locks). On Virtual Leads, the duplicate Commercial and Agricultural filter chips were removed.
- Ops - Generate a contract: a pen-and-paper icon in each customer's Ops row (and a Generate contract button in the customer drawer) opens a contract window that produces the SPM solar agreement PDF. It auto-fills what it can from the customer record.
- Ops - Auto-fill from documents: click it and the AI reads all of that customer's uploaded documents and fills in the contract's remaining fields, each with a 'from: [document]' note. It only fills blank fields (never types over your entries) and flags conflicts for you to pick.
- Ops - Contract drafts and highlighting: everything you enter or auto-fill is saved as a draft until you generate the contract, so you can close and come back without losing work. Still-empty fields are highlighted in amber with a counter, and a Clear all fields button starts over.
- Ops - Contract version control: choose New revision or New contract when generating. Contract history marks the live version Current, and you can mark a version Sent, Signed, or Void; a Signed version locks and can't be changed.
- Virtual Leads - the duplicate Commercial and Agricultural filter chips were removed. Those two now appear only in the Residential / Commercial / Agricultural category group; the product chip row is Windows, Siding, Geothermal, and Heat Pump. (Cards still show Commercial and Agricultural product pills.)
Version 2.8 · July 4, 2026
A power dialer and one-click filter chips on Virtual Leads, a big Ops upgrade (segmented eight-color progress bars, pinned customers, a portfolio donut beside a half-width map, Install and Inspection status tracks, color-coded document upload boxes with version labels, and checklist document attachments), an 'Ask this meeting' box on Meetings, a distributor map in Parts, and every map is now a smooth 3D globe with a Street / Satellite / Hybrid switcher. In Canvassing, Salesperson is renamed Scoreboard, Territories city cards explain their score, and Commercial prospect cards get Call / Text / Email buttons.
- Virtual Leads power dialer: use the power-dialer bar on the Board (or row checkboxes in the List) to tag a chosen set of leads as the GHL dialer queue. Leads with no phone, marked DNC, or in a do-not-contact stage are skipped automatically, with a summary of what was queued and skipped. A Clear queue button removes the tag.
- Virtual Leads filter chips: one-click product chips (Windows, Siding, Agricultural, Geothermal, Heat Pump - super-tags that roll up the GHL service tags, shown as colored pills on cards), an indigo Commercial chip (view-only), Hot / Warm / Cold quality chips, and Residential / Commercial / Agricultural category chips. Chips also narrow what 'Send matching to dialer' queues, so you can build a hot-only or category-specific call list. 'Clear filters' resets them all.
- Ops list: the progress column is now segmented into the eight lifecycle milestones (IL Shines, Part I, Part II, Interconnection, Permit, Engineering, PTO, SREC), each in its own color - faded while in flight, red when blocked - and you can hover a segment for its status. A pin icon next to the documents icon pins a customer to the top of the list.
- Ops map: the map now takes the left half, and an animated portfolio donut sits on the right - toggle it to slice your customers by Stage, Type, or Safe Harbor.
- Ops customer drawer: the Overview tab gets a larger segmented lifecycle progress bar (same eight milestones, hover a segment for detail). The Lifecycle tab adds two physical-work tracks separate from paperwork: Install (Not scheduled / Scheduled / In progress / Installed / Blocked) and Inspection (Not scheduled / Scheduled / Passed / Failed / Re-inspection needed), both shown as color-coded chips in the At a glance row.
- Ops documents: the 5 key categories (Engineering, PVWatts, Carbon Solutions, Illinois Shines, SPM Contract) are color-coded, each with its own drag-and-drop upload box and full labels with their other names (Engineering = Podio / Plan Set, Illinois Shines = ABP / Disclosure). File links and the list-view document dots match the colors, the contract and disclosure show signed / unsigned, and the PVWatts box shows the annual kWh read from the document. Engineering plan sets and change orders get an editable version label (like 'V5' or 'CO2') plus a new Change order document type.
- Ops checklist: each Safe Harbor checklist item can attach one of the customer's uploaded documents ('+ attach' dropdown, clickable file link, detach button). Upload the file in the Documents tab first.
- Meetings: an 'Ask this meeting' box on every meeting card with a transcript - type or speak a question and the AI answers using only that meeting's transcript, with the questions and answers kept as a Q&A list on the card.
- Canvassing: the Salesperson tab is renamed Scoreboard. Territories city cards get a 'Why this score' accordion that explains every part of the score with links to the sources (NREL PVWatts, Illinois Shines, ComEd net metering, NOAA Storm Events). On the Commercial page, the Anchor targets and Prospect list sections are collapsible and each prospect card shows phone and email with one-tap Call / Text / Email buttons.
- Parts Sourcing: a new Illinois distributor map with category-colored pins - click a distributor card to pan the map and open a contact popup (name, address, phone, email) with Call / Text / Email buttons. National channels with no Illinois branch are listed separately.
- Every map in the dashboard is now a smooth 3D globe (MapLibre replaced Leaflet): zooming is continuous instead of stepped, and a Street / Satellite / Hybrid pill switcher sits on the map. Pins, popups, the county permit-difficulty shading, clustering, fullscreen, and drag-to-resize all work the same.
Version 2.7 · July 4, 2026
A big Ops overhaul. Ops is now one screen with a single bar - List, Permit Scoring, and Parts - and a collapsible map on top of every view that shades counties by permit difficulty and drops a pin for every customer (click a pin to open the customer, click a county to jump to Permit Scoring). The list gets a leftmost progress bar, a documents icon by each name, resizable columns, adjustable row height, and larger text. The customer drawer is resizable (and stops at the left menu). ITC Docs and Reports were removed; the Kanban board, the overview pie chart, and the 'Compare sources' button are gone. Executive Overview gains an AI 'Ops status' summary. Every map now offers Street / Satellite / Hybrid. The Field Tool gets a one-tap mobile record button and a one-button leaderboard clear. Parts shows a horizontal photo carousel instead of the treemap.
- Ops is a single screen with one bar: List (the tracker), Permit Scoring, and Parts. The old ITC Docs and Reports views, the Kanban 'Board' view, the Documents view, the Lifecycle grid, the 'where projects are stacking up' pie chart, the colored summary tiles, and the 'Needs attention' filter were all removed.
- Ops map: a collapsible map sits above every Ops view. It shades Illinois counties by permit difficulty (green/orange/red) and shows a pin for every customer. Click a pin to open that customer; click a county to jump to Permit Scoring and expand that county's card.
- Ops list: the leftmost column is a per-project progress bar; a documents icon before each customer name opens that customer's documents; columns are resizable (drag the header edge); row height is adjustable (a slider for all rows, or drag one row's bottom edge); and the table text is larger and easier to read.
- Customer detail drawer: drag its left edge to resize it (it stops at the left menu so the nav stays visible, and remembers the width). The 'Compare sources' button was removed because Extract all already flags discrepancies.
- Every map (Ops, Marketing, Canvassing) now offers Street, Satellite, and Hybrid views (as of 2.8 these run on the new 3D globe). The Marketing and Canvassing maps also load faster (they build only when first opened).
- Executive Overview: a new 'Ops status' card gives an AI summary of every active project - overall health, the biggest bottlenecks by name, and highlighted action items - with a Refresh button.
- Field Tool: on a phone the left menu has a big red circle record button that opens the Field Tool and starts recording in one tap. A single 'Clear leaderboard & activity' button wipes the leaderboard and recent activity (with a confirm).
- Parts Sourcing: the parts overview is now a horizontal, scrollable photo carousel of every part; give a part a picture with its new Photo (image URL) field. The 'Guide PDF' button was removed from the left sidebar (the guide still lives under Executive Overview > Guide).
Version 2.6 · July 2, 2026
A big tidy-up plus a Zoom meetings integration. The left menu is shorter: several tabs are now sub-tabs of where they belong (Team Comms holds Messages + Meetings, Virtual Leads holds Leads + Playbook, Executive Overview holds Overview + Notes + Guide, Ops holds Ops + Permit Scoring, Canvassing holds the Field Tool). Recorded Zoom exec meetings flow in automatically with transcript, AI summary, in-app video playback, and archive. Ops gains a Files tab, a PVWatts-by-array and additional-meters structure, drag-and-drop uploads, delete-customer, and smarter AI extraction that flags redundant values.
- Left menu shortened: 'Team Messages' is now 'Team Comms' (Messages + Meetings sub-tabs); 'Pipeline' is 'Virtual Leads' (Leads + Playbook); 'Market Domination' is 'Canvassing' (now also holds the Field Tool and Import Notes); Executive Overview holds Overview + Notes + Guide; Ops holds Ops + Permit Scoring. The standalone Permit Scoring, Notes, Outreach Playbook, Field Tool, Meetings, and SOP menu items were removed - the guide is now under Executive Overview > Guide, with a Guide PDF download still in the sidebar.
- Meetings (in Team Comms): recorded Zoom executive meetings appear automatically with the transcript, an AI summary, and follow-up action items, and a recap posts into the team chat. Play the recording inside the dashboard, open it in Zoom, or archive it (with a Show archived view). A Refresh button and live updates keep the list current.
- Team Comms chat: attach more than one file or image at once, and tap an image to open it full-size in an in-app viewer instead of a new browser tab.
- Ops Tracker: a new Files view (next to List and Board) - a searchable, collapsible list of every customer to upload and manage their documents. Documents support drag-and-drop, pasting a screenshot, and multi-file upload, both here and in the customer panel.
- Ops documents: fixed uploads so they always appear in the list (including files tagged Unspecified). Added PVWatts and Carbon Solutions as sources. A read-only DC:AC Ratio column was added to the Tracker.
- Ops customer panel: Add customer opens the new record's panel immediately and shows errors; the Danger zone has a Delete customer action. The System tab adds 'Arrays (PVWatts by array)' with an auto-summed total and 'Additional meters / systems' - each extra electric meter is its own Illinois Shines / ABP system with its own milestones, interconnection, meter/account, and arrays.
- Ops AI extraction: values that match what's already saved are flagged 'Same as current' or 'Similar to current' (understanding number formatting and address abbreviations) and left unchecked so you don't re-apply the same value. 'Annual production' and 'PVWatts production' are merged into one field.
- Executive Overview to-dos: edit a to-do's title and details after posting, and set each to Open / In process / Completed with a colored status pill.
- Login screen shows SPM's green-to-orange-to-blue gradient solar emblem.
Version 2.5 · July 1, 2026
Two new tabs (Parts Sourcing and Executive Overview), a smarter Team Messages chat that auto-transcribes voice notes and can research action items with AI, a faster territory map with clustered and color-coded customer pins, real-data-only Market Domination with demo isolation, and Ops search. The version history in this guide is now a collapsible accordion.
- Parts Sourcing: a new left-nav tab - an editable directory of materials organized by industry, then category, then subcategory, each with supplier, part number, and link. Add, edit, remove, search, and filter by industry; click 'Load starter parts' once to seed. Includes a 'Suggested distributors' reference panel with a rationale for each supplier.
- Executive Overview: a new tab at the top of the left menu - a shared team to-do list and knowledge log. Add and check off tasks, keep research findings with full details, and remove items.
- Team Messages: very long messages now collapse to about six lines with Show more / Show less; you can unsend your own message (it shows 'You unsent a message'); and voice notes now transcribe and get an AI summary automatically, with only 'Implement' as a button.
- Team Messages: when an action item can't be done inside the dashboard, a 'Research with AI' button looks it up, posts a summary in the chat, and proposes how to act on it - with Approve (saves it to Executive Overview) and Disapprove buttons.
- Market Domination: the Territories map now plots your existing customers as house pins colored by type (purple = commercial, green = residential), groups nearby pins into cluster bubbles for smooth panning and zooming, and marks the single hottest lead with an always-visible badge. Click 'Sync map pins' to load customers.
- Market Domination: sample data is now demo-only. The real dashboard shows live tabs (Territories, Commercial, Playbook) with Door Knocker and Salesperson present but zeroed out until data connects; the demo shows sample tabs and fictional map pins with no real customer data.
- Market Domination Commercial: existing customers are kept out of the cold-call targeting list and instead appear in an 'Existing commercial & ag customers' panel that doubles as a referral engine and look-alike profile.
- Ops Tracker: a search box filters the List and Board by name, address, type, utility, or account number, with a clear button and an 'X of Y' count.
- Pipeline: the list view now uses the same color coding as the Kanban board (left border for time since last touch, dot for lead age) with a legend. Primary buttons and card surfaces across the dashboard also use a subtle gradient in light and dark mode.
- This guide's 'What's new' section now shows only the latest version by default; click 'Earlier versions' to expand the full history.
Version 2.4 · July 1, 2026
Market Domination gains a Commercial targeting tab, the Ops Tracker gets a drag-and-drop Board view, the customer drawer is reorganized into tabs with per-checklist-item owners and due dates, notes flow in from GHL, and every nav tab shows live notification counts.
- Market Domination: a new Commercial tab with the DeKalb commercial/ag prospect research (51 verified prospects) - hot/warm/cold tiles, top-targets-to-call-first cards, a searchable + sortable table with expandable detail (product fit, signal, notes, contacts, sources), and a Playbook & guardrails panel.
- Left nav: each relevant tab now shows a live red notification count - Pipeline (new leads), Calendar (today's appointments), Team Messages (unread since your last visit), and Ops (customers needing attention); the Ops Urgent and ITC Docs sub-tabs show counts too.
- Ops Tracker: a List / Board toggle. The Board is a Kanban view - drag a customer card between lifecycle stages, and choose which stage to group by (Illinois Shines / Permit / Interconnection / Engineering).
- Ops customer drawer: reorganized from one long scroll into tabs (Overview / Customer / System / Lifecycle / SREC $ / Checklist / Documents), with an at-a-glance Overview, a small 'Saved' confirmation on each edit, and close-by-Esc/X (clicking outside no longer closes it).
- Ops checklist: every Safe Harbor / ITC item now has an owner and a due date, so each piece of paperwork has an accountable person and a deadline.
- Notes: Import Notes now accepts a CSV file upload (plus an optional customer-export upload that resolves same-surname matches by street address), and a new 'Sync from GHL' button on the Notes screen pulls every customer's GHL notes into the dashboard.
- Ops: source pills, document dates with newest-wins reconciliation, and per-customer clear-data (shipped in the prior batch) remain available in the Documents tab and drawer.
Version 2.3 · June 30, 2026
The Ops command center is now documented end to end, with a premium UI refresh and document intelligence: source-tagged uploads, AI Extract Data, cross-source comparison with recency, per-field source pills, and per-customer clear-data.
- Ops: a visual refresh to match Market Domination - portfolio KPI tiles (active projects, Safe Harbor ready, needs attention, installs scheduled), a segmented tab bar, a sortable Tracker (click any column), a collapsible ITC Docs checklist with progress bars, and a sortable Lifecycle grid with a color key.
- Ops: each customer's Safe Harbor file accepts document uploads (typed and tagged by source: Podio, Builder Prime, or Illinois Shines) straight to secure storage up to 20 MB, plus a Paste text option you can save to the customer.
- Ops: Extract Data (formerly 'Interpret with AI') reads a document or pasted text and proposes customer values for you to review and approve before anything saves.
- Ops: Compare sources reads each source's documents and shows a side-by-side table; disagreements turn red, and when documents are dated the most recent one becomes the source of truth (green) that you can accept in one click.
- Ops: accepted values now carry a colored source pill (green Podio, orange Builder Prime, yellow Illinois Shines) and the document's date; typing over a field by hand clears its pill.
- Ops: new audit fields on every customer - contract amount, exact next step, what's blocking, and what changed.
- Ops: a Danger zone in the Details drawer to Clear data (keep the customer and documents) or Clear data + documents (also delete files and pasted text), both confirm-gated.
Version 2.2 · June 29, 2026
Territory map customer + prospect pins (rich popups, delete, open in Pipeline/Ops), the Market Domination sub-view redesigns, and Dave's full Safe Harbor checklist on every Ops customer.
- Territory map: every closed customer (green house) and every pipeline prospect is now pinned. Prospect color follows the pipeline stage - new leads are cold (blue), leads being worked are warm (orange), and later stages are hot (red), with the single hottest badged HOT LEAD.
- Territory map: click any pin to see the full name, address, phone (tap to call), and email (tap to send); lead pins also show when they became a lead and when they were last touched. Each pin has a Delete option, plus Open in Pipeline (leads) or Open in Ops (customers).
- Territory map: the Sync map pins button now geocodes both leads and customers, runs much faster (parallel, larger batches), auto-loops until everything is pinned in one click, and backfills addresses on existing pins.
- Market Domination: the Door Knocker view has gradient KPI tiles, an animated conversion funnel, and bar charts; Salesperson is a sortable leaderboard with rank medals; Lead Intake has a KPI summary plus clickable status filters; the Playbook has colored lead tiers and an interactive scorecard; Territories cards show visual stat tiles and opportunity pills.
- Lead modal: a Texts tab shows the customer's real SMS and call history (the separate Text modal still handles sending and call analysis).
- Ops command center: every customer now has Dave's full Safe Harbor checklist (24 grouped items: contract and deposit, Illinois Shines, utility and permit, engineering and equipment, documents, ITC) in the customer Details drawer and the ITC Docs tab.
- Ops command center: Dave's five Safe Harbor projects (Stevenson, Havener, Bakley, Honiotes, Conro) are loaded and pinned, with Honiotes carrying its confirmed equipment and open questions.
- Branding: the real SPM emblem now appears in the top bar (dark in light mode, white in dark mode) and the left nav panel (white).
Version 2.1 · June 29, 2026
Ops command center (Phase 1), pipeline lead management (stage switch, archive, delete), auto-advance on contact, territory lead/review pins, and branding + readability polish.
- Ops tab: a command-center upgrade. Each customer now has a Details drawer with utility, equipment, and production fields, plus a Safe Harbor alignment card that compares Illinois ABP, the Builder Prime contract, and Podio/GRWE engineering. The Honiotes project is loaded as the model record.
- Ops tab: an automatic alert engine flags customer name mismatches, missing account/meter numbers, no next-step owner, and incomplete or unconfirmed Safe Harbor alignment. A new Urgent / Missing tab lists every flagged customer (with a live count) and the tracker shows a colored dot on rows that need attention.
- Pipeline: open a lead and use the new Pipeline Stage dropdown to move it to any stage (syncs to GHL). On phones and iPads this is how you move leads (drag-and-drop is desktop-only there).
- Pipeline: a trash icon on each Kanban card archives the lead (hides it from the board but keeps the data); the lead modal has a Delete lead option to remove it entirely.
- Pipeline: a new lead is automatically moved to Attempting Contact when it is texted or emailed (from the dashboard or your GHL automation).
- Pipeline: dragging a card no longer makes it disappear when crossing columns, and columns no longer scroll sideways.
- Territory map: a heart pin for every customer who left a review (click to read it), plus a color-coded pin for every pipeline lead with the single hottest one badged HOT LEAD. Permit difficulty is now shaded over real county boundaries.
- Outreach Playbook: a cleaner, more readable layout with channel icons, color accents, and a clear Why note on each message.
- Branding: the real SPM emblem now sits in the top bar and adapts to light and dark mode.
- Notes: the Sample analysis opens a full in-person door-knock conversation with its AI summary and deep-dive. Voice-note audio has a playback-speed control and a download button.
- Calendar: today's date is highlighted so the current day is obvious.
- Demo: a View demo option lets you enter the sample-data demo while logged in, without exposing real customer data.
Version 2.0 · June 29, 2026
Logins (email/password + guest demo), notifications, a full Team Messages upgrade with AI voice notes, the Marketing tab, and a native mobile-app experience.
- Sign in with email and password (in addition to Google). Admins can create teammate logins at /admin.
- Continue as guest: a demo version of the dashboard that runs entirely on sample data and never shows real customer info.
- Notification bell in the top bar with a live unread badge, plus push notifications to your phone (even when the app is closed) once enabled.
- Team Messages (renamed from Messages): file and document attachments, voice notes, and per-message timestamps, styled like iMessage.
- Voice notes get an AI transcript, a short summary, and extracted action items. An Implement button applies the internal action items (note/tag) to the matched customer; a custom audio player replaces the old controls.
- Ops tab: new Import Notes sub-tab to match door-knock notes to GHL customers and upload them.
- Calendar: the appointment popup now shows the customer's phone, email, address, and notes.
- New Marketing tab: maps your customers by address, flags referral targets and reviews, and a Testimonials view that pulls Facebook testimonial videos and matches them to customers.
- Territory map: Street/Satellite toggle, a full-screen button, and colored permit-difficulty zones (green/orange/red) around each territory.
- Field Tool: a premium redesign plus a team leaderboard (booking streaks and achievement badges) and a celebratory team alert when an appointment is booked.
- Mobile/app polish: install to your home screen as a full-screen app with the SPM icon, a hamburger menu, a pinned top bar, smooth screen transitions, the native iPhone font, and safe-area handling so nothing is hidden by the notch.
Version 1.9 · June 29, 2026
Market Domination tab, Field Tool tab, standalone /field mobile page, and Notes sample analysis button.
- New Market Domination tab: a door-knocker command center with five sub-views (Door Knocker KPIs, Salesperson scorecard, Lead Intake pipeline, Territories map, Playbook). Runs on sample data for presentation; live data is not wired yet.
- New Field Tool tab in the sidebar: a dedicated in-dashboard entry point for the /field mobile door-knocker experience.
- Standalone /field mobile page: record a voice memo, the app fills lead details, confirm, pick a calendar slot, book. Creates the GHL contact and appointment and tags it appointment-booked.
- Notes tab: new Sample analysis button opens a pre-built AI Deep Analysis report so the feature can be demonstrated without a real recorded call.
Version 1.8 · June 28, 2026
Field knock tool, Recruit Demo, calendar appointment types, pipeline sync cleanup, and Kanban polish.
- New /field mobile tool: door knockers tap New Knock, record a voice memo, the app fills in lead details, the rep confirms them, picks a real open calendar slot, and books. Creates the GHL contact, books the appointment, and tags it appointment-booked so GHL workflows fire. Installable to the phone home screen.
- New Recruit Demo screen (sidebar): a guided, click-through walkthrough showing a prospective door knocker the full journey from knock to close, ending in an editable earnings comparison. Runs on sample data so it is safe to show outside the company.
- Calendar: appointments now have a Phone (yellow) or In-person (green) type. In-person reserves a 2-hour buffer; Phone reserves a 1-hour buffer so those times cannot be double-booked. The booking modal has a type toggle.
- Pipeline stages now match GHL exactly: a stage deleted in GHL is removed from the dashboard on the next sync instead of lingering as a ghost column.
- Kanban drag-and-drop fixed: cards can now be dragged onto columns that appeared after a Sync from GHL. A toast warns if a column is out of sync instead of silently doing nothing.
- Kanban polish: columns no longer show a stray horizontal scrollbar, and long lead names now truncate cleanly inside the card.
Version 1.7 · June 25, 2026
AI call coaching, note generation, a new call player, and background syncing.
- Deep analysis: each recorded call has a Deep analysis button that opens an AI coaching report (overall score, talk ratio, call psychology, what worked, what to fix, an NEPQ scorecard, a Hormozi view, and suggested rewrites).
- Generate from history: the Notes tab can draft a note from everything (texts, calls, transcripts, existing notes) for you to review and save.
- New call player: recorded calls now have play/pause, a scrubber, a 1x/1.5x/2x speed button, mute, download, and an info button that opens a Call details popup.
- The lead window tab is renamed Team chat (the private team thread). To text or call the client, use the Text button.
- Regenerate aerial view: add an address with Edit info, then click Regenerate on the photo box to load the satellite image.
- Zoom slider on the board to fit more columns on screen.
- Brand new leads read 'added Xh ago' until they are actually worked, then switch to 'touched Xh ago'.
Version 1.6 · June 25, 2026
One-click Sync from GHL button on the board.
- Added a Sync from GHL button at the top right of the board toolbar that pulls the latest pipeline stages from GHL and updates the columns in place.
- Syncing stages no longer requires opening the Add column popup first.
Version 1.5 · June 25, 2026
Call length and a transcript expander.
- Each recorded call now shows how long it was.
- The full transcript opens from a Show transcript expander right below the recording.
Version 1.4 · June 25, 2026
Call recordings and AI call summaries.
- Phone calls now show in a lead's Conversation alongside texts, with a built in audio player for recorded calls.
- Click Summarize call to transcribe the call and get a short sales focused recap, saved to the lead's notes automatically.
- Click Show transcript to read the full word for word transcript of a call.
- Internal notes now work on calls too, not just texts.
Version 1.3 · June 25, 2026
Score filters and a clearer house view.
- Added Roof score and AHJ score sliders at the top of the board to filter leads by score.
- Made the aerial house photo in the lead window bigger and framed it tighter on the home.
Version 1.2 · June 24, 2026
Aerial house photos.
- Each lead now shows a satellite photo of the home in the lead window. Click it to open the spot in Google Maps.
Version 1.1 · June 24, 2026
Light and dark mode.
- Added a light/dark toggle in the top bar, next to the clock.
- The whole dashboard, including this guide, now follows your light or dark choice.
Version 1.0 · June 19, 2026
First version of the dashboard guide.
- Covers the Pipeline board, the lead window, the Calendar, Messages, Permit Scoring, and the Solar Roof Score.
- Added the in-dashboard guide viewer and the PDF download.
What this guide is
This guide explains how to use the SPM Command Center. The dashboard is the screen
where you see your leads, talk to them, score their roofs, and book
appointments. You do not need any tech skills to use it. This guide walks
through every button and what it does.
This guide's own Jump to a section list (in the in-app viewer) is grouped into
Getting started, Leads, Ops & field, Overview & tools,
and Reference, with sections listed alphabetically inside each group, so a long list of
section names is easier to scan.
A few words we use a lot:
| Word | What it means |
| Lead | A person who might buy solar. Each lead is one card on the board. |
| Pipeline | The whole set of leads, shown as columns you move them through. |
| Stage | One column on the board. It shows how far along a lead is (for example, "New Lead" or "Set"). |
| AHJ | The local government office that approves building permits. "Permit difficulty" is how hard that office is to work with. |
Signing in
- Open the dashboard link in your web browser.
- Click Sign in with Google and choose your work email.
- If your email is on the approved list, the dashboard opens. If not, ask the admin to add you.
Note: Only approved emails can get in. This keeps client information private.
A red Join War Room button sits at the very top of the left nav (and in the mobile nav drawer too), so it is always one click away. Click it to hop straight into Dave's video room; if no room link is set, it opens the War Room tab instead.
How the menu works now (the icon rail)
On a desktop screen the menu is a thin column of icons, each with a one or two word label underneath. Hover any icon with your mouse and a panel slides out beside it listing every page in that group; click the one you want. If the list is long it scrolls inside the panel, so nothing is ever cut off.
The point of this change: pages used to hide their own sub-pages behind a row of buttons at the top of the screen, which meant you could only discover a page by first landing on its parent. Now every destination in the dashboard is listed in the menu. Nothing is hidden one level down. Hovering shows you what exists; clicking takes you straight there, already on the right view.
You can still widen the menu back into the older full-width list using the button at the bottom of it.
On a phone, the slide-in menu now shows each section's sub-tabs, not just the top-level rows. So Air Campaign's sub-tabs (Search, Social Media Hub, Testimonials, and Referral asks) are all reachable on a phone now. Before, the drawer showed only the top-level rows, so Referral asks and its siblings could not be opened on mobile at all. Referral asks also shows by its own name in the mobile menu now (it used to read "Referrals" there), matching the desktop label.
Things that got renamed
Several tabs were using code names that did not say what they were. They now say what they are:
| Was called | Now called |
| Executive Overview | Executive Overview (mountain icon) |
| Leads | Leads |
| Calendar | Calendar |
| Delivery | Ops (back to the original ops icon) |
| Fix queue | Search issues |
| Force Multiplier | Advocates |
| Taskers | Tasks |
| Finance | Software costs (now under Ops > Reference) |
Nothing moved or changed behaviour because of a rename. The same board, calendar and tracker are where they always were.
The menu groups
| Group | Pages inside it |
| Command | Executive Overview |
| Pipeline | Leads (its tabs are listed right in the flyout now: Targets, Hit List, KPI, Dialer, Personal Lines, Inbox, and Tactical Tools with its own sub-pages) |
| Intel Capture | Its own rail icon now, sitting directly between War Room and Command (it used to be an Intel item inside the Pipeline flyout). It jumps straight to the Intel Capture recorder (the second tab of the Recon screen). See the note below the table. |
| Calendar | Its own icon in the rail now (it used to sit under Pipeline), with a flyout for Month / Week / Day / Book event |
| Comms | Team chat, Direct |
| Recon | The field-sales pages: Wins, Lead Intake, HVT, Tactical, Intel Capture, Import Intel |
| Air Campaign | The marketing pages: Search, Social Media Hub, Testimonials, Referral asks |
| War Map | The full-screen War Map (its own group now), plus Meetings Archive (the recorded-meetings page, moved here out of Comms) |
| Ops | Ops, Permit Scoring, Work Orders, Interval Data, Photo Library, Armory, and Reference (which holds Software costs) |
| Referrals | Advocates, Recruit Demo |
| SOP | Its own top-level item now (a parent), with two sub-tabs: Dashboard Guide (this handbook) and Tutorials (in-app screen-recorded walkthroughs). Both used to sit inside Executive Overview. |
The old "Growth" group is now two groups. Field sales (door knocking) lives under Recon, and marketing lives under Air Campaign, so the two very different jobs are no longer stacked in one long list.
Comms is its own top-level group now (just Team chat and Direct - the recorded meetings that used to sit here have moved out, see the next paragraph), and War Map and the Guide each got their own spot in the rail too. Calendar is now its own icon in the rail as well (it used to live under Pipeline), and its flyout offers Month / Week / Day / Book event. Intel Capture is now its own rail icon (between War Room and Command); it used to be an Intel item inside the Pipeline flyout. The old single-item Money group is gone: Finance moved under Ops as Software costs (see the Ops Reference area).
Intel Capture is its own rail icon now. It sits directly between War Room and Command and jumps straight to the Intel Capture recorder (the second tab of the Recon screen), so a rep no longer has to open Recon and switch tabs. It only navigates there; it does not auto-start a recording (that is still the phone's record button). Recon still has its own Intel Capture tab.
The Pipeline flyout now lists the Leads sub-tabs directly - Targets, Hit List, KPI, Dialer, Personal Lines, and Inbox - so you can jump straight to one instead of landing on Leads first and then picking a tab. The Tactical Tools sub-pages (Playbook, Follow-up Engine, Scripts, AI Caller, Bot Sandbox) are also listed under a Tactical Tools heading in that same flyout, so each opens in one click.
Referrals is its own group. It used to be a corner of Air Campaign, which carried both a "Referrals" and a "Referral Hub" sub-tab alongside the top-level tab, so the same programme appeared in three places under two names. It has its own app, payout ledger and fraud guard now, so it gets its own group. Its main page was renamed from Force Multiplier to Advocates.
Photo Library is in the menu, under Ops next to Work Orders. It shipped reachable only by typing its address, so unless you knew the URL you could not get to it at all.
Recorded meetings are now one page. Team meetings and customer meetings used to be two separate lists (one under Comms, one under Pipeline). They are now a single Meetings page - reached from the left-nav War Room flyout as Meetings Archive - with in-page filters to sort it out: filter by Team / Customer / All, by source (Google Meet / Zoom / All), and sort Newest / Oldest, 20 per page. Old deep links still land pre-filtered to the right view. See the Meetings section below.
Here is what each destination does:
| Menu item | What it shows |
| Executive Overview | The default screen when you sign in (was called "Executive Overview"). Company-at-a-glance metrics plus your running team to-do list and knowledge log. Its pages are Overview and Toolkit (every SPM link in one place: live sites, repos, infrastructure, review destinations). Intel Capture is its own rail icon now, and the SOP (this guide, plus Tutorials) is its own top-level menu item now, moved out of Executive Overview. Overview also carries the Sentry panel, the By product line table, and System health (moved here from the SEO area), all described in the Executive Overview section below. |
| Leads | Your lead board (was called "Leads", and "Virtual Leads" and "Pipeline" before that). This is where you work your leads. Its pages are Targets (the board), Hit List (the Red Hot next-steps checklist, described below), KPI (the setter scoreboard), Dialer (a full phone app for calling), Personal Lines (a call log for Dave's and Priscilla's direct numbers, described below), Inbox (incoming customer texts, voicemails, missed calls, missed transfers, and AI calls), and Tactical Tools (the outreach playbook, call Scripts, and AI Caller grouped together). Targets opens on the Board view. |
| Comms | Its own top-level group now. Its pages are just Team chat and Direct (one-to-one staff messages, with your recent customer text threads listed underneath). A search box above the tabs searches the conversations at once. Recorded meetings used to be a third tab here; they moved to their own Meetings Archive page (see below). See the Comms section below. |
| Meetings Archive | Recorded meetings, with the transcript, the AI summary and the action items. This used to be a Comms sub-tab called "War Room", later split into Team and Client lists. It is now one page, reached from the left-nav War Room flyout, holding both team and customer meetings with in-page filters (Team / Customer / All, Google Meet / Zoom / All, Newest / Oldest). See the Meetings section below. |
| SOP | Its own top-level menu item now (a parent), moved out of Executive Overview. It has two sub-tabs: Dashboard Guide (this handbook) and Tutorials (in-app screen-recorded walkthroughs, described in the Tutorials section below). The handbook was buried as a sub-tab of Executive Overview, so the one page that explains everything else was the hardest to find. Now it is one click from anywhere, and the SOP flyout's Tutorials link routes correctly to the Tutorials page. |
| Calendar | Your sales appointments (was called "Calendar"). Now its own icon in the rail (it used to live under Pipeline), with a flyout for Month / Week / Day / Book event. You can book, move, and cancel appointments here. |
| Recon | The door-knocker command center (formerly "Canvassing", and "Market Domination" before that). Its Ground War sub-tab includes HVT targeting and the Tactical playbook (the War Map is no longer a sub-tab here - it now lives under its own left-nav item, below), plus Intel Capture (the mobile door-knocker app) and Import Intel sub-tabs. |
| War Map | A shortcut (map-pin icon) that jumps straight to the Recon War Map and opens it in full screen automatically. Exit full screen (top-right button) to drop back to the normal map + territory list. Full screen now fills the working area beside the menu instead of covering it, so the menu stays reachable with the map open. |
| Ops | The install / Safe-Harbor command center (was called "Delivery" for a while; it is back to Ops with the original ops icon). Permit Scoring (rates how hard a local permit office is) and Armory (the sourcing directory, formerly "Parts") are now listed in the menu in their own right rather than only as buttons inside Ops. A collapsible map sits at the top of every Ops view. |
| Work Orders | A dispatch board for field-service work (site evaluations and service/warranty calls) that is separate from the solar-project Ops module. See the Work Orders section below. |
| Photo Library | Every site photo, browsable by project address. This is the home for the imported CompanyCam archive and the guided-capture photos. See the Photo Library section below. |
| Air Campaign | Marketing tools and campaigns (formerly "Marketing"), its own top-level group now. Hovering Air Campaign opens a flyout panel listing its pages: Search (one tabbed screen holding Traffic and Search, Search issues, and AI visibility), Social Media Hub (with the Instagram DM Setter as a tab inside it), Testimonials, and Referral asks. (The old Claude Skills page has been removed - it is gone from the rail, the flyout, and the marketing screen's Reference group.) The panel overlays the menu rather than pushing it around, so nothing below it jumps. |
| Advocates | Referrals and advocates in one place (renamed from "Force Multiplier"): who referred whom, what each person has earned, what is owed, and the Approve and Pay payout button. See the Advocates section below. |
| Software costs | A money view of SPM's own tech-stack spending (not customer billing), renamed from "Finance" and now living under Ops > Reference. See the Software costs section below. |
| Recruit Demo | Demo view only, at the top: a guided, click-through walkthrough that shows a prospective door knocker the full journey from knock to close (sample data only). |
The sidebar now follows your light or dark mode setting (it used to always stay dark), and subtle glow accents highlight whichever tab is currently selected, the SPM logo, cards and rows across the dashboard, and key buttons. Notification count badges are also more prominent now, with a gradient fill, a ring, and a glow so unread counts catch your eye. Left menu icons also play a small, springy pop animation when you hover the row with a mouse (desktop only).
At the bottom of the menu you will see your name, a Sign out button, a Guide PDF download (the guide also lives in-app under the top-level SOP item, on its Dashboard Guide sub-tab), and a button to switch between the thin icon rail and the older full-width list. At the top right of every screen there is a large clock that shows the date and time.
What time zone am I looking at? Times follow your own setting, not the server's. SPM runs on Central time (Dave, Priscilla and the customers), and that is what everyone sees by default. Austin's accounts are set to Eastern, so he sees Eastern. Anywhere a time is something you might repeat to a customer (booking a slot, scheduling a text) it is labelled CT or ET, and if your zone differs from Central the customer's time is shown next to it in brackets. If you change your zone, sign out and back in for it to take effect.
The whole dashboard now opens in dark mode by default. You can still switch to light mode anytime with the toggle in the top bar, and whichever you pick is remembered for next time. The old top-bar Refresh button has been retired: the command center now updates on its own everywhere. Chat, reactions, leads, and notifications update in real time, and the calendar, Ops tracker, Taskers/Seeds, and customer chat refresh themselves in the background (about every 20-30 seconds) so new activity from other people shows up without a page reload. (The AI status-summary cards keep their own Refresh on purpose, so a costly AI summary is not regenerated on a timer.) The SPM emblem in the top bar is back to its original, smaller size.
Show/hide controls read more clearly now. The old faint gray "show/hide" text is now an obvious bordered Show/Hide pill with a chevron, and a collapsible section's header shows its chevron in a bordered box so it plainly reads as something you can expand. The thin divider lines between content blocks are one shade stronger (more visible in dark mode) across every page and sub-page.
On phones and tablets, your SPM dialer number is pinned right under the top bar on every page, so you always know the number your calls and texts go out from. Page pinch-and-zoom is turned off across the dashboard so the layout cannot be zoomed by accident (interactive maps still pinch-zoom normally). Accordions and the slide-in mobile menu now animate smoothly open and closed instead of snapping (this motion respects your device's reduced-motion setting). Push notifications (on desktop and on the installed phone app) alert you to a new lead coming in and to a customer texting back, on top of the team-message and field-knock alerts you already got. A new notification now also slides in as a toast in the top-right corner and auto-dismisses, alongside the existing alert sound and the bell dropdown, so you catch it even if you are not looking at the bell.
The Leads board (your leads)
This tab is now called Leads. It was "Air Raid" before that, "Virtual Leads" before that, and started life as "Pipeline". Its pages are Targets (the board described in this section), Hit List (an AI next-steps checklist for your Red Hot leads, described just below), KPI (a live setter scoreboard), Dialer (a full phone app for calling one number at a time), Personal Lines (a call log for Dave's and Priscilla's direct numbers, sitting next to Dialer), Inbox (incoming customer texts, voicemails, missed calls, missed transfers, and AI calls), and Tactical Tools (the outreach playbook, call Scripts, and AI Caller grouped together). Hit List, KPI, Dialer, Personal Lines, Inbox, and Tactical Tools each have their own section further down this guide. Targets opens on the Board view; the tag/temperature filters, the dialer-queue bar, and the color legend live behind a Filters button and are collapsed by default, so the board gets the full screen until you open them. The lead search box stays always visible above the board (it used to be hidden inside the Filters panel). On phones, the toolbar row scrolls sideways so buttons that would otherwise be cut off the screen edge can be reached by swiping the row.
The Pipeline is the main screen. It looks like a row of columns. Each column is
a stage, and each card inside it is a lead. You move a lead to the
right as it gets closer to a sale.
The stages (columns)
From left to right, the usual stages are:
- Imported/Aged Leads — the first column, and it holds the older bought-in list you are working through. It used to be called "New Lead"; only the label changed, nothing moved.
- Red Hot Leads — people worth calling right now. This column is pinned: the board's automatic moves leave it alone, so texting one, or getting a reply, will not quietly re-file it somewhere else. Only you move a lead out of Red Hot.
- New Leads — genuinely fresh arrivals, sitting just after Red Hot. This one is dashboard-only, so it is safe from the GoHighLevel stage sync.
- Attempting Contact — you have reached out and are waiting on them.
- Engaged / Qualifying — they have written or called back and you are working out fit.
- Qualified — they are a real fit and worth an appointment.
- Appointment Booked — a consult is on the calendar.
- Appointment Canceled — the appointment fell through. It sits between Booked and Consultation Held so a cancellation is visible instead of quietly sliding back to the start.
- Consultation Held — Dave has met them.
- Needs a Proposal — the consult happened and we owe them numbers. This sits between Consultation Held and Proposal Sent so a customer waiting on a price cannot be mistaken for one who already has it.
- Proposal Sent — a price/offer has been sent.
- Won — they bought.
- Lost / Disqualified — not going ahead.
- Requested to NOT be Contacted — do not text, call or knock. Nothing automated will touch a lead in this stage.
The number next to each stage name tells you how many leads are in it.
What a lead card shows
Each card holds the key facts about one person. Here is what each part means:
| On the card | What it tells you |
| Name | The lead's name. If only a first name was collected, it shows "[No last name]". |
| Phone and email | How to reach them. If one is missing it says "[No phone]" or "[No email]". |
| Score chip (like "7/10") | The solar roof score. Higher is a better roof for solar. It only shows after the roof has been scored. |
| Tags | Small labels that group leads (for example, "roof-good"). These help you sort and filter. |
| Product pills | Colored pills for the products the lead is interested in: Solar (amber), Windows, Siding (blue), Commercial, Agricultural, Geothermal, and Heat Pump. Each pill now carries a matching icon so you can spot the product at a glance. Solar is its own pill instead of being the default guess for every untagged lead. Each pill is a super-tag that rolls up the underlying GHL service tags, so you do not have to read the raw tag names. The Referral, New text, and Missed call badges use the same clean icon style. |
| "Missing Industry" chip | A red chip that shows in place of a product pill when a lead has no clear product on it. It no longer defaults to Solar; instead it is flagged so you can open the lead and set the right product by hand. |
| Left border color | How long since you last touched this lead. Green is fresh, then yellow, orange, and red as it gets older. Red means it is going cold. |
| "added" or "touched" time | A brand new lead shows "added Xh ago" until someone actually works it. Once there is a real interaction it switches to "touched Xh ago". |
| Colored dot | How old the lead is overall. Green is new, red is old. |
| Speech bubble icon | Click it to open the lead's text message history fast. |
| "How they answer" badge | Shows up only after you have marked it in the lead window: a purple badge reads "Google Voice", an amber badge reads "Answering machine". No badge means it rings normally. |
| "Wants a quote" pill | A red pill with a flame that appears the moment a lead texts back wanting a quote or a callback (for example "yes send me a number", "call me", "I'm interested"). It stays on the card until someone replies, and it fires even when the AI bot is off or in shadow mode and even when the lead is not in a sequence. See "Hot-reply flag" below. |
Tip: Watch the left border color. Leads turning orange or red need attention before they go cold. The Leads list view uses the same color coding (left border for time since last touch, dot for lead age) with a legend, so you get the same read whether you use the board or the list.
Hot-reply flag ("Wants a quote")
When a lead texts back wanting a quote or a callback ("yes send me a number", "call me",
"I'm interested"), the dashboard flags them automatically so a warm reply never slips through:
- A persistent red "Wants a quote" pill (with a flame) shows on their card and stays
there until someone replies.
- A "Wants a quote" notification hits the bell and your phone (push).
- It fires even when the AI bot is off or in shadow mode, and even when the lead is
not in a sequence, so replies to reactivation texts stop slipping past.
The flag clears the moment a human sends them a text back, so it always means someone
still owes this lead a reply.
Find a lead
- Search box: always visible above the board. As you type a name or phone number, a
suggestion dropdown lists matching leads; click one to jump straight to that lead's card -
it narrows the board to them, clears any filters that would hide them, scrolls the card
into view, and flashes a highlight ring.
- All tags menu: pick a tag to show only leads with that label. Choose "Clear" to see everyone again.
Filter chips (one-click filters)
The filter bar above the board also has one-click chips. Click a chip to narrow the
board to matching leads; click it again, or click Clear filters, to turn it off.
There are five groups:
- Product chips: Solar, Windows, Siding, Geothermal, and Heat Pump.
These match the colored product pills on the cards: each is a super-tag that rolls up
the underlying service tags.
- Missing Industry chip: shows only the leads with no product tagged at all,
so you can work through the pile and classify each one by hand instead of it being
guessed as Solar.
- Lead quality chips: Hot, Warm, and Cold.
- Category chips: Residential, Commercial, and Agricultural.
(Commercial and Agricultural live here, in the category group, so they are not repeated
as product chips. The cards still show Commercial and Agricultural product pills.)
- Lead source chips: lead source is now a nested taxonomy, a parent (Knocked
or Internet) with child sub-sources underneath it (Canvassing under Knocked;
Fixr, SolarReviews, and SPM Website under Internet). Click a parent chip to see every
lead from that channel, or open it to pick one specific sub-source.
Chips combine with the search box and the tag menu. They also narrow what
Send matching to dialer queues (next section), so you can build a hot-only or
category-specific call list in a couple of clicks.
Build a dialer queue
Line up a chosen set of leads for the dialer:
- Board view: use the power-dialer bar and click Send matching to dialer
to queue every lead that matches your current search and filter chips.
- List view: tick the checkbox on each row you want, then send just those.
Leads with no phone number, leads marked DNC (do not call), and leads sitting in a
do-not-contact stage are skipped automatically, and a summary tells you how many were
queued and how many were skipped. The Clear queue button empties the list so you can start
a fresh one.
Fixed 2 August 2026: the queue used to only accept a
lead that existed in GoHighLevel, which by then was 36 of the last 1,968 leads. Sending 400 leads
to the dialer quietly queued a handful, and the dialer session had almost nothing to call. It now
queues every lead with a phone number.
Start an in-dashboard dialer session
Call your queue yourself, right from the browser. Build your queue with the search box and filter chips as above, then click
Start dialer session. A built-in softphone opens and dials your leads one at a time,
with Call, Mute, and Hangup controls for the live call. After each call,
pick an outcome, then click Call next to move on automatically. The outcomes are
Booked, Callback, No answer, Voicemail, Not interested,
Wrong number, Qualified, and DQ. Qualified advances the lead's
stage the same way Booked does; DQ does not move the stage. The session runs on its
own dedicated dialer phone number, separate from your regular line.
Recording during a dialer session is optional. When it is on, nothing is played to the
customer. Instead, a short reminder plays privately to you, the rep, prompting you to say
out loud that the call is being recorded (Illinois requires all-party consent).
Move a lead to another stage
- Click and hold a card.
- Drag it to the column you want.
- Let go. The lead moves, and the dashboard saves it.
If the save fails, a message pops up and the card goes back. Just try again.
Tip: You can drag a card onto any column, including ones you just added. If a column looks out of date, a yellow toast appears at the bottom of the screen - refresh the page and try again.
Automatic stage moves
The board moves leads through the pipeline on its own as real activity happens, so nobody has to remember to drag a card by hand. Every automatic move is guarded so it never drags an opted-out lead, or a lead already further along, backward.
- New Lead → Attempting Contact - happens the moment you first reach out: texting or sending a voice note from the lead's conversation thread, or calling them, all count. It also happens the moment the automated follow-up sequence's first text or email actually sends, or its first automated call goes out.
- → Engaged / Qualifying - happens when the lead replies to a text, when the lead calls in (to the dialer line or the 844 IVR) from a number that matches a known lead, or when the lead replies to an email.
- → Appointment Booked - happens the moment an appointment is booked for the lead, whether a rep books it in the dashboard, the lead books it themselves through their own link, or the AI bot books it. (Field door-knock bookings do not trigger this move yet.)
- → Requested to NOT be Contacted - happens when a lead texts STOP, or replies to an email with a clear opt-out.
Email replies need a one-time setup: moving a lead to Engaged / Qualifying (or to Requested to NOT be Contacted on a clear opt-out) from an email reply works by checking the connected Google inbox every 5 minutes. An admin has to set one environment variable (the connected Google address) before this works; until then, email replies do not move the lead's stage on their own.
GoHighLevel has been retired
The dashboard is the source of truth. There is nothing left to sync. GoHighLevel used to
hold the contacts, and the dashboard read from it and wrote back to it. As of 2 August 2026
that connection is gone. Your leads, stages, appointments, availability, notes, tags and texts all
live in the dashboard's own database, with Google Calendar for appointments.
The toolbar buttons that managed the old connection (GHL ingest On/Off, Preview push to
GHL, Push to GHL (live) and Check GHL vs dashboard) have been removed. If you
remember using them, you are not missing anything: there is no longer a second system to keep in
step with.
If you are looking for something that used to be in GHL:
availability is under Calendar, notes are on the lead itself, texts are in the lead's
Customer Facing Chat, and appointments are on the Calendar and in Google Calendar. Nothing was
deleted from GoHighLevel by this change; the dashboard simply stopped reading it.
Where leads come from
Leads land straight in the board: from the SPM website forms, from Fixr and
SolarReviews, from a door knock in Intel Capture, or added by hand.
They arrive already tagged with a product and drop into New Lead automatically. If
one of these leads has no clear product on it, it gets the red Missing Industry chip
instead of being guessed as Solar (see the filter chips above).
Lead source is a nested taxonomy: a parent (Knocked or Internet) with child
sub-sources underneath (Canvassing under Knocked; Fixr, SolarReviews, and SPM Website under
Internet). About 1,300 older aggregator leads were backfilled as Internet > Fixr so the
taxonomy is accurate for existing leads too, not just new ones.
Fixr and SolarReviews intake now captures each lead's Origin URL, the aggregator site
the lead actually came from (for example Solar-Estimate.org), and saves it into the lead's
note. That note also now actually saves reliably: a silent database error used to drop it, so
setters could not always see the Fixr context (source, industry, campaign, Origin URL, best
contact time, and credit score) on an imported lead. That is fixed, so the full context note
shows up on every Fixr/SolarReviews lead going forward.
Copy a lead to Ops, and customer cards
If a lead turns out to be an existing customer, the lead panel has a Copy to Ops button.
One click adds them to the Ops tracker, or, if they are already there, links to their existing
Ops record instead of creating a duplicate. Ops customers are now linked to their
leads-pipeline card behind the scenes, so the two records point at the same person.
A lead that is a real Ops customer now shows the gold "customer" card treatment (a gold
gradient with a gold left border), so you can spot an existing customer at a glance. Before, only
leads sitting in the Won column got the gold card.
Card display
Long lead names fit neatly inside the card and do not push the column out of shape.
If a name is very long it will be cut off with "..." so the card stays tidy.
Columns also do not show a stray horizontal scrollbar, so the board stays clean
even when names run long.
Zoom and resize the board
Use the Zoom slider in the toolbar to scale the board. It shrinks or grows the whole card -
text, badges, and spacing - not just the column width, so more stages fit on screen while staying
readable. The Zoom slider is desktop-only: on a phone, the board instead opens full-size and
readable one column at a time, and you swipe left or right to move between columns (it snaps into
place) instead of the whole board being shrunk to fit.
You can also resize one column at a time: drag the right edge of its header left or right, and the
cards inside scale with it. And click a column's header to sort just that column newest-first, then
oldest-first on the next click.
Add a new column
At the end of the columns there is a + Add column button. Type a name and the column is
created right here in the dashboard. It lands at the end of
the board; drag it wherever you want.
Deleting and restoring a lead
Deleting a lead now archives it (a soft delete) instead of permanently erasing it. It
disappears from the board (nothing can bring it back on
its own), but the record itself is kept and can be recovered. Click the Archived button
to open the archived-leads bucket, where each one has a Restore button to bring it back
onto the board.
Good to know: Leads with no phone number are hidden from the board so it stays focused on people you can actually call. They are not deleted, and they can be brought back if needed.
Leads: Hit List (Red Hot next steps)
The Hit List sub-tab turns your Red Hot leads into a worked checklist. Every Red Hot
lead shows as a card with an AI-generated, editable next-steps checklist built from
that lead's notes, messages, and calls, so you open the tab already knowing the next move on each
one instead of re-reading the whole history.
- Work the steps. Check a step off as you do it, edit the wording, or add your own step.
Click Refresh on a card to pull a fresh set of AI steps. If the AI checklist fails to
build, the card shows a short retry line instead of sitting blank.
- Cards lay out in up to three columns (it used to be a single tall stack), dropping to
two then one column on smaller screens.
- An urgency dot on each card reads at a glance: green when the last contact was
under 4 hours ago, amber under 24 hours, red older than that.
- Call is the primary button on each card, with bigger tap targets for phone use.
- Cleared today. Once a lead is fully handled it collapses into a Cleared today
group. The lead itself stays in Red Hot until you move it by hand - clearing the checklist does
not re-file the card.
Held meetings feed this list too: a customer's Dave Meetings action steps and held-meeting notes
push into the Red Hot Hit List and its AI checklist (see the Dave Meetings tab in the lead window).
Leads: KPI (setter scoreboard)
The KPI sub-tab is a live scoreboard for the whole team's calling activity. It reads
directly from real dialer call data, so the numbers update as calls happen.
- The funnel: Dials, then Answered, then Qualified, then Booked, shown as a
step-by-step conversion funnel. Answered only counts a call where you actually
spoke with the customer - a call that reached voicemail, got no answer, or was left
untagged no longer counts as answered. Talk time and Avg call length reflect
only those real conversations too, not every dial.
- Conversion rates: answer rate, book rate per dial, book rate per answer, and
dials per appointment.
- Outcomes and effort: callbacks due, DQ count, total talk time, and average
call length.
- Time range toggle: switch the whole scoreboard between Today,
This Week, This Month, and All Time.
At the bottom of the KPI tab is a Recent Calls log: the latest team dials with a real
outcome badge (Talked, Voicemail, No answer, Booked, and so on)
instead of a generic "Called", an incoming/outgoing arrow, how long ago the call happened, and
the call length. A call nobody has tagged yet reads Not logged - tap that badge to
quick-tag it Talked, Voicemail, or No answer right from the list, without opening the lead.
Because this is a shared, team-wide view, phone numbers are masked and show only the last 4
digits.
Leads: Dialer (phone app)
The Dialer sub-tab is a full phone app built into the dashboard, separate from the
in-dashboard dialer session described above. It is for placing or handling one call at a
time. It has five tabs along the bottom: Favorites, Recents, Contacts,
Keypad, and Voicemail. Opening the Dialer always lands you on Keypad
first, no matter which tab you had open last time. The bottom tabs are large and easy to tap
on mobile, with the active tab highlighted. On a phone, the left nav also has a large green
phone button under Air Campaign that jumps straight into the Dialer.
The in-call bar (shows up anywhere)
While a call is live, a small in-call bar floats at the bottom of the screen no matter
which page you are on, not just the Dialer tab. It shows the caller's name and number and a
running timer. Tap the expand icon on the bar to open a full-screen call window
with a big name, number, and timer, an in-call dial pad for pressing numbers during the
call (useful for phone menus), and large Mute and Hang up buttons. Tap
Minimize to shrink it back down to the small bar without ending the call. On a phone the
full-screen call window opens on its own the moment a call starts dialing (no need to tap
expand); if you minimize it mid-call, it stays minimized.
Keypad
Type a number, or tap it in on the number pad, and press the green call button to place the
call through the softphone. While a call is live you get Mute, Hangup, and a
DTMF keypad for punching in extensions or menu options. The backspace key works two
ways: tap it to delete one digit, or press and hold it to clear the whole number.
As you type, matching leads show up as typing suggestions that float above the keypad
(two at a time, scroll for more) instead of pushing the keypad down, so the keypad itself
never moves. The suggestion list hugs the left side under the number you are typing and
truncates long names instead of stretching across the screen.
Recording is switched on or off with the round REC button just to the left of the
green call button. Turning it on does not play anything to the customer. Instead, a short
reminder plays privately to you so you remember to say out loud that the call is being
recorded (Illinois requires all-party consent).
At the top of the Dialer is a Call my cell toggle. Turn it ON and pressing Call rings
your own phone first, then connects the customer once you pick up, so the call does not drop if
you switch apps on your iPhone. The first time you turn it on, it asks for your cell number and
saves it for next time. The call still records and logs exactly like normal. Leave this toggle
OFF when you are on a computer, for regular in-browser calling.
Recents
Your call history, newest first. Each entry shows an arrow marking whether the call was
incoming or outgoing.
Contacts and Favorites
Contacts lists your leads so you can call one without typing a number. Favorites
are the numbers you have saved as speed-dial for quick access.
Voicemail
Voicemails now attach to the customer who left them. A voicemail used to appear only in
this tab; the unheard-voicemail badge on the lead in Leads was wired up but never actually
worked, because nothing recorded which customer a voicemail belonged to. Now, when we recognise
the caller's number, the voicemail lights up that badge, appears as a note on the customer's
timeline with its transcript so you can read it without playing it, and alerts the team.
Voicemails from numbers we do not recognise still appear here in the Voicemail tab as before.
Voicemail is fully working. When a real inbound call comes in, a global incoming-call
alert pops up on top of whatever page you are on, anywhere in the dashboard, playing a real
ring and showing the matched lead's details with three choices: Open lead (jumps straight
to the matched lead), Send to voicemail (drops the caller to voicemail immediately), or
Ignore (just closes the popup - the call keeps ringing out on its own, about 20 seconds,
before it drops to voicemail, so the caller still gets a normal ring instead of an instant
hangup). If a call goes unanswered, it lands here in the Voicemail tab as a recording
with an automatic transcript underneath it, and an unread badge shows how many
voicemails you have not listened to yet.
The Leads nav badge (the red count on the left-menu Leads item) also tracks new
non-lead inbound texts: it ticks up the moment a text arrives in the Inbox from a number
that is not a saved lead, from anywhere in the dashboard, not just while you are on the Inbox
tab, and it clears back to 0 once you open the Inbox.
Leads: Personal Lines (Dave and Priscilla's direct numbers)
The Personal Lines sub-tab (under Leads, sitting next to Dialer) is a live log of every call
that came in on Dave's or Priscilla's dedicated direct numbers (see "Personal call
lines" under the 844 phone menu). Each row shows the caller, the time, the
duration, the recording player, and the AI transcript and summary. An
All / Dave / Priscilla filter narrows the log to one line. A call from an unknown number
shows here even when it does not attach to a lead, so nothing that came in on a personal line goes
unseen.
Leads: Inbox (texts, voicemails, missed calls, AI calls)
The Inbox sub-tab (under Leads) collects incoming activity in one place. It is organized
into sections with a segmented control, each showing an attention count:
- All - everything together.
- Texts - incoming customer texts.
- Voicemails - with playback and the transcript right inside the Inbox.
- Missed calls - calls nobody picked up.
- Missed transfers - live transfers from the AI receptionist that were not answered (see
the 844 phone menu section).
- AI calls - the full log of 844 AI-receptionist calls, fed by a Retell call webhook into
the
retell_calls table. A call that Retell flags as unsuccessful shows a
Follow up badge and also appears under Missed calls.
Click a row to open the caller's lead in Targets.
Instagram DMs (the AI DM setter)
The Instagram DM Setter is now a tab inside the Social Media Hub (under Air
Campaign), not its own left-menu item. It is the review queue for the AI that answers
Instagram direct messages. Each row is one conversation and shows what the bot has worked out
about the person so far (own or rent, property type, roughly what their bill is, their name, and
a way to reach them), plus any reply that is waiting to go out.
For every draft you can Approve it, edit it and then approve, or dismiss it.
Approving runs the same brand-safety check as a text, so an edit that slips in an em dash or a
price claim is blocked before it sends rather than after.
It starts in shadow mode. While shadow is on, anyone who messages gets one fixed,
pre-approved line, and the bot's real reply simply waits here for you to look at. Going live is a
single toggle on this tab, and that toggle is also the kill switch if you ever want it to stop.
An Instagram conversation only becomes a lead in Leads once it is genuinely qualified, meaning
a name plus a phone number or email we can actually reach. Casual commenters never enter the
pipeline.
Anyone who calls the main (844) 497-6527 number now reaches a menu instead of ringing one
phone. It exists for two reasons: to put the caller in front of the right person, and to keep
robocallers away from anyone's personal cell.
The very first thing every caller hears is "This call may be recorded for quality and training
purposes." It cannot be skipped by pressing a key early, and it is said once per call, not
repeated when the call connects.
| They press | What it means | Where it goes |
| 1 | A new project or a free estimate | The setter line |
| 2 | Already working with us, or their project is underway | Dave's cell |
| 3 | System is installed and running, and they need service | Priscilla |
| 4 | Anything else | Rings a couple of times, then voicemail |
| # | Hear the menu again (up to twice) | Repeats, then voicemail |
The wording deliberately does not name Dave, and deliberately never says the word "voicemail" for
option 4. A spam caller who is told which key is a dead end simply presses a different one, and
naming one person makes the team sound smaller than it is. Option 4 rings a few times first, like
a phone nobody picked up, then plays the Solar Power Midwest greeting.
The menu is the spam filter. To make anyone's phone actually ring, a caller has to press 1,
2 or 3. Silence, a wrong key, or a caller ID that the phone network has flagged as faked all go to
voicemail instead, so robocallers never reach a personal cell. If nobody answers a real call, it
now goes to voicemail too, which it did not before.
Whoever answers hears a short private announcement first, which the caller cannot hear:
the customer's name if we recognise their number ("Service call from Donald Shaffer"), or their
digits read out if we do not, plus what the call is about based on the option they chose.
The automated voice sounds noticeably better than it did. It moved from Amazon's basic robotic
voice to their neural one, across the menu, the recording notice, voicemail greetings and the AI
caller. Other voices can be tried by setting IVR_VOICE without a code change; see
docs/ivr-voice.md.
Call recording and where calls end up
Every call through the 844 menu is recorded, including the ones that ring Dave's or
Priscilla's personal cell, and every caller is told before connecting. Recordings appear in Recent
Calls like any other call. Calls dialed directly to a personal cell, bypassing the 844
number, still cannot be recorded, because they never pass through our phone system.
Outbound call recording is now ON by default in the dialer. It used to start off every
session, so forgetting to tick the box meant the call was never saved. Turning it off is now the
deliberate choice.
Inbound call lengths are recorded properly. Calls that came in used to be logged when they
started but never closed out, so a quarter of the call history showed no duration and still read
as "initiated" long after the call ended. Anything counting talk time was undercounting. Fixed
going forward, and the 37 affected past calls were backfilled.
Customers can have more than one phone number. If someone calls from a number that is not
the one on their record (a forwarding number, a work line, a spouse's phone), the call used to be
recorded but attached to nobody, which looked exactly like a missing recording. Extra numbers are
now remembered and matched automatically. There is also an unknown calls list of any real
conversation we could not tie to a customer: assign one to the right person and that number is
saved, so their future calls attach on their own.
Personal call lines for Dave and Priscilla
Dave and Priscilla each have their own dedicated phone number to hand out to customers. A
customer who calls that number hears the recording notice, is forwarded to that person's cell, and
the call is recorded. It shows up in Recent Calls tagged to whose line it came in on (Dave
or Priscilla), with the recording and one-click transcript like any other call. These lines are
configured with the PERSONAL_LINE_* environment variables. See the Personal
Lines tab (under Leads) for the full call log.
The AI receptionist and missed transfers
The AI receptionist can try a live transfer to reach Dave, Priscilla, or the setter
(Austin) on a call. When that transfer is not answered, a missed live transfer is handled so
a real caller is never lost:
- It texts Dave, Priscilla, and the setter (Austin) at once (deduped; the setter number is
set with
MISSED_TRANSFER_SETTER_NUMBER), shows in the notifications bell and
toaster, sends a web push so it reaches phones, and drops a note on the matching lead.
- The alert names who the receptionist was trying to reach (Dave, Priscilla, or Austin),
since it goes to all three at once. If the target was not captured it falls back to the older
wording.
- If the caller is not in the system yet, a lead is auto-created for them (tagged
"missed-transfer" and "unverified", in the first pipeline stage), so an inbound caller is never
lost. This is skipped for calls with no usable callback number and for obvious non-customers
(recruiters, vendors, solicitors, robocalls). These auto-created leads are not
auto-texted: a person qualifies them with the Call-back button. The alert opens the new
lead.
The Tactical Tools sub-tab holds the outreach playbook: the ready-to-send text and
email copy for every step of the follow-up sequence, plus call Scripts and the AI Caller
(its own section below). The playbook is where you go to find and copy the exact wording for
a message instead of writing it from scratch.
A sticky Industry tab bar (All, Solar, Windows, Siding, Commercial) sits at the top of
the screen so you can jump straight to one product's copy without scrolling past the rest.
The copy is source-aware: a Fixr/SolarReviews lead requested an estimate, while a
website lead requested an energy plan, and the wording now says exactly that instead of
claiming everyone "ran an estimate" (nobody actually sees numbers until Dave's call).
Wherever a message's wording changes based on where the lead came from, the playbook shows
the Website and Fixr versions side by side, each with its own Copy
button and a length check, so you always grab the version that matches how the lead came in.
The copy is also utility-aware: instead of always saying "ComEd", messages now name
the lead's real electric utility, worked out automatically from their location: ComEd for
northern Illinois, Ameren for central and southern Illinois, or "your utility" for anyone
out of state. "Lower your ComEd bill" is now "lower your electric bill" everywhere that used
to assume ComEd.
The sequence schedules call tasks, not just texts and emails. Every track (Solar,
Windows, Siding, Commercial) prompts three spaced phone-call attempts, on Day 0, Day 3, and
Day 7, since a call books more meetings than another text. Each call shows up as a Tasker in
Executive Overview for you to make; the dashboard never auto-dials, and these call tasks do not
count against the texting cap.
Scripts (first-call phone scripts)
A Scripts area (also inside Tactical Tools) holds first-call phone scripts by lead
type: fresh, aged, and third-party solar, windows, siding, combined, commercial, cold outbound,
and agricultural. Alongside the scripts are collapsible reference panels: objection responses,
a tonality guide, phrases to use and avoid, and a compliance checklist, adapted from the Setter
First-Call Playbook.
Air Campaign (the marketing area) opens on its Website sub-tab, alongside
Social Media, Testimonials, and Referrals (the old Map sub-tab was removed). Social
Media holds a ready-to-use SPM social media playbook built
from eight growth frameworks: Strategy Audit, Audience ICP, Competitor Gaps, Content Pillars, a
30-Day Calendar, a Hook Library, Follower-to-Client, and a Monthly Review. A jump-to menu
moves you between them, and the direct-message and call-to-action snippets have Copy buttons.
It is reference content to guide your posting; there is nothing to fill in and it makes no
outside calls.
The Facebook, Instagram, and LinkedIn sub-tabs connect through a service
called Zernio and, once connected, show a live analytics dashboard (followers, posts,
impressions, reach, and engagement). Discord is unchanged.
The Social Media tab now opens on a Planner (its default sub-tab) for planning and
organizing your posts across all three platforms in one place. It has three views you switch
between:
- Board - a pipeline: Idea → Draft → Scheduled → Posted. Capture ideas in
the quick-add bar, then drag a card from one stage to the next as it progresses. An idea or
draft card also has a Schedule button: pick a date and time and it schedules the post to
the connected platforms (through Zernio, the same as Compose), then moves the card to Scheduled
on its own. Your real scheduled/posted content from Zernio shows here too, marked read-only.
- Calendar - a month grid with each scheduled and posted item on its date, color-dotted
by platform.
- Queue - counts across the four stages plus a list of what is scheduled next.
The Compose sub-tab writes a post and publishes it now or schedules it for later across the
platforms you pick.
Under Social Media > Strategy, a Writing voices panel lets each person (Dave, Austin,
Info, Priscilla) connect their own Gmail, read-only, so the AI can learn that person's
individual writing voice from their sent mail. Each person gets their own Connect /
Disconnect button, plus a Rebuild all button to refresh every voice at once. This
is a separate Google connection from the calendar and email-send connection used elsewhere in
the dashboard.
The Instagram DM Setter is now a tab inside the Social Media Hub, rather than its own
menu item. See the Instagram DMs section for how the setter review queue works.
Air Campaign: Referral asks
The Referral asks sub-tab is where you ask customers for referrals. It was rebuilt from a
wall of cards into a checkbox list: tick the people you want to ask and use the bulk
Ask selected action to send to all of them at once. The status filter at the top is now a
sliding-pill segmented control (the same control used in the SPM Reputation app) instead of
a dropdown. Click a single name to compose a one-off ask just for that person.
Air Campaign: Website (analytics)
The search area is now one tabbed "Search" screen. The SEO area was
consolidated from six tabs down to three: Traffic & Search, Search issues (the
Fix queue, renamed), and AI visibility. They are now tabs on a single Search screen
under Air Campaign, reached from the Air Campaign flyout. Reports is unchanged, and
System health moved out of here to Executive Overview. On large screens the
Search issues tab shows two columns: the Fix queue on the left and
What to do next (the SEO coach) on the right. In the SEO-GEO Reports, each report now has an
Export report button that downloads a clean, shareable HTML copy you can email or archive.
The Website sub-tab reads your live Google Analytics and Search Console data for the
SPM site, so you can see how the site is actually performing instead of guessing. Its sections
are Website visitors, SEO autopilot, Google Search, AI answer
visibility, What to do next, and AI cost by feature. Every one of them is
collapsible - click a section's header to fold or unfold it - and they all open by default.
- A Website visitors chart shows visits, sessions, page views, and engagement over
time. On the Today range it breaks down by hour, so you get an actual shape for the
day instead of a single flat point; the 7-day and 30-day ranges are unchanged. Internal and
self traffic from Germantown is excluded from every metric here (visitors, sessions, page
views, engagement, top pages/sources/locations, AI referrals, live-now, and leads), so the
numbers reflect real prospects rather than your own team browsing the site.
- A Leads tile and a Leads by source panel show conversions (estimate,
contact, and booking form submits, plus phone-number taps) broken down by traffic
channel, so you can see which channels actually produce leads, not just visits.
- A SEO autopilot section tracks the site's ongoing search-optimization work.
- An AI search referrals tile shows visits that came from AI answer engines
(ChatGPT, Perplexity, Gemini, Copilot, and Claude), broken down by engine. This tile now
notes that it undercounts, since not every AI referral is labeled by the engine that sent
it; zero really can mean zero when no AI-tool referrals occurred in the range.
- An AI answer visibility panel (a separate, bigger feature - your share-of-voice
scoreboard) asks common buyer questions to ChatGPT and Claude web search and shows how
often SPM gets named in the answer compared to competitors. The Competitors named by
AI and Review sites lists now draw as horizontal bar charts, and a new
Share of voice by engine card shows how often each AI engine (ChatGPT, Claude) named
SPM on this run.
- A Google Search section (from Search Console) shows the actual keywords people use
to find you on Google: top queries with clicks, impressions, and position, total clicks,
impressions, CTR, and average position, and the top pages showing up in search. It also
lists Page-2 opportunities (queries ranking positions 11-20 - close, but not on page
1 yet) and Ranks well, rarely clicked (page-1 queries with a low click-through rate),
so you know exactly which queries to push on next.
- An Improvement queue card sits at the top of the Google Search section and does the
prioritizing for you. It merges eight kinds of SEO opportunity (page-2 queries, ranks-well-but-
rarely-clicked, pages slipping in ranking, missing-content gaps, and thin pages) into one list
ranked by how many clicks a fix is likely to win versus how much effort it takes. Each row
shows a type badge, the page, its top queries, the estimated clicks per month, a priority
score, and a Queue fix button that hands that fix to the SEO pipeline (the Auto-Tasker
opens a pull request you approve). If a fix is already in the pipeline the button says
Already queued in amber, instead of falsely reading "Approved". A Build queue / Refresh button (and an
automatic weekly Monday run) re-crawls the site and Search Console, rebuilds the list, and
auto-queues the top three fixes. The content-gap and thin-page checks need a one-time owner
setup before they have page text to read; until then the queue still shows the Search-Console-
based fixes and works fine.
The queue now leads with "striking-distance" wins: search terms already ranking just off
the top (about position 5 to 20) are ordered to the top of the list, ranked by how much search
traffic they already get, weighted toward solar-relevant terms, since those are the fastest
gains. The strongest striking-distance terms are queued for work automatically on
each refresh (no per-row "Queue fix" click needed); weaker ones stay listed but are not
auto-queued. Every generated recommendation also passes through a second AI quality check
that drops anything built on made-up numbers, non-issues, zero-impact busywork, or jargon before
it ever reaches the queue.
- A What to do next AI panel reads your live GA and Search Console numbers and
returns prioritized, specific SEO and GEO action steps, each with a category, a priority,
and do-this-now steps. The list now separates the fixes the system handles itself with
no person needed (for example auto-resubmitting the sitemap to Google), grouped under
"Handled automatically / No action needed", from the fixes that still need a PR merge or
a decision. The weekly SEO refresh now also resubmits the sitemap automatically. Click
Get recommendations to run it; it only runs when you
click it, so it never costs you anything on its own. Each recommendation card is itself
collapsible (collapsed by default) with a completed checkbox that strikes the card
through and grays it out once done; the completed state is saved and shared across the
whole team. This panel also carries a Ranking moves since each fix chart: each tracked
keyword's baseline-to-latest Google position drawn as a dumbbell (rank 1 = best, on the
right; green marks a keyword that improved), so you can see whether the fixes are actually
moving rankings.
- An AI cost by feature section shows what the AI-powered parts of Air Campaign are
costing to run.
An Integrations health panel shows when each inbound channel last received data
(inbound texts, Zoom recordings, website leads, and Fixr leads) and flags any that have gone
quiet, along with the exact webhook to repoint, so a silently-broken webhook shows up as a red
row instead of going unnoticed for days.
Reading the Improvement queue
Three of the eight row types are about keywords rather than pages, so the queue now finds
problems that no single page would reveal:
- Keyword fit - a page you already have should be targeting this search term but never
mentions it.
- Competing pages - two of your pages are fighting each other for the same term, with the
suggested keeper named.
- No page yet - a term with real search volume that nothing on your site covers.
Rows also say whether the number is measured or predicted. A row estimated from search
volume rather than from your own Search Console data carries an amber Forecast chip, so a
prediction never reads as a measured result. Hover it for the explanation.
Safe fixes and structural fixes are treated differently. Safe fixes (title, heading and
copy edits to a page that already exists) keep auto-opening a pull request on the weekly run.
Structural fixes (redirecting, merging, or creating a page) never open one on their own; they wait
behind an Approve button with the evidence shown inline, so a bot cannot redirect your
pages while Google is still re-indexing the site.
Out-of-area search terms are ignored now. The recommendation engine and the content-gap
page builder skip Google queries that name a city SPM does not service (for example East Peoria,
Peoria, or Rockford), so they stop proposing content for markets we do not cover. Naperville and
the western suburbs are kept, DeKalb stays in (commercial), and a query with no city named (like
"solar panel cost illinois") is kept. The service-area city lists live in
lib/seo-service-area.ts and are the tuning knob.
Page-2 recommendations now name the exact internal links to add. A "nudge onto page 1"
fix used to give the generic advice "add internal links". It now lists concrete
suggestions - the exact existing pages that could link to the target page, with the sentence
where the link fits and a suggested anchor - capped at the 8 best per page. These come out of the
weekly site crawl, so there is nothing to set up.
Indexing health explains itself now. Every "not indexed" page translates Google's own
wording (for example "URL is unknown to Google") into plain English plus the specific next step,
and the list is grouped by reason at the top, since nearly all pages usually share one root cause.
A verdict we do not recognise still shows Google's original text rather than nothing.
Content interview
A Content interview panel appears once there is something to answer. When a content gap is
approved, the dashboard writes four questions only SPM could answer, and you answer them in a
weekly batch. Nothing is written until every question is answered, so an unanswered article simply
waits. Blank or spaces-only answers are refused and told to you rather than silently accepted.
The SEO keyword list grew from 206 to 622 terms, adding windows, roofing, siding and doors
alongside the original solar set.
Leads: AI Caller
The AI Caller sub-tab manages calls the AI places on its own instead of a person. At
the top is a Send a test call panel: type in a single number and it dials only that
number, so you can try it out safely without touching any real leads. Real-lead batches stay
locked and cannot run until an admin turns them on with a server setting
(AI_CALLER_LIVE_ENABLED).
The lead window (click a card)
Click any card to open the lead window. This is where you do the real work on one person. It has several parts. On desktop, a full-screen toggle next to the close × expands the window to fill the whole screen; click it again to return to the normal resizable window.
Contact details
At the top you see the name, phone, email, and whether an address is on file. Below that is a row of quick-action buttons, each now labeled with text and an icon (they used to be icon-only, so you had to guess). The row shows Call, Comms, and Email, then one button for each tab in the lead window - Notes, Dave Meetings, Documents, Script, Windows & Siding Simulator, and Proposal - so the action buttons always match the tab bar. (The old Text button is now labeled Comms, because the customer-facing chat it opens now carries texts and emails together, not texts alone.) Tapping a tab button opens that tab. The tab buttons show even when the lead has no phone or email on file, since those tabs are still useful without them. Click Edit info to fix or add details, like a missing address. In the edit window, start typing in the Street address box and pick one of the Google suggestions that drop down; it fills in the street, city, state, and ZIP for you in one tap. Save changes works for every lead, including website and dialer leads that were never in GHL. If you save a lead that has a street address but no city, state, or ZIP, the dashboard now fills in the missing pieces from Google automatically, but only when it finds one confident match, so a partial address you save no longer stays incomplete.
Next to the details is a satellite photo of the home. If it says No aerial view (usually because there was no address when the lead came in), add the address with Edit info, then click Regenerate on the photo box to load it.
The address now shows its latitude and longitude underneath it (auto-geocoded if the coordinates were not already on file), with a one-click copy button. Copy the lat/lng to paste straight into PVWatts, SolarGraf, or Maps instead of re-typing the address.
Under the aerial photo, all the product super tags line up in rows: the ones active on this lead (from how the lead came in) are lit up, and the rest are shown "off". Tap any tag to turn it on or off for this lead. A Change log dropdown shows the history - who turned which tag on or off, and when. There are also two solar-ownership markers, and which one you pick matters. Has solar (another company) (yellow, dimmed sun) means somebody else installed it, so they read as not-a-solar-prospect. Has solar (ours) (green, full sun) means we installed it. Use the green one for our own customers: they are the only people the $150 referral thank-you may be offered to, they should be routed to service rather than sold to, and the AI bot will not ask them whether they have solar.
Next to Copy referral link there is a Copy SolarGraf prompt button. It bundles the
customer's details, the measured roof pitch, azimuth and orientation (from Google Solar), the AI
context brief, and the full conversation history into one prompt copied to your clipboard, ready
to paste into SolarGraf (or the Claude Chrome extension) to design a proposal. It now lists
every measured roof face, largest first, with each face's pitch, azimuth (plus compass
direction) and area, and tells the design AI to prioritize the south, southeast and southwest
faces and skip north-facing ones - so a cut-up roof no longer gets the array aimed the wrong way
from a single largest face. On a rural roof Google cannot read, the prompt hands SolarGraf the
address to measure instead.
"How they answer"
After a call, mark how the lead's phone answered using the How they answer buttons:
Normal, Google Voice, or Answering machine. This helps the next person who
calls know what to expect before they dial. Your pick shows as a clear badge on the lead's
Kanban card (purple for Google Voice, amber for Answering machine) and is also synced as a tag
on the lead.
Which utility a customer is on
ComEd versus Ameren is now worked out for far more customers. It only ever worked when the state
was stored as exactly "IL", so customers whose record said "Illinois" spelled out, or had no state
at all, were told about "your utility" in every text and showed no utility badge, even though
their ZIP said exactly which one. 724 more customers now name their real utility, including
410 more Fixr leads. Nothing had to be re-imported; the detection just reads the ZIP now.
Aerial images and solar scores also clean the address before looking it up, so a stray "Suite"
line or a duplicated address no longer drops the pin on the wrong property. Editing a lead's
address refreshes the aerial photo right away; it used to keep showing the previous house for up
to a day.
Solar roof score
This rates the roof for solar from 1 to 10. Higher is better. To get a score,
click Score roof. The dashboard looks up the home's roof using map and
sun data and gives it a grade. Click Why 7/10 (the number matches the
score) to see the reasons, such as roof shape, how many panels could fit, and
how much sun the roof gets. If you want to update it later, click
Re-score.
New build with no satellite view? When Google has no imagery for the address (common on a
brand-new construction), the error now reads "...get imagery from NearMap" instead of a
dead-end message, pointing you straight to the workaround: pull the roof imagery from NearMap
yourself, then flip the Satellite imagery obtained toggle (below).
Estimate production with PVWatts. The roof-score section also has a System size (kW)
input and a Get PVWatts production button. Type the system size and click it, and it shows
the estimated annual production (kWh, and kWh per kW) from NREL PVWatts for that address. This is
an on-demand estimate and nothing is saved - SolarGraf stays the authoritative number.
Battery sizing is off the real system size now. Any battery recommendation is sized from
the actual PV system size (kW), not the rough roof estimate, and it does not appear until a
real system size is entered. The lead panel has a Battery, actual system size kW input for
this; on an Ops customer the same sizing reads from their System size DC/AC fields instead.
Note: If a roof says "estimated," the exact roof data was not available, so the score is a close guess from a satellite image plus sun data. Always confirm the final design in your solar design tool.
Permit difficulty (AHJ)
AHJ is the local office that approves permits. This score (1 to 10) tells you
how hard that office tends to be. It shows the town, an estimated permit time,
and you can click Why this score to see the reasons. If it says
"Not on file," we do not have permit data for that town yet, so no score is
shown.
The tabs (Customer Facing Chat, Notes, Dave Meetings, Documents, Script, Windows & Siding Simulator, Proposal)
Inside the lead window there is a row of tabs. Customer Facing Chat is the real
conversation with the client. Notes is for your own notes. Dave Meetings tracks the
result and next steps from each held or ad-hoc appointment (described below). Documents is
every file on this customer; it used to be buried partway down the Notes tab and is now its own
tab, with a folder icon in the quick-action row that jumps straight to it, and every file in it
has a download button. Script is the Outreach Playbook for this one customer.
Windows & Siding Simulator (renamed from "Design") recolors a photo of the home so a
customer can see siding and window colors before buying. Proposal builds a preliminary
solar proposal number in-house. Each is described in its own section below.
The tab bar scrolls sideways when there are too many tabs to fit (on desktop and mobile),
each tab label stays on one line, and each tab shows a small icon (message, note,
calendar, files, script, palette, signature) instead of the old colored dots. The old Team
chat tab has been removed from the lead window; anything you send in the Customer
Facing Chat still goes to the customer, and internal notes on a call or text (described above and
below) stay private to the team.
Customer Facing Chat (texting and calling the client)
Open the Customer Facing Chat tab to see every text and phone call with the lead, in
order. A blue banner at the top reminds you that messages
you send here are delivered to the customer. Type a message at the bottom to text the client.
If the customer texts you a photo (a picture message), it now shows right in the thread;
tap it to open the full-size image. If the customer sends any photo or file, a Save to
documents link appears right under it in the thread. Pick a category (Utility bill,
Contract, Proposal, ID/Ownership, Photos, Design, Shade Report, Other) and it files the
attachment straight into the lead's Documents in the Notes tab.
Emails show in this thread too. Alongside texts and manual emails, the automated
nurture and sequence emails now appear in the conversation (previously only manually-sent and
inbound emails showed), so the thread is the whole story. Inbound email replies are timestamped at
the time they were actually received, not when the system polled for them. An email body is a full
HTML document, so it now renders the way the customer saw it, in a sandboxed, scripts-disabled
frame, instead of printing the raw <!doctype html> markup as text.
The message box itself now grows taller as you type, so you can see the whole text you are
writing instead of it staying stuck on one line; it also grows to fit a drafted or AI/voice
message, then snaps back to one line right after you send it.
A one-click Draft button (the violet sparkle icon, next to the mic) writes the best next
text for the lead, using their industry, how aged the lead is, and the conversation so far, and
drops it in the box for you to review before sending. A drafted text now includes the
customer's own pre-filled booking link (reused or freshly minted for them) as the call
to action, instead of a generic booking page link.
Polish (the amber wand, next to Draft) is a different job from Draft. Draft invents the
next message for you; Polish takes a message you have already written and improves only its
wording: it leads with a question where it can, keeps the tone low pressure, and ends on one clear
next step. It reads the conversation and the lead's details first, so it will not reintroduce you
to somebody you are mid-conversation with. The button sits dimmed until you type something.
Polish will refuse rather than guess. If the rewrite adds a price, a number or a percentage
you did not type, or drops one you did, it is thrown away and your text is left exactly as you
wrote it, with a short line saying why. If your message conflicts with a company rule (for
instance offering the $150 referral to somebody who is not a customer yet), it tells you that
instead of quietly rewriting the offer. When Polish declines to rewrite for a compliance reason, it
shows a calm amber note ("kept your wording, you can still send it") rather than a red error
that looked like the send was blocked: the send was never blocked, only the rewrite was declined.
After an accepted rewrite you get a one-tap Undo,
so your own words are never more than a click away. Em dashes are corrected automatically.
A separate Voice note mic button (next to the composer) records a short voice note and
texts the customer a tap-to-listen link instead of a transcript; the sent note shows a small
audio player right in the thread so you can see it went out. This is different from the AI
voice assistant mic described further down, which turns your spoken words into a written text
draft rather than sending audio.
Next to Copy booking link, new Link offers toggle chips (Phone / Virtual /
In-home) let you control which appointment types the customer's booking link offers. Turn a
type off and their pre-filled booking link stops offering it, for example leave only Virtual
on so the link books a video call only. At least one type must stay on, and leaving all three
on offers everything (the default). This is enforced on the server too, so a hand-edited link
cannot book a type you turned off.
When a call was recorded, it shows a built in player with how long the call was.
The player has play and pause, a progress bar you can drag, a speed button
(1x, 1.5x, 2x), a mute button, a download button to save the
recording, and an info button that opens a Call details popup (who called
whom, the time, how long it was, and the status).
Each recorded call has two AI buttons:
- Quick summary writes a short, sales focused recap and saves it to the
lead's notes. A Show transcript expander appears below the recording.
- Deep analysis opens a full coaching report: an overall score, the talk
ratio (how much the rep talked versus the client), the call psychology, what
went well, what to fix, an NEPQ scorecard, a Hormozi view, and suggested
rewrites. A short recap is also saved to the lead's notes.
Calls from before call recording was turned on will not have audio. You can also
add an internal note on any text or call. Internal notes stay private to
the team and are never sent to the client.
Long recordings now play and transcribe. A very long call (an hour or more) that errored
the moment you pressed play now plays: the streaming proxy was being cut off before the file
finished serving, and it now gets the full time budget (and falls back gracefully if seeking is
not supported). For transcription, a recording that is too big for the standard auto-transcriber
(over about an hour) is transcribed through Deepgram instead of failing. Until an admin
sets the DEEPGRAM_API_KEY, a too-long recording simply says so plainly, with its
size (for example "too long to auto-transcribe - 31 MB"), rather than a generic "could not
process" message. Shorter calls are unaffected.
Sending a picture
Tap the picture button next to the message box, pick an image, and it sends as a picture
message (MMS). JPG, PNG, GIF, WEBP and HEIC up to 5 MB. You can send an image on its own with no
text. Pictures you send keep working permanently now; they used to turn into a broken image icon
about an hour after sending.
Clicking any picture or file anywhere in the customer window (the chat or the Documents tab)
opens it in a viewer window on top of the page, on phone and desktop. It used to throw you
out into a new browser tab. Save to documents and a Download link appear on every
image in the thread, including ones we sent, not just ones the customer sent. The Download
button now actually saves the file to your computer or phone instead of opening the image
in a new browser tab, in both the Documents list and the image/preview viewer. If a save does
fail, the reason now appears next to the button instead of just saying "Try again".
HEIC photos (the iPhone default) cannot be displayed by Chrome or Firefox at all. Rather
than showing a broken icon that looks like a damaged file, the dashboard says so plainly and
offers a download instead.
Signing your texts
Texts you send here are signed with your first name on the last line (for example "- Dave"), so
the customer knows which person is writing. SPM texts from one number, so without this every
message looked identical to them. It does not double-sign if you already signed it yourself, and
an image with no text is not signed. Automated sequence messages are never signed, since those
already introduce themselves.
A pill above the message box shows Signing as <your name> or Not signing.
Click it to switch. Your choice is remembered on that computer.
Named accounts can be asked to confirm before a customer-facing text goes out. A dialog
shows the exact message and says plainly that the customer will receive it and it cannot be
unsent. Set it up by adding the person's email to the app setting sms_confirm_emails.
Schedule a text for later
You do not have to send a text the moment you write it. Type the message, then click Later
next to Send. Pick one of the presets (Tomorrow 9:00 AM, Tomorrow 1:00 PM, Monday 9:00 AM) or set
your own date and time. Times are your own local time. This is what to use when you write a reply
late at night that should not land on someone's phone until the morning.
Anything waiting to go out shows in an amber strip above the message box with its send
time, the first part of the message, and a Cancel link. If you cancel at the same moment it
sends, you are told it already went out rather than the dashboard pretending it was cancelled.
A scheduled text checks the world again at the moment it is due, not when you wrote it:
- If the customer replies first, it cancels itself. A message written last night for a
conversation that has since moved on reads as though nobody was listening.
- If they opt out, or get moved to Lost / Disqualified or Requested to NOT be Contacted, or
their phone number goes missing, it is skipped and the reason is recorded.
- If the send genuinely fails, it appears as a failed message in the thread rather than
disappearing quietly.
Reading the thread
The chat opens scrolled to the newest message instead of the oldest. It only auto-follows
new messages if you are already near the bottom, so it will not yank you away while you are
reading older history. Typing boxes in pop-up windows also stay put now: the chat refreshes itself
every few seconds, and each refresh used to pull your cursor out of whatever you were writing.
Emailing the customer (compose modal)
Everything the AI writes here is saved. The pre-position package and every AI draft reply
are kept as a version history for that customer. Reopening the Email window shows a violet bar
with the date and time the package was made and who made it, plus a Load into email
button, and a Saved versions list where each entry is labelled with what it was and when.
Generating a new one never erases the old one. It deliberately does not fill in the subject and
message on its own, so opening the window to send an ordinary email is never hijacked by an old
package.
Click the Email button in the lead window to open the email compose modal. A
From dropdown lets you send as Austin (austin@), Info (info@), or Dave
(dave@solarpowermidwest.com). Every email now
blind-copies (BCC) Dave, Priscilla, info@, and you, hidden from the customer, so the whole
team stays in the loop.
You can now attach files to an email. Click Attach files to add up to 5
files from your computer or phone (10 MB each, 20 MB total); they send along with the email.
Attachments go out through Resend, and if that service is down the send is refused rather
than quietly going out without the files.
Next to the AI draft-reply button is a new Pre-position package button. It generates a
one-page pre-position email in Dave's 6-part structure, with an optional personal-note box, so
you can send it to the customer before their appointment.
The AI email drafting tool also sees any pending virtual meeting for the lead and can
include the video join link (Google Meet on new bookings) in the draft when it fits.
Script tab (Outreach Playbook for this lead)
The Script tab (violet) shows the Outreach Playbook automatically filtered to this one
customer: filtered to their industry and to the stage that matches how aged the lead is
(Day 1, Day 7, and so on). It lists the exact texts, emails, and calls for that moment, each
with a Copy button. Tap another stage pill to browse an earlier or later stage without
leaving the lead window.
Above that, the tab also leads with a collapsible first-call phone script matched to
the lead's product (with a separate aged/reactivation opener for a lead that has gone cold),
plus an objection-responses quick reference - open by default now, instead of starting
collapsed, so it is the first thing you see when you switch to Script.
Notes tab
Adding an internal note now alerts the rest of the team: a bell notification, a phone
push, and Slack if Slack is connected. The alert says who wrote it, which customer it is about,
and the first line or so of the note. This works for an internal note left on a customer's
chat thread too, and each such note also posts a short reflection into Team Comms
("Internal note on <lead>'s chat: ..."), so a note left on one lead's thread is no longer
missed by teammates who are not looking at that lead. Only notes a person actually types trigger
it. AI call summaries and automatic notes ("booked via booking link") stay silent, so the bell
keeps meaning something.
The Notes tab is for your own notes about the lead. Type one in and click
Add. You can also click Generate from history and the dashboard will
read everything (texts, calls, transcripts, and existing notes) and write a draft
note for you. The draft drops into the box so you can read and edit it before you
save it.
There is also a Sample analysis button that opens a pre-built AI Deep Analysis
report. This is useful for demos and training: it lets you show what a full coaching
report looks like without needing a real recorded call on file.
A Communication summary button writes a short AI recap of everything on file for that
customer: calls, texts, emails, and notes, all in one place. It only runs when you click it, and
the result is saved and shown right away next time you open the lead, until you click it again
to refresh it. The same button and summary also appear on an appointment's popup in the
calendar, so you can catch up on a customer right before a meeting without hunting through
their whole history.
Transcribe a recording. The Notes area has a Transcribe a recording option for
audio that is not already a call or a Zoom/Meet recording: an in-person consult you recorded, a
voice memo, or any other audio file. Upload it and the transcript plus an AI summary are
saved as a note (it takes about 4 minutes per file). The audio itself is never stored,
only the text it produced.
The Notes tab also holds a Documents section with colored category boxes: Utility
bill, Contract, Proposal, ID / Ownership, Photos, Design
(lime dot, for SolarGraf or Aurora roof design images), Shade Report (teal dot, for
Aurora or SolarGraf shade-analysis reports), and Other. Click a category to upload a file
straight into it (images, PDFs, Office docs, and video are supported); each box shows how many
files it holds in its color. In the file list
below, each file's name is colored to match its category, and photos show a small
thumbnail preview next to the name. Click a file (or its thumbnail) to open it in an
in-app viewer that previews images, PDFs, video, and audio right there; other file types get a
download button. Click the × to remove a file. Photos, PDFs, and a voice note that a
homeowner attaches on the website "One last look" step flow in here automatically, and the voice
note is transcribed and pinned as a lead note.
Extract usage from a utility bill. A utility-bill document now shows a lightning-bolt
Extract usage button. Click it and the AI reads that bill and shows the estimated
annual usage (kWh/yr), the utility, and the rate, so you can pull a
customer's usage straight off the document without adding it up by hand.
Photos from a phone just work now, whatever the size or format. Two things used to go
wrong here and both are fixed:
- "Upload failed" on a bigger photo. A 4MB photo would upload and a slightly larger one
from the same camera would not, with no reason given. Files now go straight to storage instead
of through the dashboard, and photos are shrunk on your phone or computer before they are sent.
The same fix applies to the customer capture link, work-order photos, and photos you attach to
a customer text.
- iPhone photos showing as a blank grey icon. An iPhone shoots in a format called HEIC
that Chrome, Firefox and Edge cannot display at all. HEIC is now converted to JPG automatically
on every upload path, so the thumbnail appears like any other photo. You do not have to do
anything, and you do not need to convert anything yourself first.
Voice notes also record at a smaller size now, so a long one no longer fails to send.
Hover measurements. The Notes tab has a Hover measurements box. Hover produces exact
siding square footage, window counts and roof measurements from a walk-around of the house, and
the box gives you two buttons:
- Send to the customer — Hover texts and emails them a link, they walk around the
house with their phone following the prompts, and the measurements come back attached to the
job.
- Send to Austin and Dave: the same request, sent to yourselves, for when you or
an installer will be standing at the property. This used to be "Send to me" and would email and
text everyone a "download the app" invite, because Hover was told the person capturing was a new
homeowner. It no longer does that: it just creates the job so it appears in your Hover app. Hover
allows only one capture link per request, so the link goes to Austin, and everyone on the list
also gets a text that it was requested.
Sending does not cost a capture; the cost applies when the capture is actually submitted.
Hover cannot measure photos you already have. This is the part worth knowing before you
promise anything: a capture has to be done in the Hover app, walking the property, so the photos
sitting in a lead's Documents cannot be turned into measurements no matter how good they are. Each
capture costs money, so the buttons ask before sending.
An Energy Independence Model panel also lives in the Notes tab. Profile the customer
(segment, tax position, existing solar, utility/tariff, battery goals, generator, financial
goal, and system spec), then click Compute scenarios to see ranked ownership scenarios
(net cost, payback, 30-year ROI, IRR, and NPV) with a recommended pick. Generate Wealth
Analysis PDF turns that into a one-page leave-behind for the customer. For a commercial or
industrial customer, checking Demand charges adds a demand-charge input (dollars per kW
per month, plus an optional peak kW the battery can shave); for a farm/ag customer, a
Pursuing a USDA REAP grant checkbox appears. When those apply, the scenario result cards
add a Grant (REAP) line and a Demand savings / yr line. This panel needs a
one-time setup by the owner before it works, and the money assumptions behind it still need
Dave's sign-off.
A new AI voice assistant lives in the customer conversation window (the mic button next
to Send). Tap it, say what you want in plain words (for example, "draft a text to Mark
reminding him of our appointment"), tap it again to stop, and it writes the text reply using
the lead's conversation history and drops it into the composer for you to review and send. Any
web links in a conversation are now clickable too.
Dave Meetings tab
The Dave Meetings tab tracks what came out of each appointment. For every held or ad-hoc
meeting with Dave it holds a per-meeting result and action steps, plus an overall
status and next-steps rollup across all of the customer's meetings. Those action steps
push to the Red Hot Hit List, and a held meeting also feeds the Hit List's AI checklist,
so what Dave decided in the room turns into the next moves on the lead.
Voice memos can auto-draft a meeting outcome. When you record a voice memo on a customer
who recently had a held meeting with Dave, the AI drafts that meeting's result and next steps and
shows them as a "Suggested from a voice memo" banner on the meeting card. One tap
Confirm accepts it, Edit lets you tweak it first, and Dismiss clears it.
Nothing is written to the real meeting result until you Confirm, so a rough memo never overwrites
the record on its own.
Windows & Siding Simulator tab (was "Design")
The Windows & Siding Simulator tab (renamed from "Design" and rebuilt) lets a customer
see color choices on their own house before they buy. Upload a straight-on photo of the home, pick
a Siding color and a Window / trim color from real swatches, and click Apply
colors: it recolors only the siding and the window frames on the actual photo, leaving
the house itself untouched, so the result looks real rather than painted-over. The first
Apply takes about a minute (it maps the photo once); after that, color changes are quick.
A SPM Blackout preset button produces the branded all-black look with a flag (this one is
an AI render). Present mode gives you a drag before/after slider to show the customer
the change side by side. As with the old Exterior Vision, the Generate / Replace-photo controls
appear only in Edit mode: generate and apply in Edit mode, then switch to Present mode to
show the finished result (Present mode only shows what you have applied). The colors shown are
simulations; the signed color selection is what is final.
Text the customer the picture yourself. A Download before/after (to text) button
builds a single side-by-side BEFORE/AFTER image you can save and text to the customer, and each
render also has its own Download image link. There is no customer portal here: you save the
picture and send it.
Proposal tab (the Proposal Generator)
The Proposal tab builds a full, customer-facing solar proposal PDF in-house, and works out
the proposal number itself, so you do not have to log into Carbon Solutions' portal just to get a
figure. It reproduces Carbon Solutions' REC calculator in-house. The text in this tab is a bit
larger now for readability.
Your inputs save automatically per lead. Switching tabs no longer clears the form: what you
typed, the personal note, your section choices, and the roof render image all come back when you
reopen the lead. A Clear saved link resets the form for that lead.
Upload a design or bill and it fills the form for you
Three upload boxes sit at the top: SolarGraf design, Aurora shade report, and
Electric bill. Drop or click to upload the PDF or image and it reads the document and
auto-fills the fields:
- The design or shade report fills production (Year-1 kWh), panel count and watts, and the
roof planes, using the document's own production number. That number already accounts for
the real roof layout and shading, so it beats the PVWatts estimate.
- The electric bill fills Annual home kWh.
Review the filled-in numbers, then Generate. After you upload a design or report it stays
shown as a labeled chip below its box (with a short summary of what was pulled from it), so
you can see at a glance what was imported. Clear it with the ×.
The Electric bill field also auto-fills the annual kWh from the newest utility bill already
in the lead's Documents tab, but only when the field is empty. You can still drop a bill in
by hand.
Production (PVWatts, per roof face)
An Estimate Year-1 kWh from PVWatts button fills the production field from the system size
and the roof, using the lead's address. PVWatts now supports multiple roof faces: add a
roof plane per face (its kW size, tilt, and azimuth, where 180 is south, 90 is east, and
270 is west), and it runs PVWatts on each face and adds them up for the total year-1 kWh. Leave
the planes blank to estimate the whole system as one plane. An uploaded design fills the roof
planes for you.
The roof render image
The Roof render auto-fills from the newest image in that lead's Design documents
category, so you do not have to upload it by hand. It re-pulls the latest design each time you open
the tab; a manual Roof render upload still overrides it for that session. PDFs in Design are skipped
(a roof render has to be an image). You see a thumbnail preview of the loaded roof and a note
saying where it came from. The file box still reads "No file chosen" because browsers never show a
file name you did not pick by hand, so the thumbnail is how you confirm it loaded. A Use latest
Design image button re-pulls the newest design without reopening the tab. The render also saves
per lead, so it survives switching tabs.
Pricing (you no longer have to type a price)
Leave System price blank and the proposal auto-calculates the price for you: solar at
$4 per watt, plus the battery at $1,100 per kWh (from the battery specs on the form), plus a $3,369
increase, whether or not you uploaded a design. Uploading a SolarGraf or Aurora design fills the
same System price automatically from the design's solar size. Type a price to override it, and
review it either way.
Customer appreciation volume discount (through September 15, 2026). While the window is open,
the auto-priced list raises the System price by $3,369 and pre-fills the same $3,369 as the
discount, with an "order by September 15, 2026" deadline. So a customer who orders in the
window sees the discount and pays the base price, and the proposal shows both the higher price and
the savings. After September 15 the discount stops filling in automatically and the raised price
stands. You can edit or clear either field per proposal.
Savings-only proposals changed: leaving the price blank
now shows the auto price. To show a savings-only proposal with no price, uncheck the "What it
costs" section in the Sections checklist instead of clearing the price.
Two optional rebate fields, Solar/inverter rebate $ and Battery rebate $, let
you enter a utility rebate. It shows as a credit that lowers the net system cost, labeled as
an estimate subject to the utility's program and eligibility. Leave blank if there is none.
Personalizing the proposal
- Co-buyer first name. Fill it in (or set the lead's spouse) and the proposal greets both
decision-makers ("Breanna and Bruce, here's the system...") on the cover and the opening line.
- Personal note. A box that appears at the top of the proposal, right after the greeting.
Type a warm sentence, or hit Draft from customer context and it reads the lead's context
brief and writes one first-person sentence for you to review and edit. It never quotes numbers
or invents anything, and the customer never sees the internal brief. Leave it blank to skip it.
It saves per lead.
- Sections in the PDF. A checklist lets you leave any section out of the generated proposal
(roof image, system spec, energy chart, warranties, costs, next steps, referral note, signature
block, fine print, and more). Uncheck a section to omit it. Header, greeting, and signature
always appear. Your choices save per lead.
The Auto-calculated readout
A live Auto-calculated readout sits above the Generate button. As your inputs change,
it fills in the derived numbers automatically: kW DC and AC, offset %, number of RECs and their
price, gross REC value, the vendor fee, the net SREC payout, the CSG breakdown (collateral,
application fee, after-energization, and quarterly amounts), net cost after SREC, and the payback
year.
SREC payouts are size-tiered. A system over 10 kW AC uses the Illinois Shines 10 to 25 kW
Small DG REC price (Group B $79.21, Group A $60.92) instead of the 0-10 kW price (Group B $80.77,
Group A $70.37), plus the $20 customer-owned adder. A system over 10 kW AC correctly reads "10 to
25 kW Small DG price tier" rather than claiming the higher 10-kW-and-under tier, so larger systems
are no longer priced at the smaller-system rate.
Guardrails before a proposal goes out
- Usage is required for any proposal PDF. A proposal can no longer go out with 0 kWh
usage and 0% offset (that used to leak into the "What you get" summary and the fine print as
well as the energy chart). If the customer's annual usage is blank, the Generate button
is disabled with a prompt to enter usage (a bill or an estimate), and the server blocks the PDF
as a backstop.
- Oversized-system warning. When a system produces more than 110% of the customer's usage,
a rep warning flags it before you send, since surplus is credited at avoided-cost (especially at
municipal utilities like Naperville).
- No self-defeating payback line. When a system does not pay back within 25 years, the
proposal now reads "This system is built to cover it" instead of the old "come out roughly $0
ahead" line.
- Legible payback chart. The payback chart's labels (net cost after SRECs, savings, no
rate increases, payback year) stay readable where the lines cross them: the "saved" label drops
below its dot when it would otherwise stack on the net-cost label, so the dashed net-cost line
and the savings curve no longer strike through the text. Copy-paste and screen readers read the
labels cleanly.
What the customer sees on the PDF
- An "at a glance" value summary box near the top, right after the greeting, so busy
customers see the main points first. Four numbered points: own your power; keep the lights on
with battery backup; stop renting from the utility (with the roughly 25-year cost in red and how
far ahead they come out in green, from the real savings numbers); and pride and peace of mind.
It uses the proposal's existing colors and box style.
- The energy section leads with Dave's "What [offset]% means for your home" explanation,
built from the lead's real numbers (usage, production, offset %, battery size, utility, EV
plan): why solar was sized to the actual usage, why hourly pricing means X% production is not
X% bill savings, the battery reasoning, EV future-planning, and the right-size philosophy.
- Reworded from Dave's notes: the cover headline reads "here's the system I'd build if this
were my home", the opening line thanks the customer for "looking into owning your own power",
and the discount note leads with "Thank you for your patience" and explains the wait was to
place one big bulk materials order.
- The "What it costs" section explains the volume discount in plain language: it comes from
a large materials order placed on the order-by date, which earns a better price from suppliers
that gets passed to the customer. This only shows when there is a discount with a deadline.
- SREC dollars are bold. Every Illinois Shines SREC dollar amount on the PDF is bold, with
an explicit line that the SREC payout is an estimate that changes with the final system size and
program factors (confirmed on the signed Carbon Solutions Disclosure Form).
- Financing footnote. The System price carries an asterisk with a financing note
("Financing options available. Every home is different, so text [rep] at [rep phone] and we'll
put together financing that fits yours"), using the rep name and phone on the proposal (Dave by
default).
- The offset donut names its denominator (home plus EV), so a reader cannot misread, for
example, 106% against home-only usage.
- The battery is explained honestly, and solar-only is an option. When the design includes a
battery, the proposal says roughly what the storage costs and that it is the main reason the payback
runs longer, then makes the case for it anyway: backup during outages, and using your own daytime
solar at night instead of buying it back (worth even more at a municipal utility like Naperville that
pays only a low avoided-cost rate for exported surplus). It closes by leaving solar-only open. If you
set the battery count to 0 on the form, the whole proposal renders as a clean solar-only document:
the title, the spec, the warranties, the backup language, and the interconnection note all drop the
battery.
Dave's cell never reaches a customer proposal: all
customer-facing copy uses the public (844) 497-6527, not Dave's cell. The proposal's phone is
a rep-editable field, so Dave's direct cell can be put on a sold customer's document on purpose, but
a single guard at the phone chokepoint swaps the public number in for any format of his cell, so a
stale or typed "Rep direct line" value cannot leak the internal-only number onto the PDF.
Both the readout and the PVWatts estimate are preliminary: the fields stay editable,
SolarGraf remains the production number to trust, and the signed CSG Disclosure Form is the source
of truth for the final proposal.
Follow-up (automated sequence)
The doors follow-up sequence is complete, running Day 3 through Day 45 like windows and
siding. A doors lead used to go quiet after Day 1. The copy stays on what a door actually is to
the owner (security, whether it opens and closes right, how the entry looks) and deliberately
never mentions energy costs.
New leads with a known product can be enrolled in an automated follow-up sequence that
texts and calls them on a schedule. Fixr leads with a known product enroll automatically
the moment they arrive. Leads flagged Missing Industry are never auto-enrolled,
since the copy would not know which product to mention until you set one.
If a lead is not enrolled yet, the lead window's Follow-up area shows an
Enroll in follow-up button. Click it to start the sequence by hand and send the
first text right away.
Book or manage an appointment
If the lead has no appointment yet, you will see a Book appointment button:
- Click Book appointment.
- Pick an open time slot (only real, free times are shown, so you cannot double-book).
- Choose a Host (Dave, Priscilla, or Austin; defaults to Dave) and a meeting
Type: Phone, Virtual, or In-house. The title reads "[Type] consultation with
[Host]: [Customer]". Booking a Virtual appointment automatically creates a
Google Meet link and puts it on the calendar invite. (SPM is moving off Zoom: new
virtual appointments use Google Meet, while everything downstream, the confirmations and
reminders, is unchanged.)
- Confirm. The appointment is saved to the calendar.
No email on file? The booking window warns you when the lead has no
email address: only Dave will get the calendar invite, not the customer. Click Edit customer
info to add one before you finish booking, if you can.
Overriding the gap between appointments. The booking window has an Ignore the gap
between appointments tick box under the time picker. Normally an in-home visit reserves two
hours of space around it and a phone call one hour, so slots too close to another appointment are
hidden. Tick this and those slots become available, letting you book back to back. It only waives
our own padding: a genuine clash with something already on the calendar is still blocked,
because that is a real conflict rather than breathing room.
If the lead already has an appointment, you will instead see the date and time with two buttons:
- Reschedule — pick a new open time. This now has the same Send automated texts
about the new time switch the appointment window has. Before, rescheduling from the lead
panel always texted the customer with no way to stop it, so a rep who turned it off in one
place reasonably believed it was off in both.
- Cancel — remove the appointment.
Reminder texts have a plain on/off switch, right under the Reschedule and Cancel buttons.
It reads "Appointment reminders are ON" or "OFF" so there is no guessing, and it can be flipped at
any time, not only at booking. It reads its state back from the record rather than assuming, so
what it says is what is actually set.
Video links. A virtual appointment that has no video link (an older booking, or one made
while the video service was briefly unreachable) shows a Create a Meet link button in the
appointment details window (it makes a real Google Meet link now, where it used to make a Zoom
meeting). It reports success only once the link is actually on the calendar entry, because a
meeting nobody can find is worse than none. You can also change who is
hosting straight from the details window without opening the edit form, and switching
recolours the event in Google to that person's colour.
Ten minutes before a video consult, the customer automatically gets the video link by text
and email. Only video calls that have a link get it, phone and in-home visits are skipped, and it
never fires after the fact.
The appointment box also shows a small Booked by line naming who set it: a team member
("<name> (team)"), the AI assistant, a field rep ("<name> (field)"), or the
customer self-booking ("customer (booking page)" through the website form, or "customer
(booking link)" through a link you texted them). Older appointments carried over from GoHighLevel
do not show this line. A Virtual appointment's video join link shows right here in the
Appointments area (and in the calendar event popup too).
When a consult is moved, the appointment card also shows a "Rescheduled by ..." line naming
who moved it - a teammate, the customer, or the bot - and the team gets a bell, push, and Slack
alert on every reschedule, so nobody is caught out by a time that quietly changed.
Dave's booking and reminder notifications
Dave can be notified directly whenever something happens on the calendar, all controlled by one
on/off switch (the DAVE_REMINDERS_ENABLED server setting, off until an admin turns
it on):
- A text (630-605-9655) and email (dave@solarpowermidwest.com) the moment any
appointment is booked - by a rep, by the customer self-serving, or by the AI bot.
- A text when a client replies to us, throttled to about once per 30-minute lull so a
chatty client cannot blow up his phone.
- Appointment reminders at 24 hours, 8am day-of, 6 hours, 1 hour, and 10 minutes before,
by text and email.
The Calendar
The appointment window has a View customer details button that takes you straight to that
person's card in Leads.
The Calendar (formerly "Calendar") screen shows your sales appointments. It has two sub-tabs: Calendar (the appointment views) and Dave's availability (set Dave's bookable hours, covered below).
- Month, Week, Day buttons switch the view. Switching is instant, with a smooth fade. On a phone, Month fits the screen without sideways scrolling and Week stacks the days top-to-bottom.
- The arrows and Today move you through dates.
- Colours tell you what kind of event it is. A small legend sits under the view buttons. Customer
appointments use the host's colour (Dave blue, Priscilla purple, Austin teal). Team meetings are green.
Anything that is neither — a vendor call, a supplier demo, a personal block — is amber. Those used
to be painted in a host colour, which made the sales day look busier with customers than it really was.
- Guest counts. When a meeting has two or more people invited, the chip shows a small person icon and a
number. Hover it to see who. This is so someone being added to a meeting (for example info@ being copied in) is
visible without opening every event.
- Book appointment (top right) starts a new booking: pick a lead, pick an open time,
pick a Host and meeting Type (Phone, Virtual, or In-house), confirm.
- Click any appointment to see details, then Reschedule or Cancel. In the
detail pop-up's edit mode (the pencil icon) you can also change the event's Start and
End time directly (Central), alongside Title/Type/Lead - the easy way to change the
time on an "Other" event; the change writes straight to Google Calendar. (The slot-based
Reschedule flow below still exists for lead appointments.)
- The appointment pop-up has an Attendees section showing everyone invited on the
Google appointment, each with their RSVP status (accepted, declined, maybe, or pending).
Add more people right from the pop-up by typing their email; adding someone writes them to
the Google Calendar event and emails them an invite.
- Clicking an empty day (Week view) or an empty hour (Day view) opens the Book
event window already preloaded to that day and time, so you skip picking the date by hand.
In Day view, hovering over an hour row shows a small green + to invite you to add an
event there. Clicking a day in Month or Week view opens that exact day in Day view.
- Dave's time off now shows across all three views: Month days show a gray Off
(full day) or Busy (partial) chip, Week columns show the off badge and the unavailable
ranges, and the Day view banners a full-day off and grays out the unavailable hours. It comes
from the time-off blocks set in the Dave's availability tab.
- Dave's available (open) hours now show in all three views too, alongside the time-off
overlay: Month cells show a green Open badge on working days, Week shows an Open
chip and the day's available window per column, and Day shows an Available 9:00 AM to 5:00 PM
pill in the header with a green accent on each open hour row. This comes from Dave's weekly hours
in the Dave's availability tab.
- Month view has a size control (S / M / L, top right of the grid) that makes the whole
month bigger or more compact and shows more appointments per day at larger sizes. Your choice
is remembered. On a phone the month's day cells are taller and roomier, and the month scrolls
down to show every week instead of squeezing them all onto one screen.
- Every booked appointment and Other event now automatically invites Priscilla as an
attendee, alongside Dave and the customer.
- An appointment's When line now shows the date in front of the time, and the
timezone too (for example "11:00 AM - 12:30 PM CDT"), so the meeting time is never
ambiguous.
- Appointments are color-coded by host: Dave's are blue, Priscilla's are purple, and
Austin's are teal. Within a host's color, the meeting type shows as a shade -
phone is the lightest, virtual is medium, and in-house is the darkest - plus a small
phone, video, or house icon so you can tell the type at a glance. Appointments booked
before this feature existed show in Dave's blue until someone assigns a host.
- The appointment pop-up shows Hosted by [Name], and in edit mode there is a
Host dropdown so you can reassign any meeting to a different host, which recolors
it on Google Calendar too.
When you Reschedule an appointment, alongside picking from the open time slots you can now
flip to Enter exact time and type any exact date and time (Central), even outside Dave's
normal availability; it keeps the appointment's length. Booking is now anchored to Central time,
so picking a day books that day (an earlier bug scheduled it a day late) and past days are no
longer offered.
Dave's reminders: Dave automatically gets a text and email about each booked appointment,
one 24 hours before and one at 8am the day of, so nothing slips. (An owner setting turns this on.)
Booking a Virtual appointment no longer shows a false "Could not book the appointment"
error (it was actually booking fine underneath). The calendar also blocks a duplicate booking
for the same lead and time slot, so a lead can no longer end up with a "phantom" cancelled
appointment sitting next to a live one - the win-back engine will not alert or enroll a lead
who still has a booked appointment, and the calendar hides a cancelled row that has a live
booked twin.
The "Appointment needs a status" notification now names the appointment's actual date and time
in Central (for example "Thu, Jul 9, 7:00 PM CT") instead of the vague "more than 3 hours ago",
so a nudge about an older appointment is easy to find in the scheduler.
On a phone, the book event window now fits the screen (a centered card that scrolls inside
itself) instead of running off the edge; on desktop it stays draggable and resizable.
Appointment popups on the calendar now correctly show the customer's name and their booking
notes for appointments made through the website or the dashboard (older popups sometimes showed
"Unknown"). Behind the scenes, the calendar matches an appointment back to its lead by lead id,
by contact id, or, as a last resort, by a unique name match, so the right details show up
even for older appointments.
Tip: Only open times are offered (never a slot that overlaps another appointment or Dave's time off). Phone consultations can be booked as soon as 1 hour out; in-house appointments need a 2-hour runway so Dave has time to plan travel. This applies to both the website's own booking form and the dashboard's Book-event window.
Dave's availability (the source of truth)
The Dave's availability tab is where you set when Dave can be booked, and it is the single
source of truth for the times the Book appointment window offers. Edits show up in booking
instantly.
- Weekly hours - click Edit hours to set each day's open/closed and start/end time, then Save.
- Block days off - pick a start and end date (leave the second empty for a single day) to block a whole stretch, e.g. a vacation.
- Block a time window - pick a date, a start and end time, and a label (e.g. "Dentist"); that window is removed from the bookable times for that day. Each time block now has its own Timezone picker (Central by default, with Eastern, Mountain, and Pacific). The zone shows on every entry (for example "10:00 AM - 1:30 PM ET"), and booking blocks the correct real hours no matter which zone you picked. Everything else in the calendar is still Central. (The existing PXP26 Orlando blocks were set to Eastern.)
- Everything you set here also pushes to Google Calendar (see below), so time off shows on the shared calendar too.
Where appointments are booked (Google Calendar)
Booked appointments are created on the connected Google calendar and show back on this
dashboard calendar. Every sales appointment automatically invites Dave and, when the
lead has an email on file, the customer - both get the calendar invite. An admin connects
the Google account once from Dave's availability > Connect Google Calendar.
Phone, Virtual, and In-house appointments
When you book an appointment, the booking modal asks you to choose a Host and a
meeting Type. As explained above, color on the calendar now comes from the host; the
type shows as a lighter or darker shade of that host's color, plus its own icon:
| Type | Shade | Icon | Buffer reserved |
| Phone | Lightest | Phone | 1 hour blocked after the appointment |
| Virtual | Medium | Video camera | Auto-creates a Google Meet link on the invite (new bookings; older ones used Zoom) |
| In-house | Darkest | House | 2 hours blocked after the appointment |
The buffer time is reserved automatically so that slot cannot be double-booked.
For example, a 30-minute phone appointment at 10:00 AM blocks the calendar until
11:00 AM. An in-house appointment at the same time would block until noon.
To change the type on an existing appointment, click it on the calendar, then
click Reschedule and adjust the type in the booking modal.
This buffer is separate from the minimum lead time mentioned in the tip above: the buffer table
above blocks calendar time after a booked appointment, while the 1-hour / 2-hour lead time
controls how soon before the appointment you're allowed to book it in the first place.
Booking confirmation text
The confirmation text is optional. Booking an appointment in the customer window has a
Text the customer a confirmation checkbox, ticked by default. Untick it when you have just
agreed the time with them on the phone, where an automatic "you're all set" text reads as though
nobody was listening. The appointment is still booked and the calendar invite still goes out
either way.
When an appointment is booked, whether from the website or from the dashboard, the customer can
automatically receive a confirmation text from the SPM number. It includes the date and time, a
a request to text a photo of last month's electric bill before the appointment, and a
"Reply YES to confirm" ask. The wording changed on purpose: it used to say "have it handy", which
meant we first saw the bill when the call started, far too late to prepare anything. It now says
why, that Dave builds the numbers from it and that takes time. If they reply,
it lands right in your dashboard inbox like any other text. A confirmation text, plus 24-hour
and 2-hour reminder texts, also go out for Virtual appointments, and they include the
video join link (a Google Meet link on new bookings). The Google Calendar event and the calendar
event popup show the same video meeting details.
Off by default: This is a safe dry-run until an admin turns on the
server setting BOOKING_CONFIRMATION_SMS_ENABLED. While it is off, the dashboard
logs what it would have sent but does not actually text the customer. Opt-outs are always
respected - if a customer has replied STOP, they will never get a confirmation text.
The "Electric bill received" switch. The lead panel has an Electric bill received
switch. Turn it on once a customer has sent their bill, and the booking confirmation, the 24 hour
reminder and the morning-after nudge all stop asking for it. Use it when they sent the bill
somewhere the dashboard cannot see, such as a personal email or over the phone, so the automated
texts do not keep pestering a customer who has already handed it over.
Customers can upload their own bill from the booking link. The "You're booked" confirmation
card now has an upload button. When the customer attaches their electric bill there (a JPG, PNG,
HEIC photo, or a PDF), it lands in the lead's Documents tab as a utility-bill, flips the
Electric bill received toggle on automatically, and stops the bill-reminder texts - so a
customer who does it themselves is never chased for it again.
The "Satellite imagery obtained" toggle. Next to Electric bill received is a
Satellite imagery obtained toggle. It is a plain tracking flag for when you have usable roof
imagery for a customer - handy on a new build where Google Maps has no satellite view yet and the
rep pulls the imagery from NearMap afterward. It only records that the imagery exists; it does not
do anything else.
The opt-out line ("Reply STOP to opt out") is disclosed only once per contact. It is
enforced automatically wherever a text goes out - rep texts (once per lead) and Ops texts like
post-install/review messages (once per phone number) - so an automated message never repeats
the line if an earlier message already included it.
Comms (team chat, direct messages)
Search every conversation at once
A search box sits above the tabs. Type two or more characters and it searches Team
Comms, your own direct messages, and customer text threads together, newest first, with each
result labelled Team Comms, Direct, or Customer so you can see where it came
from. Click Clear to close the results.
One box rather than one per tab, because the whole reason you are searching is usually
that you do not remember which conversation it was in. Searching three times and still missing the
one you were not thinking of is the problem, not the solution.
A Customer result is clickable and opens that customer's thread on their lead. Team and
direct results are shown in place and are not clickable: jumping to and highlighting one message
inside a long chat is a bigger change than search itself, and a row that looks clickable and does
nothing is worse than one that plainly does not.
Your DMs stay yours: the search only ever returns
direct messages you sent or received. It cannot show you anyone else's.
Direct (one-to-one messages)
Direct is private one-to-one messaging between staff, with profile pictures, unread badges,
attachments, voice notes and threaded replies.
Below the staff list there is now a Customers heading listing your recent customer text
threads, newest first, with the same unread badge. Click one and it opens that customer's real
conversation on their lead.
They are links, not chats you can type into here, and that is deliberate. A customer
conversation carries its own send path, opt-out rules, photo handling and AI hand-off state.
Rebuilding all of that inside this pane would create a second, weaker copy of the lead's thread,
and the first time the two disagreed it would be about whether a text actually sent. Clicking a
customer takes you to the one real thread instead.
Team Comms (team chat)
Team Comms (renamed from "Comms", and "Team Messages" before that) is where the SPM team
communicates. The only other tab here is Direct (above); recorded meetings moved to their
own Meetings Archive page (see the Meetings section below). The customer
text Inbox that used to be a tab here now lives on
the Leads page instead. The chat is for talking
to coworkers about leads or the day's work - it is not where you text clients (to text a client,
open the lead and click the Comms button). Inside the chat, the page heading reads
Command Comms.
Private group channels
A channel switcher sits above the team chat: Main (the shared team chat) plus any
private channel you belong to. Private channels are members-only and enforced at the
database (row-level security), so a non-member cannot see a private channel even through the API.
The first private channel, Awesome Ai Integration (Austin, Dave, Priscilla), is already
set up. The shared team chat is unchanged, and the switcher is hidden for anyone who is not in any
private channel.
Reactions, replies, attachments, and images
Hover a message to bring up its action buttons, now on the right side of the message:
reply, react (a tapback), copy the message text to your clipboard, an
AI button (the sparkle), and delete (for your own messages). The AI button
reads the message, pulls out any action items, and lets you add each one to Executive Overview as a
Tasker or a Seed in one tap. You can attach more
than one file or image at once - the text sends with the first file and each extra file
posts as its own message. Tapping an image opens it full-size in an in-app viewer
(click the backdrop, the X, or press Esc to close) instead of opening a new browser tab.
The chat shows read receipts, iMessage-style: a "Seen by <names>" line appears under
your most recent message once teammates have opened the chat and read past it. Reactions you add
show larger and bolder on the corner of a message, and the reaction picker opens toward the
message so it is never cut off at the edge of the screen.
File attachments now show a colored type badge in a tighter message bubble, so you can
tell the file type at a glance — red for PDFs, blue for Word docs.
Word documents (.docx) also preview inline in that same in-app viewer — they open
right in the dashboard like images and PDFs, rendered privately in your browser. Other file
types still show a download card.
A few small touches make the chat easier to read: consecutive messages from the same person
are grouped closer together, a glass style toolbar appears for reply/react, and the message
list fades at the top as it scrolls. On mobile, the action buttons now appear just above
the message bubble (so they are no longer cut off at the screen edge), and the Download
button is more prominent. A shared file's Save to a record button now files it against
either an Ops customer or an Leads pipeline lead (pick the tab, then search the
lead by name or phone); when you save to an Leads lead, the Document Type choices match the
lead document categories (Utility bill, Contract, Proposal, ID / Ownership, Photos, Design, Shade Report, Other). The
chat background also has a larger, slowly drifting SPM emblem and subtle blue particles that
react to your cursor (this motion turns off automatically if your device has reduced motion
turned on).
Long messages
A very long message collapses to about six lines with a Show more link, so a
big pasted note no longer takes over the chat. Click Show more to read it all,
and Show less to fold it back up.
Unsend your own message
Hover over a message you sent and click the small trash icon to unsend it. It is
removed for everyone and replaced with a quiet "You unsent a message" line. You can only
unsend your own messages.
Voice notes
Analyze on uploaded audio works now. An uploaded audio file (the .m4a a phone produces)
could never be transcribed: it was handed to the transcription service under the wrong name and
rejected every time. Recorded voice notes happened to work, which is why it looked intermittent.
If an analyze does fail now, the reason appears under the button instead of the button quietly
reverting to a link.
There is also a Copy transcript button next to Show/Hide transcript. It copies the whole
thing whether or not the transcript is open, and says so if the copy is blocked rather than doing
nothing.
When someone records a voice note in the chat, two things happen on their own, with no
button to press:
- The transcript (the words that were said) appears automatically.
- An AI summary and action items appear automatically underneath the transcript.
For each action item the AI found, you get an Implement button. That is the only
part that waits for you to click. If the AI can carry the task out inside the dashboard,
Implement does it. Voice notes and their AI summaries no longer get cut off on mobile.
Research with AI (fail-safe) and approving a plan
If an action item is something the dashboard cannot do on its own, you will see a
Research with AI button instead. Click it and the AI looks the question up,
answers it, and posts a short summary right in the chat (with tax/legal cautions where
they matter). It also proposes how to put it into action.
Under that proposal are two buttons:
- Approve - saves the finding as a task in your Executive Overview to-do
list (with the full answer kept as its details).
- Disapprove - dismisses it, and nothing is saved.
Meetings (the Meetings Archive)
Recorded meetings are now one page of their own, reached from the left-nav War Room
flyout as Meetings Archive. It used to be a Comms sub-tab called "War Room", later split
into separate Team and Client lists; team and customer meetings now share a single page.
Comms itself no longer holds a meetings tab - it is just Team chat and Direct. The red
Join War Room button at the top of the menu is a different thing and has not moved: it jumps
into Dave's live video room (a Google Meet room now).
Filters sort the one list. In-page controls let you filter by Team / Customer / All,
by source (Google Meet / Zoom / All), and sort Newest / Oldest, with 20 per
page. An old deep link to the team or customer list still lands pre-filtered to that view.
Zoom is being wound down. Meetings now run on Google Meet, so
new Zoom recordings are no longer pulled in. Every past Zoom meeting, transcript and
summary stays right here, unchanged. The Sync from Zoom button is now labelled as
temporary, for the wind-down only.
Google Meet recordings sync in. A Sync from Google Meet button (plus an automatic
check every 6 hours) reads the account's Meet Recordings folder in Google Drive,
transcribes each recording, and posts it to the meetings list with a summary - the same way Zoom
recordings used to arrive. This needs a one-time Google reconnect to grant Drive read
access.
Meetings get an AI-written title and subtitle. Instead of the generic "War Room Meeting",
each meeting now gets a context-relevant title and subtitle generated from its notes. New meetings
get one on sync; older meetings are filled in retroactively a few at a time when you click
Sync from Google Meet (or automatically on the 6-hourly sync).
When a past meeting was cloud-recorded, AssemblyAI transcribed it and Claude wrote the
summary and follow-up action items automatically as soon as the recording ended, with no
manual click, and long meetings no longer time out or fail. Speakers are labeled with their real
names in the transcript, and a recap is posted into the Comms chat. If a transcript or summary ever
fails to generate, click Retry generation to re-fetch it. The recurring room displays as
War Room: Crush - Dominate - Kill. Each card has:
At the top of the War Room, a Scheduled Meetings section lists your upcoming team
meetings: the recurring Daily Alignment Meeting (10:30 AM CT every day, with the next
occurrence shown) and the four quarterly 13-Week strategic planning sessions (the same
dates as the 13-Week Planning section in Executive Overview). Each has its own Join button
into the team Zoom room.
Every meeting in this list expands into an accordion where you can edit its title, date
(for one-time meetings), time, and length, and manage an editable talking-points list (add,
check off, edit, or remove a point). Edits here flow straight into the Calendar
calendar, since both read the same meetings table. Click + Add meeting to create a
custom one-time meeting (title, date, time, and length), and use Delete meeting inside a
meeting's accordion to remove it. The Daily meeting cannot be deleted, only edited; a deleted
meeting stays gone and will not auto-regenerate.
- Watch video - plays the archived copy from Google Drive right inside the
dashboard, so recordings keep working even after the Zoom account is deleted (it used to
play from Zoom). For a Google Meet recording, Watch video opens a native player
with a live transcript side panel: click any transcript line to jump the video to that
moment, and the part playing now highlights and auto-scrolls as it goes (approximate, about
8-9 seconds' resolution, from the transcript timestamps). Zoom recordings keep the previous
embedded player.
- Archive / delete - hides the meeting from the list; the wording now makes clear the
Google Drive copy is untouched. Use Show archived to see or restore archived
meetings.
Where the recordings are archived. Meeting recordings are archived in Google Drive,
in the TEIG shared drive under SPM Zoom Archive, split into Sales calls with
customers, Team meetings, and Unsorted. Everyone in the SPM Workspace can watch
them.
Meeting subtitles. A few meetings had been labelled from the first minute of small talk
rather than the meeting itself (one long working session read as a family catch-up). Those are
corrected, and new subtitles are written from the summary.
Sensitive numbers are masked. Meeting and call transcripts now hide spoken card, bank
routing and account numbers, and spoken passwords, showing something like
"[redacted 16-digit number]" instead. This applies to new transcripts and the existing ones have
been cleaned up. Ordinary numbers (system sizes, prices, dates, phone numbers) are left alone.
Screen clips. A short screen recording is now called a screen clip (it was "Zoom
clip") because clips upload to Google Drive now. Record one from Team chat, drop it into an
email as a clickable thumbnail, and see it on a lead. Removing a clip from a lead notes that the
file itself stays in Drive.
Each card's title is now larger, with an AI-written one-line subtitle underneath it,
so you can tell what a meeting was about at a glance. Click a card's title or date to open
its War Room Debrief - the full recap and transcript.
Google Meet debriefs read as organized sections. A Google Meet meeting's Gemini notes now
render as collapsible sections (Summary, Decisions, Suggested next steps, and so on) with
titles, icons, and bullet lists, instead of one long block, and Meet meetings now generate
action items from those notes. A Copy notes button sits on the Gemini notes block.
The transcript is its own section. The full verbatim transcript now lives in its own
collapsible Transcript dropdown (no longer mixed into Details or hidden behind an inline
show/hide toggle), shown untruncated in a scrollable, height-capped box with a Copy
transcript button.
Action items and the Seeds List (inside the Debrief)
Open a meeting's War Room Debrief and you will see an Action items card (renamed from
"Follow-ups"), highlighted in its own accent-colored box. It always shows, even when there is
nothing in it yet, so both meetings look consistent. Each item carries a color-coded priority
(high, medium, or low), a checkbox to mark it complete, and its own
+ Taskers button, which copies that item straight into your Executive Overview Taskers list.
Checking an item off strikes it through and dims it, and that completed state is saved, so it
still shows done the next time you open the debrief.
Below Action items, when the meeting raised ideas that are not action items yet, a separate
Seeds List appears. The meeting AI pulls these out automatically while it writes the
recap. Each one has its own + Seeds button that plants it into the Executive Overview Seeds
area (see below) so it is not lost, even though nobody is ready to act on it yet.
A Summary format box lets you edit the instructions the AI uses to write the recap
— change it once and it is remembered for future meetings too.
A search box at the top of the War Room page finds a past meeting by topic or by
words that were actually spoken in it.
Every meeting card with a transcript also has an Ask this meeting box. Type a
question, or tap the microphone and speak it, and the AI answers using only that
meeting's transcript — it does not pull from anywhere else, so the answer
reflects what was actually said. Each question and answer stacks up as an inline
Q&A list on the card and now saves permanently, and each Q&A has its own
delete button, so you can check "what did we decide about X?" without replaying
the recording.
Use the Refresh button (top right) if a brand-new meeting has not appeared yet;
meetings also update on their own as they finish processing. The War Room tab no longer
breaks on mobile.
A Sync from Zoom button pulls recent recordings straight from the Zoom API and brings in
any that the webhook missed, then refreshes the list. It is now a temporary, wind-down-only
button: meetings run on Google Meet going forward, so this exists only to pull in the last of the
old Zoom recordings. Its summary generates in the background afterward.
Automation, Slack, and the AI bot
The texting and booking bot is now called Betty Bot. The name shows across the dashboard UI:
the Follow-Up Engine panel, the Betty Bot Sandbox, the Betty Bot Brain, and the
per-lead AI-reply switch. On a bot-sent text, a Betty avatar now shows in the conversation
thread in place of the old robot emoji. This is an internal renaming only: nothing customer-facing
changed, and where this guide still says "the AI bot" or "the AI booking bot" it means Betty Bot.
Slack notifications (outbound)
Signal-worthy dashboard notifications - bookings, new leads, and Ops/install events, not every
text - also post to your Slack channel. This needs a one-time setup by the owner: add
SLACK_WEBHOOK_URL (from Slack > Incoming Webhooks, pointed at a channel) into
the dashboard's environment. Until that is set, nothing posts to Slack. A full two-way
installer chat inside Slack is a future add, not available yet.
Follow-up Engine (reactivation automation)
The Follow-up Engine panel (part of the automated sequence/reactivation system described in
the lead window section above) has a few team-facing tools of its own:
- Bot knowledge (SPM Bot Brain) - a collapsible editor, under the AI booking bot
toggle, holding one editable document that the AI bot and the AI text-draft tool read as
their only source of facts. It pre-fills a starter doc with verified 2026 incentive facts
when it is empty.
- Homeowner photo survey + reward - a customer can be sent a guided photo-capture link,
and an optional reward can be switched on per job here (a toggle plus a dollar amount).
The reward is off until an owner turns it on, so it never pays out by accident.
- A/B message variants - in the "Reactivation performance" area, add alternate copy
for a given touch (for example solar#0); the engine rotates between two or more active
variants and a per-variant reply-rate table shows which one is working better. This needs
a one-time setup by the owner before it saves.
- Recover missed inbound messages - a one-time button that backfills inbound texts
and pictures Twilio received during a webhook outage (it only needs to be run once; running
it again is safe and will not create duplicates or send anything to the customer). It
re-links any messages and photos that had landed as "unknown number" back to the right
lead.
- Inbound texts and pictures now link to the correct lead even when duplicate leads share the
same phone number (it picks the most recently active one; calls still match strictly, with
no guessing).
- A hands-off booking - the AI bot or a customer self-serve link - fires a "New appointment
booked" notification. Clicking it jumps the Calendar to that appointment (day view)
and pulses it with a glow ring until you click the appointment. A rep-booked appointment
does not send this notification, since the rep already knows.
Bot version history (in the Bot Sandbox)
The Bot Sandbox now opens with a Bot version history panel. Every time someone saves
the Bot Brain, it logs itself automatically (who saved it, when, and how much changed), and
code-side bot upgrades are listed alongside those saves, newest first, with the date and time of
the last change. It is a plain record of how the bot has been changed over time, so nobody has to
guess whether a recent edit went in.
What the AI booking bot will and will not say
The bot answers inbound texts and books consults. What it is allowed to say is set by the
Bot Brain document above, so a change there takes effect everywhere without a code
deploy.
- It knows where the customer already is. It reads their pipeline stage, so it stops
pitching a first consult to someone who has already met Dave or already has a proposal. If a
customer mentions a proposal or a past visit that their stage does not reflect, it believes the
customer, drops the new-lead questions, and flags the stale stage for a human.
- Existing customers are handled differently from prospects. Someone who already owns solar
is not offered appointment slots; they are offered a callback from Dave. Someone who only wants
their existing system looked at is routed to service instead of being sold a consult. If a
customer says SPM installed their system, they move to Won automatically with an audit note
quoting what they said.
- It introduces itself once, at the start, and does not re-introduce itself mid-thread or
repeat "Hey <name>" on every message.
- It replies to a plain "Yes". This is worth stating because it did not for a while:
"YES" was being treated as a texting opt-in keyword, so a customer answering an ordinary
question was mistaken for a compliance keyword and the whole conversation went silent. A one-word
Yes is now just an answer. START and UNSTOP are still handled as opt-in keywords.
- If its AI model is briefly unavailable it falls back to another model rather than going
quiet. Going quiet used to mute a customer permanently.
- It answers "do you sell or lease" directly. Questions about how SPM operates get a
straight answer rather than a deflection, because dodging a plain question costs trust. It
explains that SPM sells owned systems only, and gives a real reason (an owned system counts
toward the home's value and transfers with the house, a lease has to be assumed by the buyer
or bought out first). It never calls a lease a scam or a competitor dishonest.
- Price questions still get no number, but it now explains why instead of saying "it
depends": the cost is driven by how much electricity the home actually uses, that is what
sets how many panels are needed, and so the range is wide. "The range is wide" is as specific
as it may ever get.
- It offers times as open slots and asks to hold one ("We've got Tuesday at 10 or
Wednesday at 11 still open. Want me to hold one for you?"), rather than asking someone to
commit to a consult. It may only say a slot is "still open" because that is literally true of
the calendar. Manufactured urgency, "spots are going fast", deadlines and countdowns are
banned outright.
- It aims for the next 72 hours. If someone asks for a date further out and gives no
reason, it makes one gentle attempt at a sooner time and then accepts their answer. If they
give any real reason, it takes it at face value and works around it.
- It never ends with a hollow sign-off. "Anything else I can help with?" invites a no
and kills the thread. When there is nothing left to sell, it turns to people they know
instead. An existing SPM customer is told about the $150 referral thank-you; someone
whose system we did not install is only asked whether anyone comes to mind, because that
money is a promise to our own customers.
- It can move an appointment a customer already has. If they say a time does not work and
name one of the offered times, it reschedules and confirms. It still refuses to double-book,
and an outright cancellation still goes to a human.
- It answers customers who have already booked. Before this, the moment someone booked,
the bot stopped reading their texts entirely, so a customer writing in to move their time got
silence. This is also what made rescheduling work at all, since only booked customers can
reschedule.
- Escalation alerts say who. They used to read "A lead needs a human in the SPM inbox",
which meant opening the dashboard and hunting for the changed conversation. They now name the
customer and their number. The customer's actual message is deliberately left out; that lives
in the thread.
- It does not ask something the customer already told it. Asking a customer to repeat
themselves reads as not listening, and it was doing it: one customer said he was looking into
solar because of power outages, and the next question asked whether he was looking into solar
because of power outages.
- If its own safety check rejects a draft, it rewrites once before handing to a human.
The bot checks its own reply before sending, and a rejected draft used to go straight to
escalation. That is what silenced several conversations that needed nothing more than a
better-phrased sentence: over one 30-day stretch, 7 of 23 escalations were the bot blocking
itself.
- Its close is softer. "Can you do 20 minutes with him this week?" asks for a commitment
before the customer has said the problem matters. It now asks whether something would be
helpful and follows the answer with "why do you feel that way though?", which invites them to
make their own case rather than defending against yours.
- It establishes who did any prior work before ever asking for a referral. For windows,
siding, doors, solar, roofing or batteries, it works out who did the job first. If
another company did it, it does not ask for a referral. If it does not know, it asks plainly:
"did we do those for you, or was that another company?" The $150 referral thank-you is a
promise to our own customers, so it never offers it to somebody whose work SPM did not do.
- It introduces the SPM Reputation app in stages, and stops if they cool off. It goes
person first, then whether earning a little money interests them, then the app itself, then a
username, and it stops climbing the moment the customer goes lukewarm rather than pushing.
- It does not run discovery on a decided buyer. When a lead names specific equipment or a
system they already want, the bot stops re-asking questions they have already answered or
clearly implied, and drops a Product interest (customer's own words) note on the lead
so Dave sees the spec before the consult.
- It always offers at least two specific times. When it proposes or reschedules a consult,
it gives at least two specific times, never a single take-it-or-leave-it slot. If the
customer asks for "next week" or "later", it shifts the offered times into that window rather
than skipping valid earlier-in-the-week days like Monday.
- It will not invent a service or partner it cannot confirm. It no longer claims SPM offers
a service or an outside partner it cannot back up from its facts. It says what SPM does and
hands the rest to Dave instead of inventing a yes.
- Roofing questions get a vague, honest answer. Rather than deferring entirely, it says SPM
has roofers it works with and can connect the customer depending on the project details, with
Dave handling that side. It will not name a specific roofer, quote a roof price, or promise a
call.
Service requests name whose install it is. When a service request is
texted to Operations, the alert now says OUR install, ANOTHER COMPANY installed it,
confirm before promising work, or Installer UNKNOWN, ask before promising work. Before,
it just said "an existing solar customer", which reads as ours, and agreeing to service another
company's system means taking on their mounting and roof penetrations.
Turning AI replies off and back on for one customer
Every lead has an AI replies switch. Turn it off to take a conversation over yourself; the
customer's follow-up sequence keeps running either way.
Turning it back on now also answers whatever came in while it was off. If the newest
message on that lead is from the customer, the bot picks it up and replies. If a human already
answered, nothing happens.
Why this needed fixing: the bot only ever acted the
moment a text arrived. A customer who replied while the switch was off had already been passed
over, and nothing looked at their message again, so the switch could read "AI replies are on"
above a message that was never going to be answered. One customer answered "Sure" to a meeting
and sat unanswered while the switch showed on.
The first text now waits a few minutes
When a new lead comes in from the website, the first text is sent about 3 minutes later
rather than instantly, so nobody gets a text while they are still filling in the form. The
follow-up engine now runs every 2 minutes, so the first text lands about 4 minutes after
the lead arrives and never later than 5, which is the speed-to-lead standard we hold ourselves to.
It used to run every 5 minutes, which meant a lead could sit for 8 minutes in the worst case
purely because it just missed a run. The 3 minute wait was left alone deliberately: shortening
that is what would text somebody mid-form.
Out-of-area leads (the service-area gate)
The service-area gate now covers website and Fixr lead intake too, not just Facebook and
Instagram. A lead outside SPM's Illinois service area (about 90 minutes of Naperville) is still
saved and tagged "out-of-area", but it no longer fires a team alert or the auto-nurture
texts. In-area leads are unchanged, and the gate fails open: if the area cannot be worked
out, a real Illinois lead is never dropped.
Permit Scoring (an Ops view)
Permit Scoring is one of the buttons on the Ops bar (List / Permit Scoring / Armory).
It is a tool for checking how hard a local permit office (AHJ) is to work with, using the
same scores you see on each lead. Each jurisdiction is a card you can expand for the
details behind its score. Clicking a county on the Ops map (see below) jumps here and
opens that county's card automatically.
The whole Permit Difficulty by Jurisdiction panel is now collapsible: click its header
to fold or unfold the county cards. It auto-expands when you click a county on the map, so the
card you just focused is visible right away instead of you needing to scroll and open it by
hand.
The Recruit Demo screen is a guided walkthrough designed for recruiting
conversations. Use it to show a prospective door knocker exactly what happens to a
lead from the first knock all the way through to a closed deal.
It runs entirely on built-in sample data. No real leads or client information are
used, so it is completely safe to open in front of someone outside the company.
How to use it
- Click Recruit Demo in the left sidebar.
- The walkthrough starts on the first step automatically.
- Move through the steps by clicking the Next and Back buttons, or
press the right and left arrow keys on your keyboard.
- On the final screen, you will see an earnings comparison with editable numbers.
Type in figures that match what you want to show the recruit.
Before you show this to anyone: The earnings numbers are
editable on purpose, but they should reflect realistic figures. Lock the numbers with
Dave before using the Recruit Demo in any actual recruiting conversation.
What the walkthrough covers
The walkthrough is now 10 steps, tracing the full lead-to-close-to-SREC money path:
- A rep knocks a door and records a quick voice memo in Intel Capture.
- The app fills in the lead details from the memo.
- The rep picks an open calendar slot and books the appointment.
- The lead moves through the pipeline stages on the board.
- The deal closes ("On record"), and the earnings comparison screen shows what the rep earned.
Three slides were added after "On record" to carry the story past the close, all the way to the SREC payout:
- One click: the contract fills itself in automatically from the lead's details.
- The whole job: a lifecycle tracker follows the job from signed contract all the way to switched-on.
- The bonus: an editable Illinois SREC calculator that uses the real current Illinois Shines block price (ComEd Small DG, $80.77 per REC, plus the $20 customer-owned adder, Program Year 2026-27) to show the per-deal SREC dollars.
All of it, including the three new slides, runs on local sample data only.
Intel Capture (mobile door-knocker app)
Intel Capture (formerly "Field Tool") lives as a sub-tab at the top of the
Recon screen (it is no longer its own left-menu item). It is a mobile screen built for
door knockers in the field. It lets a rep log a new knock, fill in lead details using a voice
memo, and book a real appointment slot, all from their phone in under two minutes.
The /field tool can be installed to the rep's phone home screen so it opens like a
regular app (no app store needed). Ask your admin for the install steps.
On a phone, the left menu has a big red circle record button at the top. Tapping
it jumps straight to Intel Capture and starts recording immediately, so a rep can log a knock
in one tap.
Setup required: Before anyone can use /field, the admin
must apply the field_knocks database table. Without it, bookings will not go
through.
How a knock works, step by step
- On your phone, open Intel Capture and tap New Intel.
- Tap the microphone and record a short voice memo. Say the homeowner's name,
address, and anything else that matters (for example, "Maria Garcia, 142 Oak
Street, she is interested in a phone call next week").
- Tap stop. The app sends the memo to an AI that reads it and fills in the
lead's name, address, and notes automatically.
- Check the filled-in details. Fix anything that is wrong, then tap
Confirm.
- The app shows only the real open slots on Dave's calendar. Pick one that
works for the homeowner.
- Before you can book, confirm the homeowner agreed to be recorded. This
recording consent is required (Illinois is an all-party-consent state): the
Approve & book / Book it button stays disabled until you confirm it, and the server
also rejects a booking without it. Consent resets between homeowners, so every knock needs
its own confirmation.
- Tap Book. Done.
A do-not-contact (DNC) warning banner appears before you book if the phone number has
opted out of texts (replied STOP) or matches a Lost, Disqualified, or Requested-No-Contact
lead. It is a warning only, not a block - you can still book if the person is asking in person -
but automated follow-up texts stay blocked for opted-out numbers either way.
Didn't get a booking? Tap No booking? Log the knock on the start screen to log it in one
tap: No answer, Not interested, or Callback. The leaderboard below shows a
Door-knock funnel card (Knocks logged → Answered → Booked, plus the
answered-to-booking rate). This needs a one-time setup by the owner before it saves; until then
the log buttons show a friendly "not enabled yet" message and the funnel card stays hidden.
The start screen also has a Turf map that plots every geolocated knock, colored by
outcome (booked green, callback amber, not-interested red, no-answer gray). Your location is
captured best-effort when you book or log a knock, only if your browser allows it - a knock
without a location just does not appear on the map, nothing else breaks. A Pins / Coverage
toggle switches between the outcome pins and a coverage heatmap (how dense the knocks are), so
you can see which turf has been worked and which has been left untouched.
What happens after you book
- A lead is created for the homeowner (or their existing lead is matched by phone).
- The appointment is added to Dave's calendar.
- The homeowner is texted their confirmation. This used to come from a GoHighLevel
workflow, so between retiring GHL and 2 August 2026 a door-knock booking was the only kind
that sent the customer nothing at all. It now confirms like every other booking.
- The lead is tagged appointment-booked and moved to the Appointment Booked stage.
- The knock is saved to the dashboard so it is not lost if you lose signal.
Below the knock screen is a team Leaderboard and Recent activity feed. A single
Clear leaderboard & activity button wipes both (it asks you to confirm first, and it
cannot be undone).
No signal? The app saves your knock locally first, then
syncs when you are back online. Do not close the app until you see "Saved" on
screen.
Recon
The Recon tab (formerly "Canvassing", and "Market Domination" before that) is the
door-knocker command center. It opens on its Ground War sub-tab (formerly called
"Canvassing"), which gives the team a single place to track canvassing performance, manage
field leads, and access the tactical playbook - its sub-views are described below. Recon also
holds Intel Capture and Import Intel as sub-tabs. The War Map used to be
one of Ground War's sub-views too; it has since moved out to its own left-nav item (see the
menu table above and the War Map section below), so you no longer switch to it as a tab inside
Recon.
Real vs. demo: The real dashboard shows only real data. The
live sub-tabs are HVT and Tactical. KPI
and Wins also appear but are zeroed out (full layout, no numbers) until field
and sales data are connected. The sample-only tabs and pins live in the separate demo
version of the dashboard, so nothing you see here is made up.
KPI
Shows the activity and conversion numbers for the door-knocking operation (this tab was
renamed from "Door Knocker"). Key metrics include doors knocked, appointments set, close
rate, and revenue per hour. Use the toggle at the top to switch the time window between
Daily, Weekly, Monthly, and YTD (year to date). In the real
dashboard this is present but zeroed out until field data is connected.
Wins
A per-rep scorecard (this tab was renamed from "Salesperson", then "Scoreboard").
Shows each door knocker's numbers side by side so you can
see who is performing and where coaching is needed. Click any column header to
sort by that stat. In the real dashboard this is present but zeroed out until sales
data is connected.
Lead Intake
The field lead form and a status pipeline that tracks every field lead so nothing
falls through the cracks (a "no lead dies" rule). This tab appears in the demo
version only.
War Map
War Map is a top-level menu item now (its own group in the left rail), not a sub-tab inside
Ground War. It is a map plus a list of target neighborhoods (this tab was renamed from
"Territories"), with utility flags (which provider serves the area) and opportunity flags (how
promising it is for solar).
The address / customer search bar now sits in a prominent, accentuated bar at the
top-center of the map (it used to be tucked in the left toolbar column). Search an address
and the pin for it is now much larger and pulses, so it stands out from the orange cluster
bubbles instead of disappearing among them.
On the map:
- Your existing customers show as house pins, colored by type:
purple = commercial, green = residential. A gold ring means a referral target.
A customer pin now also says which company installed the job (SPM or RR365), instead of
only the trade. And a household that is both an Illinois Energy record and a customer no longer
shows two overlapping dots: the customer pin wins.
- Pipeline leads show as colored dots (hot / warm / cold); the single hottest lead
wears a HOT LEAD badge and is always visible. The Leads legend also has nested
source chips, a parent (Knocked / Internet) with child sub-sources underneath, so you can
filter which leads show on the map by where they came from, matching the Kanban filter
chips described in the Leads board section above.
- Owner pins (your business locations) show as a blue house-pin icon.
- When lots of pins sit close together they group into a numbered cluster bubble;
zoom in (or click the bubble) to split them apart. This keeps the map fast to pan and zoom.
- Click the Sync map pins refresh icon once to load your customers onto the map (it
spins while it works).
- Like every map in the dashboard, it is a smooth 3D globe with a
Street / Satellite / Hybrid switcher on the map.
Clicking any pin opens a redesigned popup card: it fades in, sits directly above
the pin with a small downward tail pointing at it (so it is clearly tied to that pin), and fades
out when you close it. It shows the address and the key details for that pin, and applies to
every pin type - leads, customers, reviews, owner locations, and high-value targets.
A Labels toolbar sits near the map. Its labels (a Knockbase-style set like
Banger, Hot Prospect, Not Home, Renter, and more) are laid out in
two columns with large, glossy gradient icons. Pick a label, then click any
spot on the map to drop a colored pin there. Pins are saved and stay put the next time you
open the map. Click a label's eye icon to show or hide just that label's pins. Edit label
set lets you add, rename, recolor, or delete labels. Click an existing pin to relabel it,
add a note, or delete it.
The top of the Labels toolbar (From your CRM) lists the read-only groups already on the map:
Customers, Leads and Reviews, each with a live count and an eye icon.
These brand chips now really filter the pins. Before, clicking a chip only changed which
Illinois Energy layer showed, and every customer pin stayed on screen no matter what you picked.
Now the Customers group splits by brand, the same way Leads splits into Knocked and Internet:
- SPM: Solar Power Midwest customers.
- Illinois Energy (brown accent): two kinds of household under one label. First,
the Renovate Right 365 window, siding and door customers. RR365 is no longer its own
brand chip: those customers now show here, in the brown accent that used to be RR365's color.
Second, the 5,390 windows/siding/doors households from the company Dave founded and sold in
September 2019 (jobs dating 2005 to 2019). Zoom in past town level to load the historical ones;
the chip says "(zoom in)" until you do.
Illinois Energy pins are grey on purpose, not gold like a customer. Grey means
not cleared for outreach. Nobody at SPM has ever spoken to these people, and two questions are
still open on the list: the phone/text consent from that era has long expired, and the agreement under
which Dave sold the company may restrict approaching them at all — which would apply to a letter
or a doorstep just as much as a call. Look at them, plan with them, but do not contact them
until they are cleared. A pin turns green once it is. The install year shows under each pin when you
zoom right in, because a 2018 job is a very different conversation at the door than a 2006 one.
A Layers box (a collapsible accordion - tap "Layers" to open or close it) gathers the
map's overlays: AHJ, Parcels, Businesses, Owner pins, and
High-value targets. The check box at the top of the box turns every layer on or off at
once, and each still toggles on its own. On desktop the box sits at the top of the map, just
left of the full-screen button; on mobile it sits in the lower-left corner and opens upward.
A blue labeled Hide icons / Show icons pill, centered along the bottom of the map, hides
or shows the map's pins so you can see the streets underneath.
The High-value targets layer pins your dairy-farm and manufacturer prospects (indigo
pins with a farm or factory icon). Turn it on in the Layers box, then click Geocode
prospects once to place them on the map (approximate, by business name + city). Click a pin
for its popup: business name, a Farm or Manufacturer badge, street address, owner, phone, and
email (anything missing is labeled "Not on file"), plus an estimated kW system-size range,
an estimated monthly electric bill, and any permits on file. Those last three come
from editable fields on each prospect (Usable roof sq ft, Est. monthly bill, Permits); anything
left blank shows "Not gathered".
On the Street base map, business labels are clickable. Click one to open a research
card with the business's name, address, phone, website, and rating, plus a Generate solar
prospect brief button that writes an AI commercial/ag solar assessment in SPM's voice. A
Find businesses near here button, in the address-search pin and in label pins, scans
that spot on demand for the best-fit commercial, industrial, or agricultural prospects nearby
and drops clickable business pins on the map.
The city-targets (AHJ) score-card section is a collapsible accordion - click City
targets to fold it away and give the map more room, or open it again to browse the cards.
Each city card also has a Why this score accordion. Open it to see the reasoning
behind every part of the score — utility, home value and age, solar, battery, EEP,
HVAC, storm/hail, and nearby commercial — with links to the methodology sources
(NREL PVWatts, Illinois Shines, ComEd net metering, and NOAA Storm Events), so you can
explain exactly why a town ranks where it does.
In the demo version the map shows fictional sample pins only (no real customers or leads),
and the Sync button is hidden.
Route planner (plan a driving day on the map)
The War Map has a built-in route planner for planning a driving day: set a start and an
end, and it draws the actual driving route with its drive time and distance, then shows
you who is worth stopping for along the way.
- Set point A and point B. Type an address into each box, or type the name of an
existing lead or customer to route to their pin. Add optional intermediate stops
between A and B and the route redraws through them in order. A route can be saved
(it is named "From [A] to [B]") and comes back the next time you open the map; saved
routes are shared with the team, and you can rename or delete them.
- Type "hq" in any box (A, B, or a stop) to drop that point at SPM headquarters,
2423 Durango Ln, Naperville. HQ also shows on the map as a permanent, always-visible
SPM-logo HQ pin, so a route that starts or ends at the office is one keystroke.
- The route survives leaving and coming back. Navigate away to another tab and return,
and your drawn route, its stops, and its badge are still there.
Who to stop for along the way. Once a route is drawn, the planner surfaces the people
worth a visit near it, filtered by an on-the-way distance slider (how far off the route
counts as "on the way"). The slider filters both lists below at once.
- Enroute tasks. Leads and customers within the on-the-way distance are highlighted
along the route, each with a suggested action: for a lead, knock or drop in; for a
customer, ask for a referral or a Google review. They are listed in a
collapsible accordion. The glowing halos along the route are colored by brand so
you can tell them apart at a glance: SPM customers show blue/green, Illinois Energy
customers show purple/brown, and leads keep the age colors (green for new, yellow
and orange as they age, red for aged). The task-list dots match those halo colors.
- Suggested stops. A separate collapsible flyout in the top-right corner ranks
the highest-value nearby leads and customers within the on-the-way distance. Hover one
and its pin pulses on the map in neon cyan so you can find it; click Add stop to
drop it into the route as an intermediate stop.
Working the map itself.
- Open a detail card right on the map. Click a route pin (A, B, or a stop) or a
green/purple enroute circle and that lead's or customer's detail card opens on the
map, so you do not jump out to the pipeline. This works even when the Leads or Customers
eye toggle is switched off. Route pins also zoom on hover.
- Street View along the route. Click anywhere along the drawn route and Google
Street View of that exact spot opens in a modal on the map (rotate, look up and
down, zoom), with an Open in Google Maps link, so you can eyeball a house or a block
before you drive it.
- Tidy inputs. The A, B, and stop boxes show one address-suggestion dropdown at a
time and close it when you click away, so stale lists never stack up. Removing point
A or B clears the drawn route, its enroute highlights, and the drive-time badge, so
nothing lingers on a deleted endpoint.
- Tidy layout. In a pin popup, the action buttons (View details, Add to
route, Add as destination, Delete) now wrap onto a second line
inside the popup instead of the last one running off the right edge. The Route + enroute
tasks box lines up at the same top as the Labels & Layers box, and
Suggested stops sits directly underneath the route box (it used to sit beside it and
overlap the center search bar).
Tactical
The reference library for door knockers (this tab was renamed from "Playbook"). Contains:
- Door scripts for opening conversations at the door.
- Lead scoring guide using an A/B/C/D system so reps can quickly
rate how interested a homeowner seems.
- Daily scorecard for reps to track their own numbers each shift.
- Draft commission model showing how rep earnings are calculated
(mark as draft; confirm the final numbers with Dave before sharing with reps).
HVT
A targeting board for commercial and agricultural prospects (this tab was renamed from
"Commercial"; built from the DeKalb-area research). Colored tiles show the totals split
into hot / warm / cold, "top targets to call first" appear as cards, and a searchable,
sortable table lists every prospect. Click a row to expand its full detail: product fit,
buying signal, notes, contact info, and source links. A Tactical & guardrails panel
holds the outreach approach and the do-not-cold-call list of national anchors. Click
Load starter prospects once to seed the list.
The prospect list includes a research-verified batch of Illinois targets: cold-storage and
refrigerated warehouses and licensed cannabis cultivation sites (the highest-energy commercial
loads in the state), plus an organic creamery. Each pitch leads with demand-charge control and
resilience through solar-plus-storage. A Check for new targets button, next to
+ Add prospect, pulls any newly researched prospects into your list without touching or
overwriting existing rows or your own edits, and tells you how many were added.
The Anchor targets and Prospect list sections are collapsible —
click a section header to fold it away and keep the page short. Each prospect card shows
the business's phone and email with one-tap Call, Text, and Email
buttons, so you can reach out without leaving the page.
Existing customers are kept out of the targeting list so you never cold-call a
business you have already sold. Those accounts instead appear in an Existing commercial
& ag customers panel, which doubles as a referral engine and a look-alike profile
(the traits that make a good next target), built from the SREC export.
The Ops command center
Ops is where every sold project is tracked from signed contract all the way to
the final inspection. It is built around Dave's Safe Harbor work. Add a project with
the Add customer button (top right) - it creates the record and opens its panel
right away so you can fill it in; if something goes wrong it shows the error instead of
failing quietly.
The dashboard is the source of truth for Ops. There is no "Sync from Builder Prime" button -
project data lives and is edited right here, not pulled in from Builder Prime. (Builder Prime
is still referenced as a document source tag and as a back-reference link on the
customer record, described below.)
The Ops bar and the map
One bar switches the whole Ops screen between three views:
- List - one row per customer. The leftmost column is a segmented progress bar:
the eight lifecycle milestones (IL Shines, Part I, Part II, Interconnection, Permit,
Engineering, PTO, SREC), each in its own color, fill in as the project advances. A faded
segment is in flight and a red segment is blocked; hover any segment to see that
milestone's status. A pin icon and a documents icon sit before each name:
the pin keeps that customer sorted to the top of the list (click again to unpin), and the
documents icon opens that customer's documents (its colored dots match the document
category colors described below). A Job Type column marks each job as
Roof Mount, Ground Mount, or Both from a dropdown on the row. A new
Industry column tags each customer with their product lines (Solar, Battery, Heat Pump,
Geothermal, Windows, Siding, Doors), multi-select for a crossover job, and color-coded by
brand: blue for Solar Power Midwest, amber for Renovate Right 365. Existing rows
default to Solar. Click any
column heading to sort (including the read-only DC:AC Ratio) - a plain click still
sorts. Drag a column's header to reorder it, and drag a column's right edge
to resize it. A Row height slider sizes every
row at once, or drag a single row's bottom edge to size just that one. A search box
filters by name, address, type, utility, or account number. Each row's action buttons now
live together in their own Toolkit column. Click Details to open
the full customer record.
- Permit Scoring - how hard each local permit office (AHJ) is to work with (see its
own section above).
- Armory - the parts sourcing directory (see the Armory section below, formerly
"Parts Sourcing").
Above every view is a collapsible strip (click the header to open or close it). The
map takes the left half: it shades Illinois counties by permit difficulty (green easier,
orange moderate, red harder) and shows a pin for every customer. Click a pin to open
that customer; click a county to jump to Permit Scoring and expand that county's card. On the
right half is an animated portfolio donut that charts your Ops customers - use
its toggle to slice the portfolio by Stage, Type, or Safe Harbor.
Every map in the dashboard (this one, the lead and Air Campaign maps, the War Map, and
the Armory distributor map) is now a smooth 3D globe: zooming is continuous instead of
stepped, and a Street / Satellite / Hybrid pill switcher sits on the map. Everything
else works the same as before - pins, popups, the county permit-difficulty shading, pin
clustering, fullscreen, and drag-to-resize.
The customer Details drawer
Click Details on any customer to open a side panel with everything about that
project. It is organized into tabs so you see one group at a time instead of one
long scroll:
- Overview - an at-a-glance summary: checklist progress, lifecycle status chips
(including color-coded Install and Inspection chips in the At a glance row),
a large segmented lifecycle progress bar (the same eight color-coded milestones as
the list view - hover a segment for its full status), any alerts, and the Safe Harbor
3-way alignment card (Illinois ABP vs. Builder Prime contract vs. Podio engineering).
- Customer and System - identity/utility and equipment/production details. The System tab also has Arrays (PVWatts by
array) - list each roof plane or ground-mount section with its DC size, tilt, azimuth,
and PVWatts kWh/year, and the combined total sums automatically (per Dave's ABP process) -
Additional meters / systems, where each extra electric meter becomes its own
Illinois Shines / ABP system with its own meter/account, interconnection stage, Illinois
Shines job-status milestones, and arrays (annual production and PVWatts are one merged
field, since they are the same figure) - and an As-sold vs current panel that
compares the signed solar contract's system spec (size DC/AC, panel model and count,
inverter, battery model and capacity, mounting, contract price) to the current record and
flags anything that has changed since signing (a change order) with an amber "changed"
highlight and a "N changes since contract" badge, or "Matches contract" when nothing has
changed. It only reads existing data and shows nothing until the customer has a solar
contract.
- Lifecycle - every stage status plus the next step, owner, what's blocking, and
what changed. It also holds two physical-work tracks that are separate from the
paperwork and permit stages: Install (Not scheduled / Scheduled / In progress /
Installed / Blocked) and Inspection (Not scheduled / Scheduled / Passed / Failed /
Re-inspection needed). Both also show as color-coded chips in the Overview tab's
At a glance row. A Site & jurisdiction section holds quick-reference fields reps
kept hunting for: County, AHJ (permitting authority), HOA, Engineering company, and
Monitoring cell-card expiry (the inverter's cellular SIM/modem - renew it before it lapses
or production monitoring drops). This needs a one-time setup by the owner; until then the
fields show but will not save. It also has an Inverter brand field. Set it to
Enphase and a Connect Enphase button appears: it generates a link you send the
customer (they approve access in their own Enlighten account), after which the record shows
their linked system and a daily-refreshed production line (kWh today, MWh lifetime, and
status).
- Install - a physical-build timeline (survey to activation), separate from the
Lifecycle tab's paperwork, so you can see where a job physically stands and what is next.
Ten stages in order: Site survey, Engineering*, Permit*, Materials ordered, Materials
delivered, Install scheduled (with a date picker), Install complete*, Inspection*, PTO*,
Activated/monitoring live. The starred stages are shared with the Lifecycle tab -
editing one updates the same field in the other. Each stage shows Done / In progress /
Blocked / Not started, the next open step is highlighted, and the header shows the
scheduled install date and overall progress. This needs a one-time setup by the owner
before the new stages and date will save.
- SREC $ - contract amount and the Illinois Shines money figures.
- Checklist - the Safe Harbor items, each with a checkbox, an owner, and a due
date so every piece of paperwork has an accountable person and a deadline. Each item
can also attach one of the customer's uploaded documents: upload the file in the
Documents tab first, then pick it from the item's + attach dropdown. The item then
shows a clickable file link (with a detach button), so the proof sits right next to the
requirement.
- Documents - upload and Extract Data from the customer's files. (The old "Compare
sources" button was removed - the Extract all flow already flags discrepancies
between documents.) It also has a Utility interval usage area: press Upload utility
usage file and pick the export the customer downloaded from their own ComEd or Ameren
login (it is called Green Button Download there; ask for 12 months at the smallest
interval, CSV or XML). The dashboard then shows their annual usage, peak demand and when it
happened, average day, how spiky their usage is (which is what decides whether a
battery pays), and an estimated battery value with the assumptions it used. You cannot pull
this yourself: it lives in the homeowner's utility account. Re-uploading an overlapping file
corrects the numbers rather than double-counting.
Each field flashes a small Saved when you change it. Drag the drawer's left edge
to make it wider or narrower (it stops at the left menu so the nav stays visible, and the width
is remembered). Close the drawer with the X or the Esc key (clicking outside no longer closes
it, so you can't lose your place mid-edit).
Battery-only proposal (when solar is not viable). The System & equipment area has a
Battery-only proposal button for a customer whose home is not a fit for solar. Pick a
backup tier and the number of days of backup, enter SPM's quoted price and
financing, and it generates a branded PDF proposal with a shareable customer link
(/c/battery-proposal/[token]). It is resilience-first and quotes no incentives (none are
confirmed for battery-only in Illinois for 2026). The battery it recommends is sized from the
actual PV system size, using the customer's System size DC/AC fields.
The Safe Harbor file (documents)
- Upload one or several documents at once (signed contract, deposit proof,
engineering, utility bill, PVWatts, panel spec, SREC estimate, and more) - each is kept
as its own entry. You can also drag and drop files onto the panel or paste a
screenshot. Files go straight to secure storage (up to 20 MB) and stay until you
delete them. Pick a Type and a Source (Podio, Builder Prime, Illinois
Shines, PVWatts, or Carbon Solutions) before uploading. Upload and Compare
sources are gradient buttons.
- Five color-coded key categories - Engineering (also called Podio or the Plan Set),
PVWatts, Carbon Solutions, Illinois Shines (also called ABP or the Disclosure), and the
SPM Contract. Each category has its own drag-and-drop upload box in its own color,
labeled in full with its other names so you always know which box a file belongs in.
File links and the document dots in the Ops list match each category's color. The SPM
contract and the disclosure show a signed / unsigned status, and the PVWatts box
shows the annual kWh read from the document.
- Version labels - engineering plan sets and change orders carry an editable version
label (for example "V5" or "CO2") so revisions are easy to tell apart. There is also a
dedicated Change order document type.
- Paste text instead of a file: paste it into the box, pick a source, and
Save it to the customer so it shows in the document list.
- Extract Data - click this on any document or pasted text and the AI reads it
and proposes values. You review and pick which to keep before anything is saved. Values
that match what's already saved are flagged Same as current or Similar to
current (it understands number formatting like 9.680 vs 9.68 and address
capitalization/abbreviations) and are left unchecked so you don't re-apply the same
thing. Nothing is written without your approval.
- Compare sources - reads each source's documents and shows a side-by-side
table. Where the sources disagree, the row turns red. When the documents are dated,
the most recent one is treated as the source of truth (shown in green) and you can
accept it with one click.
Where each value came from (source pills)
When you accept a value from Extract Data or Compare sources, the field gets a small
colored pill showing its source - green for Podio, orange for Builder Prime, yellow for
Illinois Shines - plus the document's date. Several pills mean several sources agreed.
If you type over a field by hand, its pill clears, because you are now the source.
Generating a contract
You can generate a contract PDF straight from a customer, in two places: the
pen-and-paper icon in the customer's row in the Ops list, and a Generate contract
button in the customer detail drawer. Both open the same contract window.
A Solar / Windows & Siding toggle at the top picks the contract type. Solar is
unchanged - the full Solar Power Midwest agreement. Windows & Siding generates a
separate Renovate Right 365, LLC "Home Improvement Agreement" with its own scope line-item
editor (description, quantity, unit, total), the customer's price and date, and the standard
Illinois 3-day Notice of Cancellation.
Not for customer use yet: the Windows & Siding contract prints
as a watermarked draft ("NOT FOR CUSTOMER USE"). Its binding terms and warranty language
are a placeholder until Dave and an attorney finalize the real legal text, so it cannot be sent
to a customer yet. It also still needs Renovate Right 365's registered address, phone, and
email from Dave before those fields are filled in.
- Auto-fill from documents - click this button and the AI reads all of that customer's
uploaded documents and fills in the contract's remaining fields for you. Each auto-filled
field shows a small from: [document] note so you know where the value came from. It
only fills blank fields, so it never types over something you already entered; if a document
disagrees with a value you typed, it shows both and lets you pick. It is much faster now:
each document is read once into a per-customer memory, so the first auto-fill for a customer
takes a couple of minutes and every one after is instant. It also tells you when two
documents disagree about a field instead of silently picking one.
- Missing fields are highlighted - any field still empty is ringed in amber with a
"needs input" label, and a counter at the top tells you how many fields still need input.
Any auto-filled value that reads "TO CONFIRM" is now treated as blank too, so a placeholder
never rides into the contract - it gets ringed and flagged "needs input" just like an empty
field.
- Exclude - each field also has an Exclude toggle. Excluding a field leaves it
out of the required-fields check and makes it print as N/A in the final contract.
Use this for fields that genuinely don't apply (for example Trenching on a roof-mounted
system). A note in the window explains this.
- Your work is saved as a draft - everything you enter or auto-fill is kept as a saved
draft for that customer until you actually generate the contract, so you can close the window
and come back later without losing anything. Clear all fields wipes the draft and
starts fresh (it asks you to confirm first).
- Generate, then review before saving - the Generate contract button stays greyed
out until 100% of the fields have input, either filled in or excluded, so a contract can't be
generated with blanks. Generating now shows the contract in a preview window first and
saves nothing. Review it, then choose Save to documents, or Discard.
Discarding leaves the customer exactly as before: no version is used up and your draft is
kept, so you can tweak and try again.
- Contract history (no version is ever superseded) - every version you generate stays in
the list and stays usable. The newest carries a blue Latest badge and older ones read
Earlier version; nothing is thrown away when you generate a new one. You can still mark
a version Sent, Signed, or Void.
- Send for signature - each version has a Send for signature button that emails
the customer a legally binding e-signature request. It offers a free test send
(nothing is actually emailed) so you can check it first, then the real one. Once the customer
signs, the signed copy and the certificate of completion save automatically.
- Contracts also land in Documents - a contract you generate now also appears in the
Documents section of the Ops side panel, not just inside the contract window.
Tracking a sent proposal
A proposal now has a trackable customer-view link: click Copy link in the contract
modal and send it to the customer. Opening the link records when the customer viewed the
proposal, and the modal shows a "Viewed <date>" badge, so you get Sent → Viewed
→ Signed visibility on where a proposal actually stands.
Starting a customer over (Danger zone)
At the bottom of the Details drawer, Clear data blanks every tracked field, status,
and the checklist but keeps the customer, their Builder Prime link, and their documents.
Clear data + documents does all that and also permanently deletes the customer's
documents and pasted text. Delete customer removes the entire customer (and its
documents) from Ops. All three ask you to confirm first and cannot be undone.
Armory
The Armory tab (formerly "Parts Sourcing") is an editable directory of the materials you buy, so the
team has one shared, trustworthy place for "where do we get this and what's the part
number." It is organized in three layers: industry (for example Solar or
Windows), then category, then subcategory. Each part row holds a
supplier, a part number, and a link to the product page.
- Add, edit, or remove any part. Edits save on their own as you type.
- Search across everything, and filter by industry to narrow the view.
- Click a part's link to open the supplier's page (only real web links open, for safety).
- The first time the tab is empty, click Load starter parts to seed it.
At the top is a photo carousel - a horizontal, scrollable row showing every part's
picture (or a colored placeholder until a photo is added). Give a part a photo by pasting an
image URL into its Photo field, or use the small camera button on its carousel card. This
replaces the old parts overview chart.
Suggested distributors
A reference panel lists suggested suppliers with a short rationale for each - why that
distributor fits SPM's work - so you have a starting point when a part has no supplier
assigned yet. These are suggestions to consider, not accounts that are already set up.
Next to the list is an Illinois distributor map with a pin for every verified branch,
colored by category. Click a distributor's card and the map pans to its branch and
opens a contact popup (name, address, phone, email) with one-tap Call,
Text, and Email buttons. National channels with no Illinois branch are listed
separately, so you still have their details even though they have no pin. Like every map in
the dashboard, it is a smooth 3D globe with a Street / Satellite / Hybrid switcher.
Work Orders
Work Orders is a left-nav tab, sitting right after Ops. It is a cross-job dispatch board
for field-service work - site evaluations and service/warranty calls - kept separate from the
solar-project Ops module described above.
The board has columns by status: Unscheduled, Scheduled, In progress,
Complete, and Cancelled. Each card shows the work type, the customer, the
assigned tech, the scheduled date, and a color-coded urgency chip.
Click + New work order to open a detail drawer where you set the type, status, urgency,
customer/contact and address, scheduled date, assigned tech, a description, completion notes,
and you can upload photos. You can optionally link a work order to an existing Ops customer,
since a site evaluation is often done before a sale, so there may not be an Ops record yet.
Setup required: Work Orders needs a one-time setup by the owner
before it saves. The board stays empty until that runs.
Interval Data (Ops)
Interval Data is a left-nav tab under Ops that tracks ComEd interval-data
orders and maps each interval order number back to the customer account. It is the crosswalk
from the order you placed with ComEd to the account it belongs to, so a returned interval file is
never orphaned.
Each row holds the order number, the account number, the electronic ID, the
product interest, a status, the relevant dates, and free-text notes.
You can add a row, inline-edit any field, search the list, and delete a
row.
This is separate from the per-customer Utility interval usage upload in the Ops customer
Details drawer (the Green Button Download): that reads one customer's own usage file, while
Interval Data tracks the ComEd interval-data orders across customers.
Photo Library
Photo Library sits in the left menu under Ops, next to Work Orders. It is every
site photo SPM has, browsable by project address, and it is the replacement for the paid
CompanyCam plan.
Filter by tag, then open any photo to see who took it, when it was captured versus when
it was uploaded (those differ when a phone was offline at the job), its GPS location,
and its tags. It holds both the imported CompanyCam archive and every photo that comes in through
guided capture.
Also reachable directly at /photos. It was previously reachable
only that way: the tab shipped with no menu entry, so unless you knew the address you could
not get to it at all. It is in the menu now.
Advocates (referrals and payouts)
Advocates (renamed from "Force Multiplier") is its own menu group now, alongside
Recruit Demo. It used to be a corner of Air Campaign, which carried both a "Referrals" and
a "Referral Hub" sub-tab next to the top-level tab, so the same programme appeared in three places
under two names.
It holds referrals and advocates in one place: who referred whom, what each person has
earned, and what is owed. Advocates who were never customers (realtors, other trades,
past employees) can be added here and each gets their own referral link.
Approve and Pay. Each advocate or customer row now has an Approve and Pay button
that sends their reward through Tremendous: the person chooses how to receive it (Venmo,
PayPal, ACH, or a gift card). Each row also shows a year-to-date paid figure and raises a
1099 review flag once someone crosses $2,000 in a year. Approve and Pay stays
disabled until the person has an email on file and a positive balance, and it refuses to pay more
than they are actually owed.
What an advocate earns is locked in when they earn it.
Amounts are stamped at the milestone and never recalculated, so editing a reward rule changes
future referrals only and can never rewrite what somebody was already promised.
A referral sent from the SPM Reputation app now lands on the Leads board, not just in this
ledger. Before, it only wrote a rewards row, so the person the advocate sent us never appeared in
the pipeline and never got called. The lead panel also shows when somebody was referred,
not only who by, with a violet APP badge when it came through the app rather than the
website.
Rows marked DEMO are not real. A referral submitted from the demo version of the app shows
here with a purple DEMO badge so a walkthrough can show the referral arriving. They belong
to no advocate, earn nothing, never create a card on the Leads board, and are left out of the
referral count and the conversion rate. They are safe to delete at any time.
Customer reviews (how the app asks)
In the SPM Reputation app, a customer opening Leave a review sees five blank stars and
"Please select a rating below". The screen now opens at the stars every time rather than
resuming where they left off, and the Back link under the comment form is gone. Tapping a
star fills it in, names it (Unsatisfactory, Needs Improvement, Adequate, Good!, Excellent!) and
shows one Share Review button. At five stars that is one button instead of the two that
used to do the same thing. The button is there at every rating; where it goes is what changes:
- Five stars opens our review page at solarpowermidwest.com/review, which lists Google
and any other platform we have set up.
- Four stars and below opens a private comment form instead. What they write comes to us
and is not posted anywhere. A rating of three or less also pings the team, because the window
to fix an unhappy customer is measured in hours.
The line on the comment form is not optional.
That screen carries "If you would prefer to post a review instead of addressing your concerns, tap
here", and it must stay. Google's review policy says merchants must not "discourage or prohibit
negative reviews, or selectively solicit positive reviews from customers". The test is whether the
customer is prevented from reaching the public review path. With that link they are not, so
we are prioritising the private route rather than gating the public one. Remove it and Google can
unpublish the reviews we have already earned and block us from receiving new ones. The same link
appears again after they send their message.
One piece of private feedback per customer. Somebody who rated four or below and sent a
message sees "We have your feedback" the next time they open the screen, instead of the stars. A
second submission tells us nothing new and makes one complaint look like two unhappy customers.
Five-star customers are not limited and can open the review page as often as they like.
Their message lands in the review_feedback record with the star rating attached, and the
low ones raise a notification so somebody picks them up.
Copy review link. The Referrals page has a Copy review link button directly above
the Show review QR card bar. It copies the Google review link so a rep can paste it into a
text or an email, instead of only being able to show the customer the QR code in person.
Software costs
Software costs (renamed from "Finance") now lives under Ops > Reference rather
than in its own menu group. It visualizes SPM's own tech-stack costs, what you pay for the tools
that run the business, not customer billing. It is built from the asset inventory.
- A monthly cost by service view, colored by who pays (personal card vs. company),
so you can see the full software/tooling bill at a glance.
- A personal-vs-company donut chart splitting spend between the two.
- KPI tiles summarizing the totals.
Executive Overview
The Executive Overview tab (formerly "Executive Overview") is the screen you land on when you sign in. Its
Overview sub-tab shows company-at-a-glance metrics and your running team to-do
list and knowledge log; it also has a Toolkit sub-tab. (Intel moved into the Pipeline
flyout, and the Guide is its own menu group now.) Everyone on the team sees and can edit the same
to-do list.
Toolkit is a single page holding every SPM link: the live sites, the repositories, the
infrastructure logins, and the review destinations, so nobody has to hunt for a URL.
Sentry (silent-failure checks)
Sentry sits near the top of Overview and looks for the things that go wrong quietly.
Every check exists because that exact failure already happened here and nobody noticed at the time:
texts that reached a customer but never appeared on their timeline, a bot that was silenced on
someone and left them talking to nobody, scheduled texts that passed their send time, referral money
owed and unpaid, and leads that no automation will ever reach.
When it is quiet, that is the answer. A clean run says so in one line rather than showing an
empty panel. Each finding is a collapsible row: closed you see the title, a severity dot and a
count; click it open and it tells you what to do plus the actual records behind the number —
which leads are texting into silence, which advocates are owed and how much. When a list is only part
of the total it says "Showing 12 of 181", so a short list is never mistaken for the whole problem.
Sentry only ever reads; nothing on it changes your data.
By product line
A table under Sentry showing leads, appointments booked, consults held, sold and close rate for
each product (windows, siding, doors, solar, battery and the rest), with All time / 90 day /
30 day buttons. It exists because every other view in the dashboard is shaped around solar, and TEIG
now sells more than solar.
Two honesty notes built into the table. A row marked No sales record means no system feeding
this dashboard records a sale for that product — it does not mean nothing sold, and the
close rate is left blank rather than shown as 0%. And any lead carrying no product tag at all is
counted in its own No product tag row instead of being quietly dropped, because until those
are tagged no product report can be complete.
Your Taskers (the team to-do list) now sit in a collapsible bar pinned to the very top
of Executive Overview, showing how many are active; click it to expand or collapse. Every other box
on the page (Dialer KPIs, Ops status, Leads status) is also collapsible - click its title to
fold it away - and they all start open. Only the main stat tiles stay fixed.
On large screens the secondary sections tile two-across (Reports, 13-Week Planning, Dialer,
Ops & Leads, and System health), so the page is shorter and easier to scan. The
Operational Overview and the Taskers board stay full-width. System health now lives here in
Executive Overview: it moved out of the SEO area, where it did not really belong.
The setter KPIs and the Recent Calls log are now combined into one box called
Dialer KPIs (renamed from "Recon KPIs"): this week's dials, answered, qualified, and
booked counts plus answer %, book/dial, and dials/appt on top, with the recent-dials feed below.
There is also an Ops status card: an AI-written summary of every active project (overall
health, the biggest bottlenecks by name, and highlighted Action items). Click Refresh
on a card to regenerate its summary.
Taskers / Tasks (drag-and-drop Kanban)
The menu label for this board now reads Tasks (renamed from "Taskers"); the
board and everything on it work exactly the same. It is still commonly called the Taskers board.
Taskers is now a full drag-and-drop Kanban board instead of a plain list. Drag a card
from one column to another to change its status (or its priority, depending on how the board
is grouped - see below).
- Add a to-do - type it in the box at the top and press Add (there's a microphone
button to dictate it too).
- Group by - a toggle switches the columns between Status (Open / In process /
Completed) and Priority (High / Medium / Low).
- Sort - a second toggle orders the cards inside each column newest-first or
oldest-first.
- List view status chips - in the list view, Open / In progress / Done each have a chip
with a count. Click one to show or hide that group. If you switch all three off the list tells
you so, rather than looking empty and broken.
- Bulk actions - tick several cards and act on them together instead of one at a time.
- Call reminders are not Taskers. A reminder to call someone from a follow-up sequence now
appears as a note on that lead in Leads, where the phone number is, instead of cluttering the
team to-do list.
- Priority dot - every card shows a small colored dot for its priority (red for high,
amber for medium, gray for low), so when you are viewing by Status you can still tell
priority at a glance; when grouped by Priority, cards sort high to low, then newest first.
- Label and Category chips - open a card to set an optional personality Label
(Immediate, Urgent, Important, Fun, or Circle Back) and a Category (Solar, Vision,
Team, or Ops). Both show as small chips on the card.
- Edit after posting - click a to-do's title or the pencil icon to change its title
and details at any time.
- Due date (optional) - set one in the edit form. Each Tasker row then shows a
due-date chip (red if overdue, amber if due today), and the Executive Overview overview shows an
Overdue / Due Today / Due This Week triage so nothing quietly slips.
- Details - a to-do saved from AI research keeps the full answer as its details;
click Show details to read it.
- Remove - the trash icon deletes a to-do (it asks first).
The fastest way to fill it: in the Comms tab's chat, when a voice note's AI
research proposes a plan, click Approve and it lands here as a to-do automatically. A
meeting's Action items in the War Room Debrief can also be sent here with one click
(see the War Room section above).
Seeds (Solar Seeds)
Above the Taskers board is a green Seeds area (borrowed from Priscilla's "Solar Seeds"
idea). Use it to capture a raw idea you are not ready to act on yet: type it into the
Plant a seed box. When a seed is ready to become real work, click Promote to turn
it into a Tasker on the board below. Seeds can carry the same optional Label and Category chips
as Taskers, and a meeting's Seeds List in the War Room Debrief can also be planted here
with its own + Seeds button (see the War Room section above).
To discuss next meeting
Any Tasker or Seed can be flagged with the amber flag icon to mark it for the next War Room
meeting. Everything flagged shows up in a To discuss next meeting panel at the top of
Executive Overview, above the Taskers bar. This panel stays visible even when the Taskers bar itself
is collapsed, so the agenda for the next meeting is never hidden. Once the team has covered an
item, click Done discussing to remove it from the panel (this only removes it from the
agenda, not from Taskers or Seeds).
Tutorials (screen-recorded walkthroughs)
Tutorials is the second sub-tab under the top-level SOP item (the first is this
Dashboard Guide). It lets you record a screen walkthrough right in the dashboard: start a
recording, walk through whatever you want to show, and stop. It saves as a playable video
card, auto-titled, with a click-to-seek follow-along transcript so a viewer can jump to
any moment by clicking a line. It uses the same player panel as the Google Meet archive on the
Meetings page.
Good habits
- In Ops, turn on the Needs attention filter first so nothing stalls Safe Harbor.
- Work the leads with green and yellow borders first. Do not let them turn red.
- Reach out fast. New leads are easiest to reach in the first few minutes.
- Score the roof before a call so you know what you are working with.
- Add a quick note after every call so the next step is clear.
- Always sign out when you are done on a shared computer.
Word list
| Word | Plain meaning |
| Dashboard | The website you log into to manage leads. |
| Lead | A person who might buy. One card on the board. |
| Pipeline | All your leads, shown as columns. |
| Stage | One column. Shows how far along a lead is. |
| Tag | A small label that groups leads. |
| Super-tag | A one-click product filter (like Windows or Heat Pump) that stands in for several service tags at once. |
| Dialer queue | The set of leads lined up for the dialer to call next. |
| GoHighLevel (GHL) | The CRM SPM used to run on. Retired 2 August 2026; the dashboard no longer connects to it. |
| AHJ | The local permit office. "Permit difficulty" is how hard it is. |
| Solar roof score | A 1 to 10 grade of how good a roof is for solar. |
| SOP | Standard Operating Procedure. A step-by-step guide, like this one. |
| Dialer | The phone app built into the dashboard for placing and handling calls (found under Leads > Dialer). |
| Voicemail | Where unanswered inbound calls land, as a recording with an automatic transcript. |
| AI Caller | The tool that lets the AI place calls on its own instead of a person. |
| Disposition | The outcome you pick after a call, like Booked, Qualified, or DQ. |
| SREC | Solar Renewable Energy Credit. A payment tied to the electricity a solar system produces, part of the Illinois Shines program. |
| Missing Industry | A red chip on a lead card meaning no product could be detected. Classify it by hand instead of it defaulting to Solar. |
| Fixr / SolarReviews | An outside lead source that can send leads straight into the dashboard, already tagged with a product. |
| Hit List | A Leads sub-tab that shows each Red Hot lead as a card with an editable AI next-steps checklist. |
| Dave Meetings | A lead-window tab holding the result and next steps from each held appointment; its steps feed the Hit List. |
| Windows & Siding Simulator | The lead-window tab (renamed from "Design") that recolors a photo of a home so a customer can preview siding and window colors. |
| Proposal tab | A lead-window tab that builds a preliminary solar proposal number in-house, reproducing Carbon Solutions' REC calculator. |
| PVWatts | NREL's free tool that estimates a solar system's yearly production for an address. Used for on-demand estimates only; SolarGraf stays authoritative. |
| Google Meet | The video-meeting service SPM now uses instead of Zoom. Recordings sync into the Meetings Archive. |
| Betty Bot | The name for the AI texting and booking bot, shown across the dashboard (Betty Bot Sandbox, Betty Bot Brain, and a Betty avatar on bot-sent texts). |
| Personal Lines | A Leads sub-tab: the call log for Dave's and Priscilla's dedicated direct numbers. |
| Interval Data | An Ops tab that tracks ComEd interval-data orders and maps each order number back to the customer account. |
| Missed transfer | A live transfer from the AI receptionist that nobody answered. It alerts the team, and if the caller is new it auto-creates a lead. |
| Roof plane | One roof face in the Proposal tab, with its own kW size, tilt, and azimuth. PVWatts runs each plane and adds them up. |
Questions about the dashboard? Ask your admin. This guide can be re-downloaded
anytime from the SOP button in the left menu.
SPM Command Center Guide · Version 3.19 · Updated September 11, 2026