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.
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
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.
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.
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.
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.
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.
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.
Datasheets in, nothing retyped
AI reads the spec sheet, a person approves
One record per SKU, one contract for both platforms
Filter, read the spec, download, request a quote
One dashboard per client
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.
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.
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.
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.
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.
Indexable product pages
From a PDF nobody can search to one URL per product, each with structured data.
Quote requests attributed
Every request tied to the product, manufacturer and search query that produced it.
Time to publish a line
Minutes to add a manufacturer line instead of a rebuild.
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.
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.
Valves, filtered for your state.
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
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
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
The first week, day by day.
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.
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.
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.
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.
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.
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.
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.
// 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
// 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
{ "@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.
# 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
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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
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
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
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
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.
Alicia, Marcie: thirty minutes, screen-shared.
- A 30-minute walkthroughThe review, the prototype, the plan. Bring one client site and I’ll audit it live.
- Access and baselineSearch Console, GA4 and hosting; the week-one own-house fixes on getbran.com.
- Standard and first buildTemplates, schema library, the first rep-firm line card measured before and after.
- 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-1816Independent proposal by Mousa Batarseh, Warren, MI, submitted with his application for Bran Marketing’s Web Development & Technical SEO Lead role. Not affiliated with, endorsed by, or created for Bran Marketing or its clients. Bran Marketing, Marsh & Moore, Tim Morales & Associates and Armstrong-Weatherly are named only as evidence; figures come from public pages sampled Sep 22, 2026 and may have changed. Products, manufacturers and the rep firm in the mockups are fictional. Palette drawn from getbran.com.