Still loading — this usually isn't your internet connection.
If it keeps happening: close any other ClimatePro tabs or windows, then reload.
OpsManager
You're all caught up.
Shown next to your name across the app.
Plays on the shop TV when you sell $25k+. Uploads keep the first 5 seconds.
Real lock-screen notifications on this device — lunch reminders, time-off updates, schedule assignments. Each phone or computer switches itself on separately (on iPhone the app must be installed to the home screen).
Email a copy of these notifications to your inbox. Everything still appears in the bell — this just decides what hits your inbox too.
Add a 6-digit code to your sign-in. Your phone can already generate it — no app to install. iPhone: Settings → Passwords → Set Up Verification Code. Android: Samsung Pass / Google Authenticator / your password manager. Password managers: 1Password, Bitwarden, Dashlane all support this natively.
Loading…
Different rates for different work — Regular, Overtime, Prevailing wage (the California DIR-mandated rate for public-works jobs), etc. Each survey picks one. Mark one row as the default; surveys without a pick use it. The legacy "Labor rates" below are a fallback only — once a default is set here, those are ignored.
Used to compute labor cost / sell price on every survey when no Labor type default is set above.
How long anchoring, caulking, and bondkap take per linear foot.
The bondkap extrusion models your crews install. Each window that gets bondkap picks one; the cost and sell here are per linear foot of material. The Materials list and survey PDF total the footage per type so the office knows how much to order.
One-tap presets for the Other charges block on the survey pricing card — job site supervision, lift charges, logistics, administrative fees. Cost is what it costs you, sell is what the customer pays; both can be edited per survey after adding. Charges ride the survey totals, net profit, quote summary, and the proposal target.
Where crews leave from. The survey pricing card measures the drive from here to the job site and offers it as a hidden Travel charge — it folds into the section prices, so the customer never sees a travel line. The same speed factor powers the calendar’s 🚗 drive estimates.
Baseline labor times every film starts with. Each of the two applies on its own: a film that leaves Setup blank on its product row gets the setup time below even if it has its own per sqft rate. A film’s own value wins whenever it’s above 0 — set one here and override it on the handful of films that need more (typing 0 on a film means “use the default,” same as blank). Set a box to 0 and no film gets that time unless its own row asks for it. Small panes still use the flat per-pane time below.
Small panes (typical 12"×12"–15"×15" transoms, sidelites) take longer per sq ft than larger panes because setup overhead dominates. Any pane under the threshold is treated as a small panel: it gets a flat labor time per pane instead of the film's setup & per-sqft formula, and is counted separately in the survey totals.
Hybrid model: setup time per window plus per-sqft stripping time. Set one to 0 for flat-rate or pure per-sqft.
Defaults used when generating the cut plan on a survey or in the PDF.
Appears in the app header and on every exported PDF.
Use a transparent PNG for best results. Max ~600×600px.
Toggle individual features off if they're causing problems, or restrict them by role. Off-toggle disables the feature immediately for users on next sync — no redeploy needed.
The pricing-calculator inputs. Change these when the business changes — every rate below and the survey net-profit math recalculate automatically.
Edit the title and body of each in-app notification. Use the placeholder tokens below each card — they're replaced with real values when the notification fires.
Automatically text or email customers a reminder 24 hours before their scheduled appointment. Texts go out via your Podium number (customers can reply); if there's no phone on file, we email instead.
No texts are sent during quiet hours — a reminder that comes due overnight goes out the next morning.
Sent as soon as an appointment is booked — useful when it's days or weeks out. Only goes to bookings more than 24 hours away (closer ones just get the reminder above).
Define the areas you work in as a list of zip codes — add them by name (a whole city or county) or type them in directly. Every job is sorted into the zone that owns its zip, so the calendar can group, color, and filter by area. A zip belongs to one zone.
Each dot is a customer, colored by its zone. Grey = not in any zone yet. Hover any area for its zip & city; click it to see the county and assign it to a zone. Dashed amber = zips with customers but no zone (your coverage gaps).
Every zip your customers are in — assign each to a zone. Unassigned zips show as "Unzoned" on the calendar.
Reusable templates for documents you send to customers for signature (install agreements, warranty forms, care instructions). Use the placeholder tokens — they're replaced with real values at send time.
Inbound capture (embeddable forms on your site) and outbound outreach (email + SMS templates). Both feed the Leads pipeline.
Build a form, copy its embed code, and paste the snippet on any website. Submissions land tagged with the form's source so you can track which channels convert. The 24-hour SLA clock starts the moment a visitor hits Submit.
No forms yet — create one to start capturing inquiries from your website.
Reusable outreach messages reps pick from when contacting a lead. Use {tokens} to personalize — they're substituted with the lead's name, the rep's name, your company info, etc. at send time.
No email templates yet.
No SMS templates yet.
⭐ favors a page. Turn Suggest off to never use it.
No pages yet. Tap Refresh from website to load them.
The catalogs the survey editor pulls from when a rep is filling out a window or itemizing equipment. Mark items inactive instead of deleting if they're already used on past surveys (deleting an in-use value would orphan the survey reference).
Gear like scaffolding, planks, and PPE.
Specific ladder sizes so reps pick exactly what the install crew needs.
Offered under Frame type on each window in the survey editor.
Offered under Window type on each window in the survey editor. Single Clear / Double Tinted / Dual Low-E etc. — what the manufacturer spec sheets list as a substrate.
Names are locked once saved to keep them aligned with how manufacturer spec sheets label substrates — that's how the Glass Checklist maps optical-property data to your catalog. To remove a type from the rep dropdown, uncheck Active. To replace a type, add a new row with a new name and deactivate the old one.
Legacy multi-select tag catalog from before the two-axis refactor. The survey editor no longer reads from this — pane count moved into the Window type catalog above, and treatment moved into the per-window Glass type dropdown (Annealed / Tempered / Laminated). Kept here in case you want to repurpose it later (e.g. operation types like Fixed / Casement / Sliding).
Configure the data the AI Survey Review reads when grading a survey: cross-cutting shop guidance + reference PDFs (install guides, warranty docs, manufacturer spec sheets, code references).
Facts (the AI is told these as immutable truths):
Context auto-loaded per review:
What the AI focuses on (the system prompt's "focus list"):
Skips (the AI won't volunteer these):
Your guidance below + the AI Review Docs override these defaults. The AI is told to stay strict to your guidance — if you say "X applies except for Y", it treats Y as a precise exception list and won't generalize the rule to other axes.
Each doc has a scope — Always (every review), Manufacturer (only when a film from that manufacturer is in the survey), or Series (only when a film from that series is used).
Every 👍 / 👎 reps give on JobReady findings lands here. Thumbs-up = validation that a rule is working. Thumbs-down = something to investigate. The Group by finding view shows net scores so you can spot which findings are net-loved (don't break them when tuning) and which are net-hated (priority to fix).
Premade sets of folders for a job's Files tab. On any job, 📂 From template adds a template's folders (existing folders with the same name are kept, not duplicated). Mark one as the default and it's offered first. Folders can nest — add a sub-folder under any folder.
No templates yet. Tap + New template to make the first one.
https://app.climatepro.com/?view=board
The link only works signed in. On the TV, sign in with a TV login (step 1) and it stays on the board. Everything below is checked live.
Mute and volume reach the TV within a few seconds. Anything else applies on its next refresh (under a minute).
What the TV does when a job is sold. Amounts are the quote price. Under the first tier a quiet one-line banner shows for a few seconds, no sound.
Queues a sample. The TV plays it within seconds if it's on and has been started with ▶ once.
Plays for jobs of tier 2 and up. Pick a built-in sound for anyone, or upload a clip (first 5 seconds kept). Reps can also pick their own under Settings → Profile. Nobody is left silent: the default from TV settings covers anyone without a pick.
Reps are ranked by points; Sold $ stays visible. Jobs below the margin floor score 0 points but still count toward Sold $.
Shown next to names on the TV for the following month. Untick Active to retire a badge.
Log the event; the TV's counter resets from that date on its own.
Five stars count on the TV and toward the rep whose job it links to. Linking the job is optional but that's what credits the rep; tick the installers for the documented-praise record.
Let Zapier watch your Google Business Profile and send every new review here by itself. Zapier needs these two things — copy them into the webhook step.
••••••••••••json.rating → Star Rating · reviewer_name → Reviewer Display Name · text → Comment · review_date → Create Time · external_id → Review Id.x-ingest-secret → paste the Secret above. Leave "Wrap Request In Array" on no. Test the step — the review appears in the list here — then publish the Zap.Five-star imports count on the TV right away. A review that arrives twice is ignored. To credit a rep or installers, open the review in the list and link the job.
Build reusable forms for reps to fill out against leads, surveys, proposals, and jobs. Quality inspections, aerial-lift checks, safety sign-offs, anything multi-step. Submissions render as PDF.
No forms yet. The builder lands in the next build — you'll see + New form light up here.
PNG or JPG, 2 MB max. Square images look best.
Loading…
Loading…
Connect ClimatePro to outside services. Right now we use Podium to send SMS so customer replies thread back into your Podium inbox.
Outbound SMS for proposals + lead outreach goes through Podium. Customer replies land in your Podium inbox where reps reply two-way from the Podium app — no need to monitor a separate inbox here.
——0 inbound texts from unknown numbers (not matched to any customer or lead)
Credentials saved. Click below to grant ClimatePro access to your Podium account — you'll be sent to Podium's allow screen, then redirected back here.
Pick which location to send SMS from:
Videos uploaded since this was enabled go straight to Cloudflare Stream and play in every browser. Older videos still sit in Supabase Storage and can render as "tap to download" on Chrome Windows / Android — migrate them once and they'll play everywhere too.
No legacy videos to migrate — all videos are already on Cloudflare Stream. 🎉
Run once if videos render but won't play (CORS errors in the browser console). This applies the CF_STREAM_ALLOWED_ORIGINS setting to every video already on your Cloudflare Stream account, so the player iframe can load the manifest. Safe to re-run — it skips videos that are already correctly configured.
During the transition off Simpro, both apps stay in sync so estimators see what admins entered in Simpro and admins see what reps captured here. This page shows the health of that link.
—Each entity can be off, one-way (Simpro → ClimatePro only), or two-way. "Last poll" is the most recent successful read from Simpro. "Linked" is how many records here are already paired with a Simpro counterpart.
| Entity | Direction | Last poll | Linked | Action |
|---|
Local saves queue up here and a background worker drains them. Pending = waiting, In-flight = sending, Failed = retried 3+ times and needs a look.
Same record edited in both apps inside the sync window. Resolve by picking which side wins — the other side's changes are discarded.
A nightly job compares both sides and lists anything out of step: missing on one side, or fields that disagree. Empty here means the two systems matched at the last check.
Manages which @climatepro.com mailboxes get synced into ClimatePro. Email content + matching against customers/contacts/leads happens server-side every minute. Architecture overview in Help → Emails section.
Each mailbox in this list gets its inbox + sent items pulled every 60 seconds. First-time sync pulls the last 90 days; deeper history fills in over the following days.
| Mailbox | Owner | Status | Last sync | Messages | Actions |
|---|
No mailboxes added yet. Click "+ Add all @climatepro.com" to bulk-import your team's profiles, or "+ Add mailbox" to add one at a time.
Manual operations for after bulk imports, RLS / matching changes, or troubleshooting.
Customer, contact, or lead records can't be created with emails on these domains. Stops accidental (or intentional) creation of internal-team email addresses as customer records, which would otherwise expose that mailbox's correspondence to anyone who can see the record. Always keep your company's primary domain in this list.
| Domain | Reason | Added |
|---|
No blocked domains. Add your company's primary domain to close the team-mailbox privilege-escalation vector.
AI pass over your inbound mail to find what customers actually ask about. Each run extracts topic phrases from the most recent 1,500 inbound emails, then clusters them into natural categories. Takes 1-3 minutes; costs about $0.50 per run. Re-run periodically as the corpus grows to see what categories emerge.
Connect your Google Calendar. Events you enter in Google show up here as Busy blocks — just the time, no details — so your day is protected when anyone schedules you. Everything you schedule in ClimatePro is pushed to your Google Calendar with full details.
Loading…
Everyone who has connected their Google Calendar. You can sync or pause any of them.
| Person | Status | Last sync | Mirrored | Busy | Actions |
|---|
No one has connected their calendar yet.
Every morning the bid monitor checks California public-agency portals for solicitations with window film or security screen scope, scores each one 0–100 for fit, and saves the results for review. Turn sources on or off below — changes apply from the next pull.
Runs automatically every morning at 6:00 AM Pacific.
Loading sources…
Pings every outside service the app talks to + your own Supabase project, so you can confirm everything's reachable. See SERVICES.md for what each service does.
Author training material, organize it into tracks, and see who has completed what.
Loading…
Pick a track to see who has completed each page.
Loading…
Loading…
Choose a new password for your account.
—
Beta. Wrong verdict? 👎 it in JobReady.
Learn: 🎓 Glass fundamentals · 📖 How the math works
A sanity check, not a warranty determination. ⓘ
—
No in-scope windows on this survey yet.
These were copied from your Company defaults when the proposal was created. Editing here affects only this proposal.
Loading…
Forms scoped to proposals — pricing approvals, customer sign-offs, anything that has to attach to the deal.
No forms apply to this proposal yet. Ask your admin to set one up under Settings → Forms.
Every change to this proposal + its line items, send/sign events.
No activity yet.
No customers yet. Tap + Add customer to create one, or convert a lead from the Leads page.
No contacts yet.
No addresses yet.
No activity yet.
No emails synced for this customer yet.
No upcoming events for this customer.
None yet.
No surveys for this customer yet.
No proposals yet.
None yet.
No texts with this customer yet.
Every change to this customer + their contacts, addresses, surveys, and proposals.
No activity yet.
Call new leads within 24 hours.
No leads yet. New leads from your website forms land here automatically, or tap + New lead to log a phone inquiry.
No texts yet.
No contact yet.
No emails.
No forms for leads yet.
Nothing scheduled.
Add someone before they sign up so their details are ready.
Waiting to sign up. Send them app.climatepro.com.
Recent updates and changes — newest first.
You're on build . The app updates automatically — usually within a minute of a new release.
Everything submitted via "Send feedback" lands here. Pick one to read, reply mentally, then mark it resolved.
No feedback in this view yet.
Emailed to the submitter with their message attached. They can reply back.
Brings the row back into the Open tab. Doesn't email the submitter. The original reply text is kept on file in case you resolve it again the same way.
Every photo and file, newest first.
No uploads match these filters.
Nothing here.
Who changed what, when.
No matching entries.
No events on this day.
No events on this day.
Rolls and remnants on hand.
No rolls match these filters.
No rolls match these filters.
Match old Caspio IDs to people so roll history shows names.
Nothing to map.
Cover = on hand ÷ average weekly usage over the last 90 days of roll activity. A row flags 🔴 when cover drops below the lead time, 🟡 when it's within twice the lead time.
Loading…
Snap the receipt; the details fill in.
No expenses here yet. Tap + Add expense to log the first one.
No expenses in this period.
Loading…
No time recorded yet today.
No time recorded this week.
No time-off requests yet. Tap 🌴 Request time off to make one.
No active team members found.
⚠ Range crosses a workweek — overtime is figured on full weeks, so the split may include hours just outside these dates. ⓘ
No time recorded in this period.
This month, newest first.
Nothing waiting for approval.
No enrolled installers. Enroll people under Program settings.
No events for this installer in that month.
Enrolled installers appear on the board and get scored. On a PIP the score still shows but no bonus is paid. On extended leave the card leaves the board and the A-streak is frozen.
Off: a month closes on the logged events only, the way the office scorecard was run. On: each streak nobody broke adds its points at close and the cards show a projected score. Past months never change.
Point values and approval rules from the Installer Playbook. Edits apply to events logged from now on — past events keep the points they were logged with.
Loading…
Public bids for film and security screens, scored daily.
Nothing matches these filters.
The monitor checks Cal eProcure, local agency portals, and agency websites every morning at 6 AM and scores what it finds. High scorers land in your email digest and here. Widen the filters above, or check to see when each source last ran.
Commercial paperwork: subcontracts, COIs, billing, closeout.
No contracts yet. Tap + New contract when a GC subcontract or custom-COI job comes in.
The Contracts feature needs a database update before it can load. Ask your admin to run the latest migration.
No checklist items yet.
No documents.
Sub invoices, checked against the agreed amount.
No invoices yet. Subs submit them from their portal.
Subs, and whether their license and insurance are current.
No contractors yet. Tap + Add contractor to start the directory — you'll stop chasing COIs by memory.
The Contractors feature needs a database update before it can load. Ask your admin to run the latest migration.
Never assigned to a job. Put them on one from any job page's 🤝 Contractors card.
No license on file yet.
No insurance on file yet.
Nobody from this company can log in yet. Invite the owner below — they'll see only jobs you assign them, never prices.
No purchase orders yet. Tap + Purchase order to create the first one.
No vendors match.
Loading…
Loading…
| Rep | Quoted | Won | Jobs | Conv | Pipeline | Goal |
|---|
Simpro + in-app combined. ⓘ
Measurements, photos and film picks per site.
No surveys yet. Tap + New Survey to start.
Installs, warranty and go-backs.
No jobs yet. Jobs are auto-created when a customer accepts a proposal.
What a crew needs to show up and work — shown to installers here and to assigned contractors in their portal. Each field saves when you leave it.
No contractor assigned.
Customer-signed scope changes. Once signed, lines lock and the change order's total adds to the job.
No change orders yet.
Multi-day install? Open a visit and tap 📋 Copy to next day, or set Repeats when you schedule the first one.
No visits scheduled yet. Tap 📆 Schedule visit to add one.
Loading survey…
No updates yet. Post the first one above.
No time logged yet. Use the Clock-in button below to start.
Quality inspections, aerial-lift checks, safety sign-offs. Each submission saves as a PDF you can download.
No forms apply to this job yet. Ask your admin to set one up under Settings → Forms.
Install agreements, warranty forms, care instructions — sent to the customer for e-signature. Click any row to see the lifecycle and copy the signing link.
None sent yet.
Contracts, COIs, schedule-of-values, photos, anything job-specific. Files are private to people on the job (admin / salesperson / crew). Uploads land in the folder you're looking at — or drag files straight onto a folder.
No documents uploaded yet.
| Description | Amount |
|---|---|
| Total | $0.00 |
By signing, you authorize the work above as a change to the original scope. The change order's amount will be added to the job total.
| Description | Amount |
|---|---|
| Total | $0.00 |
By signing, you confirm the work is complete and as agreed. Your signature finalizes the job and authorizes invoicing.
Open 💰 Sales →
Open 📈 Demand →
| Rep | Quoted | Won | Jobs | Conv | Pipeline | Goal |
|---|
Simpro + in-app combined. ⓘ
| Salesperson | Signed $ | # | Pipeline $ | Open | Reviewed |
|---|
No activity in the last 30 days.
Same months, year over year. ⓘ
No data yet for this view.
First-call speed and follow-through. ⓘ
| Rep | Avg to contact | Within 24h | Avg attempts | Overdue | Cold |
|---|
No assigned leads to report on yet.
Quotes and the jobs they became, per rep. ⓘ
| Rep | Quotes | Open | Jobs | Conv. | Quoted $ | Job $ |
|---|
No Simpro quotes or jobs yet.
Planned vs punched. About equal is healthy · over = light estimate · under = missed punches. ⓘ
| Person | Planned h | Visits | Logged h | Punched h | Days | Ratio |
|---|
Each cell: punched / planned hours (logged in parentheses when it differs). Weeks start Monday.
The typical job: film mix, glass types, labor drivers. Directional, not statistical.
No film selections recorded yet.
No glass types recorded yet.
Film that ends up on glass, per month. Higher is better. ⓘ
Not enough survey data to chart yield yet.
How often the costly extras show up. Seams and removals are the biggest hidden labor drivers.
| Metric | Value |
|---|
| Estimator | Surveys | Windows | Total sq ft | Avg sq ft / survey |
|---|
No surveys to report on yet.
Agreements and change orders out for signature.
No documents match these filters.
Draft one from a survey's Proposals card.
No proposals yet. Open a survey and tap Draft proposal to send your first one.
Quotes going quiet. Log a touch, snooze, or let go.
No windows match your search.
Dispatch uses this to pick ladder, lift or scaffold. Get floor and ceiling in the photo.
Required. Enter the height in feet to the top of the tallest glass so dispatch can plan a ladder or lift. Enter 0 if everything is reachable from the ground.
No proposals yet.
No forms for surveys yet.
Add in-scope windows with film to compare against your history.
Comparing against your history…
Tap a row to open that survey. Won = signed proposal; Open = drafted or sent; Lost = declined, expired, or voided.
No activity yet.