Ash
uxsignalstudio.com
hello@uxsignalstudio.com
UX Report

buildops.com

What is working, and what is costing you.

79/100
Solid

BuildOps has done the hard part. The hero names the category, the audience, and the outcome in three lines a contractor would actually say out loud, the differentiator against residential-first platforms is written plainly, and the customer proof runs deep with real numbers attached to real names. The page underneath the copy is well built. What is costing it is the layer added on top. A flat black scrim sits over the customer story videos, including the one in focus. Two overlays cover the mobile fold and one blocks the other's dismiss button. The three proof statistics decompose into digit soup for screen readers and AI summarisers, the contractor count changes between the homepage and the pricing page, and the consent banner asks for agreement after thirty four cookies have already been set. Every one of these sits above good work rather than replacing it, which is why most of this score is recoverable in days.

17112
21 findings 1 critical7 high11 medium2 low
Prepared for
buildops.com
Prepared by
Ash · UX Signal Studio
Scanned
17 August 2026 at 13:48
Method
Desktop 1440x900 and mobile 390x844, Chromium
Contents

What is in this report

  1. 01 VerdictThe bottom line, the first five seconds, and where the score comes from
  2. 02 Do these three firstThe changes that move the most, in order
  3. 03 What is workingProtect these in any redesign
  4. 04 What is not working21 findings, most severe first, each with a fix
  5. 05 Code analysisMeasured from the page, including legal and compliance
  6. 06 What we looked atEvery screen the review is based on
  7. 07 Art directionA design opinion, labelled as opinion
  8. 08 This is the surfaceWhat a scan reaches, and what it does not

Scored against 26 checks in three weighted categories, plus 9 signals measured directly from the page. Section 01 shows how the score is built.

Section 01

Verdict

The bottom line

The messaging on this page is the best we have scored in this category. What is costing it is everything layered on top after the design was finished: a fifty percent black scrim over the customer videos, two overlays covering the mobile fold, statistics that read as forty digits of nonsense to a screen reader, and thirty four tracking cookies set before the visitor has agreed to anything.

01

What is strong

The hero names category, audience, and outcome in three lines, the anti-residential differentiator is written plainly, and thirteen named customer quotes carry real numbers. This is a genuinely well-positioned page.

02

The exposure

Thirty four cookies are set before any interaction, including Reddit, Facebook, LinkedIn, Bing and Google advertising identifiers with 2027 expiry, while the banner reads By continuing to use this site, you agree and offers no way to decline.

03

The filter

A flat 50 percent black scrim sits over every customer story video, the active one included, so the best proof on the site is watched through a dark layer and the slides either side are almost unreadable.

04

The proof

The three headline statistics exist only as a scroll animation. To a screen reader or an AI summarising the page they read +0123456789012345678901234567890123456789%.

The first five seconds

What a stranger takes from the hero

Lands

The category, the audience, and the promise, all three. Mission control for commercial contractors, more jobs, more margin, less chaos, one AI-native platform for projects, service, and financials.

Does not land

Why this one and not ServiceTitan. The answer is written well, three sections down, and never appears above the fold.

Where it stands

Three categories, 21 findings

17112
1 critical7 high11 medium2 low

UX and conversion

79/100 · Solid

The messaging is the strongest we have scored. Category, audience, and outcome all land above the fold, the differentiator is written well, and the customer evidence is deep and specific. What costs points is placement and proof integrity rather than clarity: the competitive answer sits four screens down, the three headline statistics are unreadable to anything but a browser, and the customer count contradicts itself between two pages. All three are edits, not rebuilds.

Visual and behavioral

87/100 · Strong

The art direction is a genuine asset and the hierarchy above the fold is clean. Every loss in this category is something laid over finished work rather than a flaw in the work. A flat black scrim covers the customer videos including the active one, two overlays cover the mobile fold and one blocks the other's dismiss control, the eyebrow carrying the positioning is set at 10.8px, and the navigation labels sit under the contrast threshold. Lift the layers and this category scores well.

Compliance and trust

86/100 · Strong

The documents are in place and the configuration is not. Privacy policy and terms are real, HSTS is on, the sitemap is complete, and the buttons are properly built with accessible names and keyboard access. Against that, thirty four cookies including advertising identifiers are set before consent and the banner offers no way to decline, while thirteen elements fail AA contrast and no accessibility statement exists. The consent problem is a setting rather than a project, and it is the first thing an enterprise review will find.

Detail

The longer read

What this site is. BuildOps sells field service and project management software to commercial contractors: HVAC and mechanical, electrical, plumbing, fire and life safety, and refrigeration. The pitch is one connected system for service, projects, and financials, with AI built into the workflow rather than added as a feature. The page is trying to convert a contractor owner or operations leader into a booked demo, with a weekly group demo offered as a lighter alternative.

This is a site with the positioning problem solved and a finishing problem left open. The hero does in three lines what most B2B pages fail to do in three screens, the customer evidence behind it is deeper and more specific than anything else we have scored, and the page is fast and cleanly built underneath. What is costing it is a set of things added on top of finished work. A flat fifty percent black scrim covers every customer story video, including the one the carousel is focusing on, so the strongest proof asset on the site is watched through a dark filter. On mobile the consent banner and an auto-opening chat window cover the first screen, and the chat blocks the banner's dismiss button. The three statistics carrying the proof argument render into the accessibility tree as forty consecutive digits. The contractor count that opens the page as 1,500 becomes 1,000 on the pricing page. And the consent banner asks for agreement while thirty four cookies, including advertising identifiers expiring in 2027 and four separate visitor-identification vendors, are already set. None of these are design failures in the work itself. They are layers laid over it, which is why they are cheap to lift.

The scoring framework

Built over years of B2B and B2C product work

This is our own framework, not an off-the-shelf checklist. Every check in it earned its place by turning up repeatedly in real reviews, across products sold to businesses and products sold to consumers, where the same failure kept costing the same thing. Checks that stopped predicting anything were removed.

The scoring is deliberately mechanical, so the number does not move with who ran the review or what kind of day they were having. What stays human is the judgement: what counts as a finding, how severe it is, and what to do about it. We use AI for the measurement pass now, which catches the small things a person skims past on the fortieth screen, and that buys back the time for the part that actually needs a designer.

How the score is built

Every check in the framework

Each check starts at 100 and is reduced by its most severe finding. A category is the average of its checks. The overall score weights the three categories at 40, 35, and 25 percent, then takes five points for every unresolved critical finding, because a critical is a business consequence that strong scores elsewhere should not wash out.

Weighted categories: 84. Critical findings: 1, costing 5. Overall: 79.

CheckCategoryScoreFindings
Value proposition clarity UX and conversion 65 1
CTA clarity UX and conversion 100
Conversion friction UX and conversion 52 4
Trust signals UX and conversion 56 2
Messaging clarity UX and conversion 82 1
Objection handling UX and conversion 100
Urgency and motivation UX and conversion 100
Visual hierarchy Visual and behavioral 65 1
CTA prominence Visual and behavioral 82 1
Decision overload Visual and behavioral 82 1
Social proof density Visual and behavioral 100
Headline effectiveness Visual and behavioral 100
Dark pattern detection Visual and behavioral 100
Responsive integrity Visual and behavioral 56 3
Art direction Visual and behavioral 100
Product demonstration Visual and behavioral 100
Misleading flows Compliance and trust 100
Hidden costs Compliance and trust 82 1
Forced continuity Compliance and trust 100
Confirm shaming Compliance and trust 100
Weak disclosure Compliance and trust 100
Transparency Compliance and trust 93 1
Accessibility risk Compliance and trust 59 3
Legal pages Compliance and trust 82 1
Cookie consent Compliance and trust 40 1
Crawl controls Compliance and trust 100
Section 02

Do these three first

01

Gate the tracking behind consent and add a reject option

Removes a live GDPR and ePrivacy exposure that any customer, competitor, or regulator can verify in ten seconds, and removes the question that will stall the first serious vendor security review. The consent platform is already installed, so this is configuration.

02

Lift the black scrim off the active customer video, and label the counter statistics

Lets the strongest asset on the site be seen properly instead of through a dark filter, and makes the three strongest proof numbers readable by screen readers and by the AI assistants an increasing share of contractors now research with. One CSS rule and six attributes between them.

03

Move the residential contrast into the hero and fix the customer count

A contractor arriving from a competitor comparison learns in five seconds why this is not residential software stretched to fit, instead of scrolling four screens. The sentence is already written. Reconciling 1,500 against 1,000 protects every other number on the site.

Before you act on these

These three are the order, not the plan

Sequencing three changes is straightforward. Knowing which one to spend a sprint on, what the replacement copy should actually say, and how to tell within a fortnight whether it worked is a different question, and it depends on numbers this report cannot see.

That is the part we would want a conversation for. Thirty minutes, your funnel data on screen, no pitch.

Walk me through these three
Section 03

What is working

Protect these in any redesign.

The hero does the whole job in three lines

The eyebrow reads MISSION CONTROL FOR COMMERCIAL CONTRACTORS, the headline reads More jobs. More margin. Less chaos., and the subhead reads Connect projects, service, and financials in one AI-native platform. Category, audience, outcome, and mechanism, in that order, in under twenty words.

Keep it because: Most B2B pages we score need three screens to say what this says above the fold, and many never say it at all. This is the strongest hero in the set. Whatever else changes, this should not.

The differentiator is written, and it is a real one

BuildOps was built from day one for the complexity of multi-trade service and construction. Not like other platforms retrofitting residential tools for commercial work. It is repeated later as Commercial work isn't an add-on, with the supporting line Most platforms started in residential and stretched to fit.

Keep it because: This names the actual competitive wedge in the category without naming a competitor, and it is a claim a contractor can test against their own experience of the alternatives. It is the second best sentence on the page and it deserves to be nearer the first.

Customer proof is deep, specific, and in the operator's voice

Thirteen named customer quotes, most with a number attached: 75 percent time saved in receivables, receivables cut from about 120 days to 30, a consulting division up 300 percent, two times faster invoicing, we used to be two weeks behind on job costing, now we're up to date daily.

Keep it because: These are not marketing sentences with a logo attached. They are operators describing a change in a number they watch every week. This is the most persuasive asset on the site and there is a lot of it.

The imagery shows the product and the work, not abstractions

The hero carries a real dashboard with service agreement revenue, pull-through by technician, and technician utilisation. The platform section shows an actual dispatch board with named techs against named jobs. The trades section uses close-up field photography of a real electrical panel.

Keep it because: In a market where most competitors ship stock photography and gradient blobs, showing the software and the job site is a competence signal. A contractor recognises the dispatch board because it looks like their week.

The page is fast despite carrying a lot

First contentful paint at 396ms and DOM content loaded at 527ms, on a page with 196 requests, 145 images, and scroll-driven animation throughout.

Keep it because: Speed is the trust signal that cannot be faked, and for a buyer evaluating an operations platform it reads as engineering competence before a single feature is mentioned.

The legal baseline is in place

Privacy policy and terms of service both resolve and read like real documents rather than placeholders. robots.txt is present, the sitemap lists 1,527 URLs, and HSTS is enabled.

Keep it because: This is the layer most companies at this stage skip, and it is the layer that gets checked first by anyone doing diligence. The documents exist, which makes the consent problem below a configuration fix rather than a legal project.

Join Weekly Demo is a smarter offer than it looks

Alongside Book Demo the hero offers Join Weekly Demo, a recurring group session with no sales call attached.

Keep it because: It gives a contractor who is curious but not ready a way in that costs them nothing and commits them to nothing. Very few competitors offer this. It is currently styled as the lesser option, which is the wrong way round for the top of the funnel.

Section 04

What is not working

21 findings, most severe first. Each is grounded in the captured page.

UX and conversion

8 issue(s) · scores 79/100

The three proof statistics read as forty digits to anything that is not a pair of eyes

Built to perform section, desktop and mobile · trust signals
high observed quick win

The numbers +76%, x2.6, and +80% are rendered with a slot machine counter animation. Every digit column contains the full sequence zero through nine in the DOM, masked visually by overflow. Nothing is marked aria-hidden and no aria-label carries the real value. We extracted the page's own text and the first statistic reads +0123456789012345678901234567890123456789%. The same is true of all three. The attribution beneath them reads Results collected from the BuildOps benchmark report, with no sample size, no date, and no methodology on the page.

Evidence
  • Extracted page text: "+0123456789012345678901234567890123456789% MORE REVENUE PER TECH"
  • Markup: span.nf-digit-col__inner containing 0-9, no aria-hidden, no aria-label on the parent
  • Same pattern on x2.6 TOOLS REPLACED ON AVERAGE and +80% MORE WORK WITHOUT MORE OVERHEAD
  • Attribution: "Results collected from the BuildOps benchmark report." No sample size or date shown
Why it matters

Two audiences are affected and one of them is growing fast. A screen reader user hears digit soup instead of the proof. And when a contractor asks ChatGPT or Claude to compare BuildOps against ServiceTitan, the model reads the same text we did, so the three strongest numbers on the site are unavailable to the tool an increasing share of buyers now research with. The self-published source without a sample size is a separate weakness: a number a buyer cannot check is a number a buyer discounts.

Fix
Put the real value in an aria-label on the wrapper and mark the digit columns aria-hidden. Two attributes per statistic. Separately, add the sample size and the period to the attribution, for example based on 340 BuildOps customers, 2025, and link the benchmark report.

The customer count changes between the homepage and the pricing page

homepage social proof strip and section five, versus the pricing page · trust signals
high observed quick win

The homepage says TRUSTED BY 1,500+ COMMERCIAL CONTRACTORS ACROSS NORTH AMERICA above the logo row, and repeats it as a section heading, More than 1,500 shops run on BuildOps. The pricing page, which is one click away in the primary navigation, says Trusted by 1,000+ commercial contractors across North America.

Evidence
  • Homepage: "TRUSTED BY 1,500+ COMMERCIAL CONTRACTORS ACROSS NORTH AMERICA"
  • Homepage: "More than 1,500 shops run on BuildOps"
  • buildops.com/pricing: "Trusted by 1,000+ commercial contractors across North America"
Why it matters

The pricing page is where the serious buyer goes, which means the person most likely to notice the discrepancy is the person closest to buying. A number that moves by five hundred between two pages of the same site does not read as a stale page, it reads as a number that was chosen rather than counted, and it puts every other number on the page in question.

Fix
Pick the accurate figure, publish it everywhere, and give it a source line. If the true count sits between the two, say the true count. A specific and checkable 1,340 beats a rounded 1,500 that contradicts itself.

The reason to choose BuildOps over the incumbent is three sections below the fold

hero versus the Purpose built for commercial section · value prop clarity
high observed quick win

The hero establishes what BuildOps is and what it produces, and stops there. The competitive answer, Not like other platforms retrofitting residential tools for commercial work, appears in the fourth section. Its restatement, Commercial work isn't an add-on. Most platforms started in residential and stretched to fit, is further down again. A contractor arriving from a comparison search or a competitor's ad reads a promise that the incumbent also makes, and has to scroll four screens to find the part that is only true of BuildOps.

Evidence
  • Hero subhead: "Connect projects, service, and financials in one AI-native platform."
  • Section four: "BuildOps was built from day one for the complexity of multi-trade service and construction. Not like other platforms retrofitting residential tools for commercial work."
  • Section seven: "Commercial work isn't an add-on. Most platforms started in residential and stretched to fit."
  • Nothing comparative appears above the fold
Why it matters

In a category with a dominant incumbent the buyer is not asking what does it do, they are asking why not the one everybody uses. The answer is already written and it is good. Placing it four screens down means only the visitors who were already persuaded ever read it.

Fix
Move the residential contrast into the hero subhead: Built for commercial from day one, not residential software stretched to fit. Keep the outcome headline exactly as it is. Nothing new needs writing, the sentence already exists on the page.

Page weight or request count above budget

code · conversion friction
high observed quick win

195 requests, ~28.4 MB transferred (budget: 80 requests / 2.5 MB).

Why it matters

Heavy pages lose visitors before they render, and the loss is worst on the mobile connections most visitors use.

Fix
Compress and correctly size images, serve modern formats, and defer non-critical scripts.

26.5 MB and forty five third-party domains for one homepage

whole page, both viewports · conversion friction
medium observed medium

The page makes 196 requests and transfers roughly 26.5 MB, against a 2.5 MB budget. It builds 3,225 DOM nodes. Thirty two images are shipped far larger than they display, including a 1,725px asset rendered at 461px and customer logos served at up to 1,056px to fill a 90px slot. It contacts 45 third-party domains, among them HubSpot, Intellimize, Qualified, ZoomInfo, Snitcher, Claydar, Reddit, Bing, LinkedIn, Facebook, DoubleClick, Capterra, and TechnologyAdvice.

Evidence
  • 196 requests, ~26.5 MB transferred
  • 3,225 DOM nodes against a 2,500 budget
  • 1,725px served, 461px displayed (services.webp)
  • 1,056px served, 90px displayed (customer logo)
  • 45 distinct third-party domains contacted
Why it matters

First paint is fast, which masks this, but the payload lands on whoever is holding the phone. This audience reads sites in trucks, in mechanical rooms, and on job sites where signal is poor and data is metered. The same third-party volume is also what produces the consent problem above, so trimming it improves two findings at once.

Fix
Serve responsive image sizes for the logo row and the section media, which alone should remove most of the payload. Then audit the third-party list against what marketing actually reports on. Four separate visitor-identification vendors is at least three more than any team uses.

Body text under 14px

code · messaging clarity
medium observed quick win

8 block(s) of body copy set below 14px.

Evidence
  • 10.8px — "MISSION CONTROL FOR COMMERCIAL CONTRACTORS"
  • 10.8px — "TRUSTED BY 1,500+ COMMERCIAL CONTRACTORS ACROSS NORTH AMERICA"
  • 12.6px — "MORE WORK WITHOUT MORE OVERHEAD"
  • 12.6px — "Results collected from the"
  • 12.6px — "BuildOps benchmark report."
  • 10.8px — "PURPOSE BUILT FOR COMMERCIAL"
  • 10.8px — "ONE SYSTEM, EVERY WORKFLOW"
  • 12.6px — "Contact Us: +1 213-559-1988"
Why it matters

Small body copy pushes readers to zoom or give up, which costs time on page and comprehension.

Fix
Set body copy to 16px minimum, and no supporting copy below 14px.

Page weight or request count above budget

code · conversion friction
medium observed quick win

3224 DOM nodes (budget 2500). Heavy DOM slows interaction on mid-range devices.

Why it matters

Heavy pages lose visitors before they render, and the loss is worst on the mobile connections most visitors use.

Fix
Compress and correctly size images, serve modern formats, and defer non-critical scripts.

Page weight or request count above budget

code · conversion friction
medium observed quick win

32 image(s) shipped far larger than displayed.

Evidence
  • 1725px served, 461px displayed — https://cdn.prod.website-files.com/69ca5a8696b428c0fbc088cf/6a0c9290ab28b9de7c4fa6bd_services.webp
  • 283px served, 90px displayed — https://cdn.prod.website-files.com/69cad9cd3a5ef3196ea9bb65/69fa6a20bbc37a3874d9eff7_dormatech%20white.webp
  • 323px served, 90px displayed — https://cdn.prod.website-files.com/69cad9cd3a5ef3196ea9bb65/69fa664c590e69c5608b9851_holmes%20electric%20white.webp
  • 1056px served, 90px displayed — https://cdn.prod.website-files.com/69cad9cd3a5ef3196ea9bb65/69fa5ecafebed8bf77dc1975_rbt%20white.webp
  • 427px served, 90px displayed — https://cdn.prod.website-files.com/69cad9cd3a5ef3196ea9bb65/69fa63f61e3f8b13f5da244e_output-onlinepngtools.webp
  • 500px served, 90px displayed — https://cdn.prod.website-files.com/69cad9cd3a5ef3196ea9bb65/69fa6a8d398d4d7664407fef_jackson%20white.webp
  • 500px served, 90px displayed — https://cdn.prod.website-files.com/69cad9cd3a5ef3196ea9bb65/69fa4f7a90d8f109b97ecf93_jolma%20white.webp
  • 673px served, 90px displayed — https://cdn.prod.website-files.com/69cad9cd3a5ef3196ea9bb65/69fa4eaa184d86c88eecdf0e_rabine%20white.webp
Why it matters

Heavy pages lose visitors before they render, and the loss is worst on the mobile connections most visitors use.

Fix
Compress and correctly size images, serve modern formats, and defer non-critical scripts.
Visual and behavioral

6 issue(s) · scores 87/100

A black filter sits over the customer story videos, including the one in focus

More than 1,500 shops run on BuildOps carousel, desktop · visual hierarchy
high observed quick win

Every slide in the customer story carousel carries an overlay set to rgba(0, 0, 0, 0.5) at full opacity. We checked the active slide and its two neighbours: all three get the identical fifty percent black layer. The result is that the video the carousel has centred is watched through the same dark filter as the two it is de-emphasising, and the side slides, already cropped to a couple of hundred pixels by the container, become almost unreadable. Separately, the statistic overlaid on the active video collides with the video's own burned-in lower third, so 50% and INCREASE IN REVENUE sit on top of the speaker's name and company.

Evidence
  • .customers-carousel_overlay, background rgba(0, 0, 0, 0.5), opacity 1, z-index 2
  • Applied identically to swiper-slide-active, swiper-slide-next, and swiper-slide-prev
  • Side slides cropped to roughly 200px of visible width and scrimmed at the same strength
  • Overlaid "50% INCREASE IN REVENUE" renders on top of the video's own title card text
Why it matters

These videos are the single most persuasive asset on the site. A contractor hearing another contractor say receivables went from 120 days to 30 is worth more than any headline on the page, and BuildOps has thirteen of them. A scrim on the neighbouring slides is a reasonable design decision. The same scrim on the slide the visitor is being asked to watch is not, and the effect is that the best content on the page is presented as though it were background texture. The text collision compounds it: two sets of white type stacked on the same corner of the frame reads as unfinished.

Fix
Fade the overlay to zero on the active slide and keep it, or a lighter version of it, on the neighbours. That is one CSS rule against the active class and it is the highest-value single change on this page. Then move the statistic overlay to the opposite corner from the video's own lower third, or drop it, since the quote beneath the video already carries the number.

Two overlays bury the mobile fold, and one covers the other's dismiss button

mobile, 390px viewport, first screen · responsive integrity
high observed quick win

On mobile the consent banner opens across the lower half of the screen. On top of it a proactive chat window opens unprompted with the message Hi there! I'm Alex from BuildOps. Are you planning to attend The Forge 26 event in San Diego this November? The chat panel sits over the banner and covers the I Understand button, so the visitor cannot dismiss the banner without first closing the chat. Together the two overlays occupy roughly the bottom half of the first screen, and the chat follows down the page.

Evidence
  • Mobile fold capture at 390x844: consent banner plus chat window covering the lower half of the screen
  • Chat panel overlaps the banner's "I Understand" control
  • Chat message pitches an event in San Diego, unrelated to the visitor's intent
  • Same stacked state persists on subsequent scroll segments
Why it matters

This is the first thing a contractor sees, and most of them will see it on a phone. The page has spent its best copy on the first screen and then covered it with two interruptions that arrive before the visitor has read a sentence. Blocking the dismiss control of one overlay with another is the pattern regulators point at when they describe consent obstruction, and it is a straightforward abandonment risk regardless.

Fix
Delay the chat until a scroll depth or dwell threshold, and never open it while the consent banner is showing. Shrink the mobile banner to a single line with the controls inline. Make the event pitch a chat prompt the visitor can open, not a message that opens itself.

The lower-commitment offer is styled as the lesser one

hero, desktop and mobile · cta prominence
medium observed quick win

Book Demo is the filled amber button. Join Weekly Demo sits beside it as an outlined secondary. Book Demo means a scheduled call with a salesperson and a form. Join Weekly Demo means dropping into an existing group session with nothing required. The offer with the lower commitment is the one carrying the weaker visual weight, and the same Book Demo also repeats in the navigation, so the page presents the high-commitment path twice above the fold and the low-commitment path once, in the quieter style.

Evidence
  • Hero: "Book Demo" filled amber, "Join Weekly Demo" outlined
  • Navigation repeats "Book Demo" filled amber in the top right
  • 4 button-styled elements compete above the fold on desktop
Why it matters

Most first-time visitors to a platform in this price range are not ready to talk to sales. Giving them a way in that costs nothing is the highest-value thing this hero does, and it is the option a scanning eye skips. This is a styling decision, not a strategy decision, which makes it cheap to test.

Fix
Run the reverse for two weeks: Join Weekly Demo as the filled primary, Book Demo as the outline. Measure total qualified conversations rather than demo bookings alone, because the weekly session should feed the booked demos rather than compete with them.

Twenty tap targets below the 44px minimum

mobile, 390px viewport · responsive integrity
medium observed quick win

Twenty tappable elements measure under the 44px minimum on a 390px viewport, including a 119x22px control, several at 115x41px, a 40x40px control, and the benchmark report link at 157x15px. Fifteen pixels of height is roughly the size of a pencil line.

Evidence
  • 20 tappable elements under 44px at 390px width
  • "BuildOps benchmark report." 157x15px
  • 40x40px control
  • Multiple 115x41px controls
Why it matters

Apple and Google both publish 44px as the minimum for a reason, and the margin matters more than usual for an audience that is frequently wearing work gloves or holding the phone one-handed on a site. A mis-tap on a link is a small annoyance. A mis-tap near the consent controls is the finding above.

Fix
Set a 44px minimum height on tappable elements through padding rather than font size, so nothing in the layout has to move.

Touch targets under 44px on mobile

code · responsive integrity
medium observed quick win

20 tappable element(s) under the 44px minimum on a 390px viewport.

Evidence
  • "" — 119x22px
  • "" — 115x41px
  • "" — 115x41px
  • "" — 40x40px
  • "BuildOps benchmark report." — 157x15px
  • "" — 107x24px
  • "" — 202x24px
  • "" — 198x24px
Why it matters

Targets under 44px cause mis-taps on mobile, which reads to the user as the site being broken.

Fix
Give every tappable element a minimum 44x44px hit area, using padding rather than font size.

Competing calls to action above the fold

code · decision overload
medium observed quick win

4 button-styled elements compete above the fold. One primary action should dominate.

Evidence
  • "Log In" (a, color(srgb 0.984314 1 0.929412 / 0.2))
  • "Book Demo" (a, color(srgb 1 0.682353 0.0666667))
  • "Book Demo" (a, color(srgb 1 0.682353 0.0666667))
  • "Join Weekly Demo" (a, color(srgb 0 0 0 / 0))
Why it matters

Competing actions split attention and reduce the click-through rate of the one that matters.

Fix
Pick one primary action above the fold. Demote everything else to a secondary or text style.
Compliance and trust

7 issue(s) · scores 86/100

Thirty four cookies are set before the visitor agrees to anything

consent banner, all viewports · cookie consent
critical observed quick win

We loaded the homepage in a clean browser and did not click, scroll, or interact. Thirty four cookies were set. They include advertising and cross-site identifiers: _fbp from Facebook, _rdt_uuid from Reddit expiring November 2026, _gcl_au from Google Ads, MUID and _uetvid from Microsoft expiring September 2027, bcookie and li_sugr from LinkedIn, and test_cookie from DoubleClick. Alongside them are four separate visitor-identification vendors that de-anonymise company traffic: ZoomInfo, Snitcher, Claydar, and Qualified. The banner that appears reads By continuing to use this site, you agree that we and our third-party partners may use cookies, pixels, and similar technologies. Its only two controls are I Understand and Cookie Settings. There is no reject, no decline, and no way to say no without leaving.

Evidence
  • Banner copy: "By continuing to use this site, you agree that we and our third-party partners may use cookies, pixels, and similar technologies as described in our Privacy Policy and Terms of Service to process your information."
  • Banner controls: "I Understand" and "Cookie Settings". No reject option.
  • 34 cookies set on first load with zero interaction
  • _rdt_uuid (Reddit) expires 2026-11-15, MUID (Microsoft) expires 2027-09-11, bcookie (LinkedIn) expires 2027-08-17
  • Identity vendors loading before consent: ws.zoominfo.com, snid.snitcher.com, api.claydar.com, app.qualified.com
  • 45 third-party domains contacted before any click
Why it matters

Implied consent has not been valid under GDPR since 2018, and continuing to browse is the textbook example the regulators use. The ePrivacy Directive requires consent before non-essential cookies are set, not after. A reject option must carry the same weight as accept. BuildOps sells to commercial contractors who work on government, healthcare, and data centre sites, and those customers run vendor security reviews. This is the first thing a review looks at, it takes ten seconds to verify, and the finding is that the vendor collected advertising identifiers from the reviewer before asking.

Fix
Gate the non-essential tags behind consent instead of firing them on load. Add a Reject All button with the same visual weight as I Understand. Replace the implied-consent wording, because agreement by continuing is not agreement. The consent platform is already installed, so this is configuration rather than a build.

Text below WCAG AA contrast

code · accessibility risk
high observed quick win

13 text element(s) fail WCAG AA contrast. Worst is 3.91:1 against a required 4.5:1.

Evidence
  • 3.91:1 (needs 4.5:1) — "CAPABILITIES" rgb(115, 126, 116) on rgb(18, 34, 28)
  • 3.91:1 (needs 4.5:1) — "PLATFORM" rgb(115, 126, 116) on rgb(18, 34, 28)
  • 3.91:1 (needs 4.5:1) — "ADD-ON MODULES" rgb(115, 126, 116) on rgb(18, 34, 28)
  • 3.91:1 (needs 4.5:1) — "BY DEPARTMENT" rgb(115, 126, 116) on rgb(18, 34, 28)
  • 3.91:1 (needs 4.5:1) — "BY BUSINESS TYPE" rgb(115, 126, 116) on rgb(18, 34, 28)
  • 3.91:1 (needs 4.5:1) — "BY INDUSTRY" rgb(115, 126, 116) on rgb(18, 34, 28)
  • 3.91:1 (needs 4.5:1) — "ALL RESOURCES" rgb(115, 126, 116) on rgb(18, 34, 28)
  • 3.91:1 (needs 4.5:1) — "ABOUT" rgb(115, 126, 116) on rgb(18, 34, 28)
Why it matters

Low contrast text is unreadable in sunlight, on older screens, and for the roughly one in twelve people with colour vision deficiency. It is also the single most litigated WCAG failure.

Fix
Raise text and background contrast to at least 4.5:1 for body copy and 3:1 for text 24px and above.

Navigation labels and eyebrow text fall below readable minimums

navigation dropdowns and section eyebrows, desktop · accessibility risk
medium observed quick win

Thirteen text elements fail WCAG AA contrast. The dropdown category labels CAPABILITIES, PLATFORM, ADD-ON MODULES, BY DEPARTMENT, BY BUSINESS TYPE, BY INDUSTRY, ALL RESOURCES and ABOUT sit at 3.91:1 against a 4.5:1 requirement. Separately, eight blocks of copy are set below 14px, including the two lines doing the most positioning work on the page: MISSION CONTROL FOR COMMERCIAL CONTRACTORS at 10.8px and TRUSTED BY 1,500+ COMMERCIAL CONTRACTORS ACROSS NORTH AMERICA at 10.8px.

Evidence
  • 3.91:1 (needs 4.5:1) rgb(115, 126, 116) on rgb(18, 34, 28) across 8 navigation labels
  • 10.8px "MISSION CONTROL FOR COMMERCIAL CONTRACTORS"
  • 10.8px "TRUSTED BY 1,500+ COMMERCIAL CONTRACTORS ACROSS NORTH AMERICA"
  • 12.6px "Results collected from the BuildOps benchmark report."
  • 13 elements below AA contrast, 8 text blocks below 14px
Why it matters

The eyebrow is where the category and the audience live, and it is set smaller than the fine print on a receipt, in all caps and wide letter spacing, which slows reading further. The buyer here is often in their fifties, frequently on a phone in a truck. Setting the two lines that do the positioning at 10.8px asks the hardest reading conditions to carry the most important words.

Fix
Lift the eyebrow to 13 or 14px and raise the navigation label colour to clear 4.5:1. Neither change alters the layout. The eyebrow is the highest-value 3px on the site.

Pricing is in the navigation but no price is on the pricing page

primary navigation and buildops.com/pricing · hidden costs
medium observed medium

Pricing sits in the primary navigation as a top-level item. The page it leads to is titled Custom BuildOps Pricing for Commercial Contractors and publishes no figure of any kind. It asks How much does BuildOps cost? in its FAQ and answers with a form. There is a heading reading No hidden fees, no surprises above a page that shows no fees at all.

Evidence
  • Primary nav item: "Pricing"
  • buildops.com/pricing contains no currency figure anywhere on the page
  • FAQ heading: "How much does BuildOps cost?"
  • Section heading: "No hidden fees, no surprises"
  • Other FAQ headings: "Does BuildOps charge per user or per technician?", "Are there setup fees or implementation costs?"
Why it matters

This is normal for the category, which is why we have graded it medium rather than high, and the page does answer the structural questions honestly. The friction is the promise: a navigation item called Pricing sets an expectation that a form does not meet, and No hidden fees, no surprises is a difficult claim to make on a page where every number is withheld. A contractor evaluating three platforms in an evening will bounce from the one that will not indicate a range.

Fix
Publish a starting point and the shape of the model, for example from X per technician per month, priced by crew size and trades, no setup fee. Keep the custom quote. A range qualifies buyers out before they take up a sales hour, which is the same reason to publish it as the reason to hide it.

Legal page linked but broken

code · legal pages
medium observed quick win

The cookie policy link resolves but the page does not read like a cookie policy. It may be a soft 404 or a placeholder.

Evidence
  • https://buildops.com/#
Why it matters

A legal page that is linked but does not load is worse than one that is missing: it looks like an attempt to appear compliant.

Fix
Fix the target so the link resolves to the real document, and add these routes to your uptime or link checks.

Cookie Settings links to nothing and no accessibility statement exists

footer · transparency
low observed quick win

The footer lists Terms of Service and Privacy Policy, both of which resolve to real documents, alongside Cookie Settings, whose href is a bare hash. There is no cookie policy page anywhere on the site describing what is set and why. There is also no accessibility statement.

Evidence
  • Footer link "Cookie Settings" href="#"
  • No cookie policy page found on the site
  • Privacy Policy and Terms of Service both resolve and read as genuine documents
  • No accessibility statement linked
Why it matters

Minor next to the consent finding, but it is the same review that catches both. Given the volume of tracking on this site, a cookie policy listing the vendors and purposes is the document that makes the consent banner defensible. An accessibility statement is increasingly requested in public sector and large enterprise procurement, which is exactly the work commercial contractors bid for.

Fix
Publish a cookie policy generated from the consent platform's own vendor list, and point the footer link at it as well as at the preferences dialog. Add a short accessibility statement once the button fix above is in place, so the statement is true when it is published.

No accessibility statement

code · accessibility risk
low observed quick win

No accessibility statement linked. Required for public sector bodies in the UK and EU, and expected by enterprise procurement everywhere else.

Why it matters

An accessibility statement is required for public sector bodies in the UK and EU, and is a standard question in enterprise procurement.

Fix
Publish an accessibility statement covering your conformance target, known gaps, and a contact route for problems.
About these fixes

Every fix above is deliberately high level

Each one names what to change and why, which is enough to act on. What it leaves out is the reasoning underneath: which to do first given how people actually move through your funnel, what the replacement should say in your voice, and whether the change still holds once someone is inside the product rather than looking at the page.

Every recommendation we make is backed by a framework and a method, and tested against two things at once: whether it helps the person using the product, and whether it helps the business. A change that wins one and costs the other is not a fix, it is a trade nobody agreed to.

That is why we describe this as product design rather than visual work. If the thinking in this report is useful, the same thinking applied with your data in the room is where it compounds.

Talk through the fixes
Section 05

Code analysis

Measured directly from the rendered page. These are facts, not judgements.

MetricValueRead
HTTP status200OK
First contentful paint320 msWithin budget
DOM content loaded481 msWithin budget
Requests195Over budget
Transferred28.43 MBOver budget
DOM nodes3224Heavy
Console errors0Clean
Third party script domains24High
Images / links / forms145 / 110 / 0Inventory
Legal and compliance

Checked directly, not inferred

CheckResultDetail
robots.txtPresentHTTP 200
SitemapPresent1527 URLs at https://buildops.com/sitemap.xml
Privacy policyLinked and resolveshttps://buildops.com/privacy-policy
Terms of serviceLinked and resolveshttps://buildops.com/terms-of-service
Cookie policyLinked and resolveshttps://buildops.com/#
Cookie consentPresent2 tracking domain(s) loading
HSTSEnabledStrict-Transport-Security header
Accessibility statementNot linkedExpected in public sector and enterprise procurement
Detected in code

9 signal(s)

SignalSeverityDetail
Text below WCAG AA contrasthigh13 text element(s) fail WCAG AA contrast. Worst is 3.91:1 against a required 4.5:1.
Body text under 14pxmedium8 block(s) of body copy set below 14px.
Touch targets under 44px on mobilemedium20 tappable element(s) under the 44px minimum on a 390px viewport.
Competing calls to action above the foldmedium4 button-styled elements compete above the fold. One primary action should dominate.
Page weight or request count above budgethigh195 requests, ~28.4 MB transferred (budget: 80 requests / 2.5 MB).
Page weight or request count above budgetmedium3224 DOM nodes (budget 2500). Heavy DOM slows interaction on mid-range devices.
Page weight or request count above budgetmedium32 image(s) shipped far larger than displayed.
Legal page linked but brokenmediumThe cookie policy link resolves but the page does not read like a cookie policy. It may be a soft 404 or a placeholder.
No accessibility statementlowNo accessibility statement linked. Required for public sector bodies in the UK and EU, and expected by enterprise procurement everywhere else.
Section 06

What we looked at

Desktop, above the fold (1440x900)
Mobile, above the fold (390x844)
Desktop, scrolled section 2
Desktop, scrolled section 3
Desktop, scrolled section 4
Desktop, scrolled section 5
Desktop, scrolled section 6
Desktop, scrolled section 7

Static capture only. Anything behind a click, a login, or a payment step was not exercised and is flagged as a risk rather than a confirmed fault. Findings marked "likely" or "possible" need a live walkthrough to confirm. Scores are the framework's weighting of severity and confidence, not an industry benchmark. Generated by UX Signal Studio using the UX Risk framework.

Section 07

Art direction

Design verdict

Working for the sale

Opinion, not measurement

A deep green and bone palette with amber as the single action colour. Monospaced eyebrows and technical annotations, R11, C03, C01, crosshair registration marks and dashed section rules borrowed from mechanical drawings. Real product interface in the hero and the platform section. Close-up field photography of an electrical panel rather than stock imagery. Section counters numbered 01 through 04 in the footer.

This is a design judgement rather than a measurement, and for once it is a compliment. The blueprint language is exactly right for the buyer: it borrows the visual grammar of the drawings a commercial contractor works from every day, and it does it without cartoons, mascots, or gradient abstractions. Amber reserved solely for action means every button is findable without thinking. Showing the dispatch board with named technicians against named jobs, rather than an illustration of a dispatch board, is the single most persuasive art direction choice on the page. The one place the system fights itself is contrast: dark green type on dark green ground in the navigation and several sections, which is where the accessibility failures cluster. The identity is not causing that, the tonal range within it is.

What we would do instead
Keep all of it. Widen the value range inside the green so text has somewhere to sit, which fixes the contrast failures without touching the palette. Then let the blueprint annotations earn their place: right now R11 and C03 are decoration, and the same marks could label the actual workflow being shown, which would turn a texture into an explanation. Bring the field photography further up the page. It is the most distinctive asset here and it appears once, late.

Everything else in this report is measured or quoted. This section is not. It is a design judgement, offered because the gap between the imagery and the product is the kind of thing a scan will never flag and a buyer will always feel.

Section 08

This is the surface

A scan reads one page the way a stranger does. It can tell you the category is missing from the hero and that the closing call to action contradicts its own copy.

What it cannot do is decide what the product should promise, or design the flow that keeps that promise once someone is inside it. Everything in this report is above the signup. The compounding return is below it.

What a scan reaches
  • One public page, as a first-time visitor sees it
  • Copy, hierarchy, and the first five seconds
  • Accessibility, performance, and consent in the markup
What it does not
  • Signup, checkout, and cancellation, end to end
  • The product itself, once someone is inside it
  • What to build next, and what to stop building
Ash · UX Signal Studio · uxsignalstudio.com