Application · Web Development & Technical SEO LeadMousa Batarseh · Sep 22, 2026

Bran needs a web department. Here is the one I would build and lead.

Your posting asks for WordPress and Wix builds, searchable catalogs, spec-sheet libraries, migrations with clean data, schema, Core Web Vitals, and someone who can own hosting, estimates and a Friday status. This page reviews getbran.com and three client sites, names the product the department should own, sets the build standard, and matches each requirement in the posting to something you can open.

Scroll
01 · Website review

Strong voice, quiet plumbing.

The strengths are real: a clear position, a credible niche, a team that has worked inside the channel, and a homepage that already carries Organization, Service and WebSite schema. Every gap below is template-level, which is the good news: template fixes scale. 140 pages sampled across four sites on Sep 22, 2026.

Strengths

  • S1Category ownership: PHCP, PVF and HVAC-R rep firms and manufacturers, with a voice that sounds like the channel
  • S2Custom JSON-LD already on the homepage, /manufacturers and /the-bran-method
  • S398.5% image alt coverage; llms.txt already published
  • S4Fast time-to-first-byte on pages (0.075 s median)

Opportunities

  • O1Structured data on the service pages that sell, unique titles under 60 characters, one H1 per post
  • O2A performance budget: the homepage is 1.27 MB of HTML today
  • O3Client sites that prove the standard; the case study has 0 of 36 meta descriptions
  • O4Line cards as products, not PDFs: filterable, indexable, quote-ready
01

The page that sells SEO has no structured data

/web-design-seo carries no JSON-LD. Only 5 of 22 sitemap pages on getbran.com carry any; the homepage, /manufacturers and /the-bran-method do, the service pages a buyer lands on don’t.

What I’d shipA schema library (Organization, Service, FAQPage, BreadcrumbList) applied by template, so every service page is machine-readable on day one.
02

Six team pages still hold template copy

All 6 /team URLs contain Wix placeholder text, 4 of 6 slugs render a different person than the URL names, and /team links to none of them. /about-1 is a 404 nothing links to.

What I’d shipA week-one own-house pass: slugs, placeholders, duplicate post slugs, the 404 and the community pages that are indexable but unused.
03

Pages weigh a megabyte before a visitor sees them

Homepage HTML is 1,275,015 bytes with 63 script tags (211 KB on the wire). Page TTFB is fast (0.075 s median); blog posts are slow (1.39 s median) and every post carries two H1s.

What I’d shipA performance budget per template, HTML weight, scripts, LCP and CLS, measured monthly, that every new page must meet.
04

The flagship case study has no metadata at all

marshmoore.com, the WordPress/Divi build Bran presents as its case study: 0 of 36 pages with a meta description, 0 with JSON-LD, 0 Open Graph tags, 29% image alt coverage. Its line card is a form, not a page.

What I’d shipA client build standard, so the case study proves the standard instead of contradicting it.
05

Line cards exist. None can be filtered.

Across three client sites the line card is a PDF, a logo grid or a text list. Tim Morales runs a Wix Stores gallery with a price slider for manufacturers. Armstrong-Weatherly’s card title says 2024, its heading 2026, and 8 of 21 manufacturer pages aren’t on it.

What I’d shipLine Card Intelligence: filterable, spec-linked, indexable, the same on WordPress and Wix.
0/22getbran.com pages with structured data
0/6team pages holding template copy
0MBhomepage HTML, 63 script tags
0/36case-study pages with a meta description
02 · The product the department can own

Line Card Intelligence: every manufacturer line, findable and quotable.

The shared problem across Bran’s clients is fragmented product data. A rep firm carries 15 to 25 manufacturers; the line card is a PDF, the specs live in other people’s datasheets, and a buyer searching “300 psi bronze check valve Alabama” finds nothing. Line Card Intelligence turns that into structured, searchable product pages, with AI doing the data entry and people doing the approval.

01Ingest

Datasheets in, nothing retyped

02Extraction

AI reads the spec sheet, a person approves

03Catalog

One record per SKU, one contract for both platforms

04Experience

Filter, read the spec, download, request a quote

05Measurement

One dashboard per client

01 · Ingest

Datasheets in, nothing retyped

Manufacturer PDFs, line cards and ERP or spreadsheet exports land in a queue: WordPress media library or a Wix CMS upload. Territory and manufacturer are tagged on arrival.

PDFCSVWix CMSWP media
02 · Extraction

AI reads the spec sheet, a person approves

An LLM reads each PDF into a fixed attribute set per category (valves, fittings, pumps): size, pressure, material, connection, lead time. Anything under a confidence threshold goes to a one-click review screen.

LLM extractionconfidence gatereview queue
03 · Catalog

One record per SKU, one contract for both platforms

A WordPress custom post type with taxonomies, or a Wix CMS collection with dataset filters. Same JSON shape on both, so templates, schema and reports are written once.

WP CPTWix CMSone schema
04 · Experience

Filter, read the spec, download, request a quote

Facets by manufacturer, category, size or pressure, material, territory and lead time. Every product page carries Product, PropertyValue, DigitalDocument and BreadcrumbList JSON-LD, so it is found by people and quoted by machines.

facetsspec tabledatasheetquote form
05 · Measurement

One dashboard per client

GA4 events (filter, datasheet, quote) joined with Search Console queries per product in Looker Studio. The rep firm sees which manufacturer lines produce quote requests, by state.

GA4Search ConsoleLooker Studio
100%

Indexable product pages

From a PDF nobody can search to one URL per product, each with structured data.

80%

Quote requests attributed

Every request tied to the product, manufacturer and search query that produced it.

60%

Time to publish a line

Minutes to add a manufacturer line instead of a rebuild.

90%

Reuse across rep firms

One catalog standard for Bran’s 30+ rep-firm clients.

A working prototype already exists: 18 fictional products from 6 fictional manufacturers, facets, search, a spec table and live JSON-LD that rewrites as you filter. Try it on the evidence site.

03 · The build standard

One way to build, on WordPress and on Wix.

Bran’s clients arrive on both platforms, so the standard is written once and implemented twice: the same templates, the same field names, the same schema and the same gates. A rep firm on Wix and a manufacturer on WordPress get the same catalog, and the department stops re-deciding the basics on every project.

TEMPLATE · REP-FIRM LINE CARD · WORDPRESS OR WIX
ManufacturerCascade Valve WorksNorthline FittingsSummit PumpsPressure≥ 300 psi≥ 150 psiTerritoryAlabamaTennessee
Swing check valve300 psi · bronze
In stock · datasheet
Gate valve, OS&Y300 psi · ductile iron
2 weeks · datasheet
Ball valve, full port600 psi · stainless
In stock · datasheet
Y-strainer300 psi · bronze
In stock · datasheet
Butterfly valve200 psi · cast iron
3 weeks · datasheet
Globe valve300 psi · bronze
In stock · datasheet
Ridgeline Industrial Sales · AL

Valves, filtered for your state.

Alabama≥ 300 psiBronzeIn stock
Swing check valve300 psi · bronze · in stock
Globe valve300 psi · bronze · in stock
Y-strainer300 psi · bronze · in stock
Request a quote
Templates

Built once, used on every client

Catalog, product and spec-sheet templates: a WordPress custom post type with taxonomies, or a Wix CMS collection with dataset filters. Same field names, same schema, same layout rules on both.

  • Line card → catalog → product → datasheet
  • Same fields on WordPress and Wix
  • Quote form on every product page
Search and structure

Found by people, read by machines

Facets by manufacturer, category, size or pressure, material, territory and lead time. Every facet combination is a real, crawlable URL. Product, PropertyValue, DigitalDocument and BreadcrumbList schema on every product page.

  • Crawlable facet URLs
  • Schema library applied by template
  • Search Console and GA4 wired on launch
Gates

Nothing ships without passing

A redirect map checked URL by URL, a mobile Lighthouse budget per template, an accessibility pass at WCAG AA, and a written QA sheet the client can read.

  • Redirect map: one hop, no 404s
  • Performance budget per template
  • WCAG AA contrast and keyboard
  • Friday status: shipped, next, blockers
Week one

The first week, day by day.

Step 01Day 1

Access and crawl

Search Console, GA4, hosting and DNS access. A full crawl of getbran.com and the three client sites into one baseline sheet: schema coverage, titles, H1s, page weight, LCP.

Step 02Day 2

Schema library

Organization, Service, FAQPage and BreadcrumbList applied by template on getbran.com and checked in Google’s Rich Results test. Product and PropertyValue drafted for client catalogs.

Step 03Day 3

Own-house fixes

Team slugs and placeholder copy, the /about-1 redirect, duplicate post slugs, one H1 per post, the unused community pages set to noindex.

Step 04Day 4

Client catalog audit

One rep-firm line card mapped end to end: manufacturers, categories, spec fields, datasheets. That sheet becomes the WordPress post type or the Wix CMS collection.

Step 05Day 5

Status and estimate

The first Friday status: shipped, next, blockers. A scoped estimate in hours for the first catalog build, written to fit inside the client’s credits.

0h
Step 06Week 2

Build standard

Catalog and spec-page templates on WordPress and on Wix, the migration checklist, the performance budget and the QA gates. From here every client site starts the same way.

The standard · code

Four snippets from the standard.

Catalog state, the WordPress side of the product record, the schema on a product page, and the migration check that runs before anything goes live. Written for this proposal; the product and manufacturer are fictional.

JavaScript · facet state lives in the URL and in the schemasnippet
// one source of truth: the query stringconst [q, setQ] = useSearchParams();const items = useMemo(() => catalog.filter(p =>  (!q.get("mfr") || p.manufacturer === q.get("mfr")) &&  (!q.get("psi") || p.pressurePsi >= +q.get("psi"))), [q]);useEffect(() => setJsonLd(items[0] && productLd(items[0])), [items]);// crawlable: every facet combination is a real URL
WordPress · one product type, four taxonomies, REST onsnippet
// lc_ prefix: no collision with WooCommerce’s own product typeadd_action("init", function () {  register_post_type("lc_product", [ "public" => true, "show_in_rest" => true,    "has_archive" => "line-card", "rewrite" => ["slug" => "products"],    "supports" => ["title","editor","thumbnail","custom-fields"] ]);  foreach (["manufacturer","category","material","territory"] as $t)    register_taxonomy($t, "lc_product", [ "show_in_rest" => true,      "hierarchical" => $t === "category", "rewrite" => ["slug" => $t] ]);});// specs (pressure_psi, size_in, lead_time_days) via register_post_meta, exposed to the filter UI
JSON-LD · a product tied to its datasheetsnippet
{ "@type": "Product", "name": "Swing check valve, bolted bonnet",  "brand": { "@type": "Brand", "name": "Cascade Valve Works" },  "additionalProperty": [    { "@type": "PropertyValue", "name": "Pressure", "value": "300", "unitText": "psi" },    { "@type": "PropertyValue", "name": "Material", "value": "Bronze" } ],  "subjectOf": { "@type": "DigitalDocument", "encodingFormat": "application/pdf", "url": "…/datasheet.pdf" },  "offers": { "@type": "Offer", "availability": "https://schema.org/InStock" } }// no price: quote-based B2B. Fictional product.
Migration QA · the redirect map, checked URL by URLsnippet
# 1. every old URL lands on its new URL in one hopwhile IFS=, read -r old new; do  got=$(curl -sI -o /dev/null -w "%{http_code} %{redirect_url}" "$old")  [[ "$got" == "301 $new" ]] || echo "FAIL  $old  ->  $got"done < redirects.csv# 2. nothing indexable was lost: old sitemap against newcomm -23 <(sort old-urls.txt) <(sort new-urls.txt) > missing.txt# 3. the catalog import itself is previewed in ChangeAtlas before it runs
04 · Requirement by requirement

Everything the posting asks for, with something to open.

Nine requirements from the posting, each matched to work I have already done. Every link opens a live site, a tool or a written review, not a slide.

WordPress and Wix builds

Seven years of web development, WordPress since 2019, and a Wix manufacturer site I built and maintained

k-wav.com, the Wix site of a direct-view LED display manufacturer: product-line pages with linked spec sheets and brochures, forms, maintenance and QA. greatlakescigarfest.com, a WordPress event site built end to end. Hand-coded HTML, CSS and JavaScript on all of them.

Searchable catalogs with filtering

A 14,000-SKU wholesale catalog I built and ran, and a working line-card prototype

universalwholesaleonline.com on WooCommerce: categories, collections and facets for a B2B wholesale audience. The prototype linked below is a rep-firm line card with 18 fictional products from 6 fictional manufacturers: facets, search, a spec table and JSON-LD that rewrites as you filter.

Spec-driven product pages and technical libraries

Product pages where the spec sheet is part of the page, not an attachment

On k-wav.com each display series carried its specifications and a downloadable datasheet on the product page. The standard in section 03 makes that the default: spec table, datasheet, quote form, with Product, PropertyValue and DigitalDocument schema so the sheet is found by search.

Migrations with data cleanup and QA

Catalogs of 14,000+ SKUs moved across platforms with redirects, cleanup and full QA

At Universal Wholesale I migrated the catalog across platforms: CSV exports, cleanup, redirects and URL structure, QA before and after. I built ChangeAtlas to preview what a Matrixify or WooCommerce import will change before it runs, and the CSV Mapper to check the spreadsheet first.

Technical SEO and schema markup

Twenty written reviews with the markup to fix what they find

Salt Security: no FAQPage markup, llms.txt returning 404, 720 disallowed sitemap URLs. JB Tools: double-encoded names in H1, title and JSON-LD, no GTIN in Product schema across a 104,348-product index. Shopunitedtextile.com on Shopify: I owned its technical and on-page SEO.

Speed, Core Web Vitals and accessibility

A site I shipped this month scores 78–94 on mobile PageSpeed and 96–100 on accessibility

The reviews site: self-hosted variable fonts, inlined critical CSS, three image sizes per picture, deferred scripts, one-year asset caching. This page follows the same recipe, and its palette is checked against WCAG AA contrast, with every animation honoring prefers-reduced-motion.

Hosting, DNS, security and integrations

Fifty-two builds on one hosting account that I run myself

The builds index lists every site and tool, checked against the live hosting account. Deploys over SSH, caching and compression rules, SSL, DNS and form endpoints are mine to run and mine to fix when they break, which is what the posting’s troubleshooting duty asks for.

Estimating, time tracking and client budgets

Scoped, estimated and tracked as an independent contractor; checked like a promotion launch

I scope each job, estimate it in hours, log time against the estimate and ship. Bran’s credits expire monthly with itemized reports; my estimates would live inside them. The Deals Operating System shows the same habit: 16 checks on every deal before it goes live.

Communication, reliability and team fit

Written evidence instead of opinions, on a schedule

Every review on the site reads the same way: what was measured, what it means, what to ship. That is the Friday status I would send Alicia and Marcie: shipped, next, blockers, with numbers. Monday to Friday, flexible across Mountain Time hours, 20 hours a week to start.

05 · The first 90 days

Ninety days, then a department.

The posting describes a 90-day contract-to-hire evaluated on technical performance, communication, reliability and team fit, working with the Operations and Design Lead. This is what each month delivers against those four, with a short written status every Friday: what shipped, what’s next, blockers.

01Days 1–30

Audit and baseline

GSC and GA4 access, redirect map, schema coverage by template, a performance budget per template. The own-house items on getbran.com fixed in week one.

  • Schema coverage 5/22 → 22/22
  • Team slugs, placeholders, /about-1
  • Performance budget per template
02Days 31–60

The build standard

Catalog and spec-page templates for WordPress and Wix, the schema library, a migration checklist, QA and performance gates, and an estimating template that lives inside client credits.

  • Catalog + spec templates
  • Schema library + checklist
  • Estimating inside credits
03Days 61–90

First client under the standard

One rep-firm line card rebuilt as a filterable catalog and measured against its old PDF: indexed pages, queries, quote requests. Documented process and handoff.

  • 1 client catalog live
  • Before / after report
  • Process doc + handoff
04Day 90 +

A department with a product

Every new client site starts from the standard. Monthly performance and schema reports per client. The web department stops being a backlog and becomes a service line.

  • 30+ rep firms, 1 standard
  • Monthly client reports
  • Full-time leadership track
CriteriaTechnical performanceCriteriaCommunicationCriteriaReliabilityCriteriaTeam fit

The department should start with a build standard, not a backlog. One catalog template, one schema library, one performance budget, reused across thirty rep firms. I have built each of those pieces before. I would like to build them for Bran.

Mousa Batarseh · Web development & technical SEO · Warren, MI
06 · Let’s talk

Alicia, Marcie: thirty minutes, screen-shared.

  1. A 30-minute walkthroughThe review, the prototype, the plan. Bring one client site and I’ll audit it live.
  2. Access and baselineSearch Console, GA4 and hosting; the week-one own-house fixes on getbran.com.
  3. Standard and first buildTemplates, schema library, the first rep-firm line card measured before and after.
  4. ScaleEvery new client site starts from the standard, with a monthly report per client.

Monday to Friday, flexible across Mountain Time business hours, about 20 hours a week to start. Michigan-based, Eastern Time.

Email hireme@mousabatarseh.com (248) 810-1816