at a glance
Problem
A sub-brand with no site of its own, sharing a server that was slowing down the parent company's live site.
My role
Solo freelancer, from scoping and contract to build, performance work and handoff.
Key decisions
A catalog instead of a store, profiling before fixing, and clean separation between the two brands.
Outcome
A live B2B site with 33 products, admin pages cut from about 12.7s to 5s, and a client who runs it without me.
overview
A small-budget brand launch that turned into a performance and infrastructure rescue
Ultratab makes precision cutting, welding, inspection and assembly equipment for the roller shade industry. Its products were buried inside the parent company's site, so the brand had no standalone presence and little search visibility. I was brought back by the client, after building their main site, to give Ultratab a B2B site of its own.
In short: I ran it end to end as a solo freelancer, from scoping and contract to build and handoff. Along the way I diagnosed a shared-server problem that was taking down the client's live site, and fixed it without interrupting the business.
Role
Solo freelancer: discovery, scoping and contract, technical setup, build, performance engineering, SEO direction, client training
Stack
WordPress • WooCommerce (catalog mode) • Kalium • PHP 8 • OPcache • page caching • Redis object cache • authenticated SMTP • shared hosting
Client team
Owner (decision maker), infrastructure lead, and a marketing manager new to the role; a small team working asynchronously
Skills shown: customer discovery and scoping • stakeholder communication • server-side performance diagnosis • caching strategy • hosting migration and vendor escalation • email deliverability • technical SEO and multi-domain content strategy • client enablement
problem
Give a sub-brand its own home, without breaking the parent
The goal was to move Ultratab onto its own domain as a B2B site. First priority: search ranking and brand recognition, for the brand and for each product. Second: lead generation through inquiries and demo requests. Explicitly not: a cart or checkout.
Constraints
• A small budget and an informal, asynchronous client process
• Copy and images owned by a marketing manager new to the role
• Both sites on one shared hosting account, so work on the new site could take
down the live one
Success, defined up front
All agreed pages live, working category filters, forms routing correctly, Google PageSpeed 75+ on mobile, Search Console and Analytics tracking, sitemap indexed, and consistent rendering across browsers.
process
Scoped like a product, not a page build
From intake to build
• Discovery: an intake call with the owner and marketing
manager to align on goals, structure and timeline, then a kickoff with a written
recap.
• Agreement: a formal work agreement covering scope, an
out-of-scope list, revision rounds and feedback windows.
• Roadmap: six phases (discovery, environment, design,
content, SEO, QA and launch), each with estimates and success metrics.
• Information architecture: products by category (cutting,
welding, inspection, assembly, accessories), industries served, support
services, news, about, and a contact page with demo booking.
• Catalog, not a store: WooCommerce in catalog mode gives
browsing and filtering without a cart. The live catalog has 33 machines and
accessories, each with its own page and a quote button.
Cost-aware advice
The client wanted to reuse the parent site's theme. I flagged that a second site needs a second license and shortlisted alternatives. They chose a new theme, which gave Ultratab its own visual identity without the extra cost.
performance rescue
Measure first, then fix what the data shows
Some admin pages took 11 to 13 seconds to generate, and a product import kept crashing the server. Instead of guessing, I profiled with Query Monitor. The database was fine: under one second even at 300 to 800 queries per page. The bottleneck was PHP.
What I found and fixed
• OPcache was off, so every PHP file recompiled on every
request. Enabled it.
• An unused page builder loaded on every admin screen.
Removing it cut page generation from about 12.7s to about 5s.
• The import crash: the export held 111 remote image URLs for
just 24 products, and WooCommerce downloads and resizes each one in the same
request. I ran a text-only import and attached images from local files.
• Caching: confirmed the server actually ran Apache before
choosing a page cache, enabled faster image processing, then added Redis object
caching shared safely between the two sites.
The hidden constraint
A brief outage on the live parent site traced back to work on the new site: both shared one CPU pool. I explained it to the owner in plain language with three options (upgrade, separate accounts, or optimize in place), then escalated to the host, who confirmed the legacy server couldn't run Redis and offered a migration.
I coordinated the one-way move of both domains: approval, verified backups, standing by at cutover, and checking both sites after. The parent site came out noticeably faster with lower CPU use, and I wrote a runbook for the caching setup.
brand separation
Two brands, one server, no overlap
Search
Ultratab product pages get their own copy instead of duplicating the parent site's, avoiding duplicate-content penalties. Media is hosted on Ultratab's own server. Every page has a descriptive title and meta description, one clear heading, breadcrumbs and Organization structured data, plus a sitemap and Search Console.
Leads
Quote and demo buttons point to Ultratab's own pages, and forms send to an Ultratab mailbox, so new leads land with the new brand.
Account emails on the parent site were arriving as raw HTML because mail fell back to unauthenticated delivery. I routed it through authenticated SMTP, then set up the same on Ultratab.
handoff
Built so the client can run it without me
The owner wanted independence, not a retainer. I designed the handoff around the marketing manager: she edits text herself, sends me one consolidated list of style and layout changes, and the team uses AI tools for future SEO content.
Clean scope
Parent-site fixes (hosting, email, bugs) were tracked separately from the Ultratab build, with approval before any extra work. When the schedule moved, I flagged it early with documented causes.
What it shows
The same skills an embedded engineer needs: finding the real problem in an unfamiliar system, explaining trade-offs to non-technical decision makers, and leaving the client able to own what was built.
reflection
The site was the easy part
The brief was a website. The real work was protecting a live business while changing the ground under it. Profiling before fixing, and turning a server problem into three clear options for the owner, mattered more than any page layout.