Progress Horizon Trading: the journey from first commit to a site that publishes itself

Progress Horizon Trading: the journey from first commit to a site that publishes itself

Progress Horizon Trading: the journey from first commit to a site that publishes itself

Progress Horizon Trading distributes electrical, mechanical and architectural building systems for large infrastructure projects and represents 22 manufacturer brands across 144 products. Alnitak has been its web partner from the first line of code in October 2024: we built the first site, grew it into a bilingual catalogue with its first SEO layer through 2025, and in August 2026 audited our own work, rebuilt it in one week, and gave the client the content API, admin dashboard and measurement layer it needed to publish the authority it already held.

2024: building the first site

The engagement started on 11 October 2024 with an empty Next.js project and a distributor that had a catalogue in spreadsheets and no way to show it. Within a month the home page, the three product families, categories and subcategories and the main-category routes were live, packaged in Docker so the client could run it anywhere. November and December added the mechanical and electrical catalogues and two rounds of client revisions; version 1 shipped on 28 December 2024.

The requirement at that stage was speed to a credible presence: a site that a procurement engineer could send to a colleague. The trade-offs we made to hit it, a static JSON catalogue and a single-language route structure with an Arabic switch layered on top, are the ones we would come back to fix ourselves two years later.

2025: growing the catalogue and the first SEO layer

Through 2025 the site grew with the business. A first keyword pass in February, architecture product imagery and motion in March, and version 2.0 in April with unique page titles across the catalogue, an image clean-up and a repeatable server update script. In May we added structured data for the organisation and breadcrumbs for every brand.

Each step was reviewed with the client on a live build and shipped the same week. The catalogue reached 144 products across 53 subcategories and 22 brands, and the pattern of the relationship settled: small, frequent releases, and a landing-page maintenance retainer that kept us close to the business.

2026: the outage and the honest audit

In 2026 the domain registration lapsed for roughly three months and, separately, the TLS certificate expired. Neither had an owner: not on the client's side, and not on ours. Search engines forgot most of the URLs and every visitor met a browser security warning. We restored the site without an invoice, and then did something most vendors avoid: we audited our own build with the same rigour we would apply to a stranger's.

The audit found four failures stacked on top of each other. The lapse and the certificate were two. The other two were ours: two parallel route trees serving the same product at two or three addresses with metadata on only four routes and a hard-coded left-to-right layout, and a content void with a median of zero words per product page and Arabic on one product in 144. We wrote it up as a three-layer model (can search reach the site, understand it, and find anything worth showing) and turned it into a four-phase programme with entry gates and acceptance criteria. Then we walked the client through it on a 45-minute screen-share, with the commercial decision-maker in the room and no proposal attached, and followed up with a one-page plain-language update they could forward internally without editing.

August 2026: the rebuild in one week

Between 27 and 30 August 2026, 18 commits changed 555 files. Routes were consolidated into one locale-aware tree with English at the root and Arabic under /ar, chosen to keep every existing backlink and indexed URL alive. Every route now emits its own title, description, self-referencing canonical and hreflang. The sitemap is generated from the catalogue, 478 URLs across both languages, with fake modification dates removed rather than invented. The organisation, its parent group and each of the 22 brands are defined once in a single structured-data graph.

The layouts were rebuilt for RTL rather than mirrored, with Arabic and Latin scripts served by separate typefaces through font subsetting. A glossary-driven script filled the Arabic catalogue and refused to pass English off as Arabic. The site moved from managed hosting to a self-managed server with timestamped releases and symlink rollback, and the images moved to a sharp-generated AVIF and WebP pipeline that never upscales. In September we tightened the structured data further and added HSTS.

The system that fixes the real problem

The content was empty not because nobody had anything to say, but because saying it required an engineer. So the rebuild included an Express and MongoDB content API with 12 bilingual document models, every text field a required English and Arabic pair, and an 11-screen admin dashboard behind a server-side proxy. Publishing from the dashboard triggers a production deploy that bakes the live content into the site.

That is the requirement we should have written in 2024, and it is the one that turns a website into an asset the client operates: a product description is now a form field, not a ticket.

Driving sales

The measurement layer answers the question a distributor actually asks: which products and brands get looked at, and which turn into a quotation request, in which language. Twelve call-to-action surfaces across five channels each report their own event, so a map click is never counted as a lead. One object describes where a contact attempt came from and which product it concerned, and feeds both the analytics event and the quotation-form prefill, so attribution and the lead can never disagree.

Catalogue browsing reports in the standard e-commerce event shape, so the most-viewed products and brands are a built-in report. The visitor's language rides on every event, so the client can finally see whether Arabic visitors convert differently from English ones.

What comes next

Every claim is measured against a Day-0 baseline both sides signed before the rebuild shipped, and the client hears from us monthly with the index count. Content is the current ceiling: the next phase publishes the specification tables, standards references and application notes the client already owns, validated by its own engineers, through the dashboard we built. Results will be reported against the archived baseline when the 120-day window closes.

Key Features

  • Built from scratch in October 2024: home page, product families, categories and subcategories, mechanical and electrical catalogues, Docker packaging, v1 by December
  • 2025: first keyword pass, unique page titles, image cleanup, JSON-LD for the organisation and brand breadcrumbs, v2.0 in April
  • August 2026: our own audit found four compounding indexing failures, written up as a three-layer model with a phased recovery programme
  • One-week rebuild: a single locale-aware route tree, hreflang, a 478-URL bilingual sitemap, true RTL layouts and Arabic typefaces, 369 interface strings per language
  • A single structured-data graph: organisation, parent group and 22 brands defined once and referenced everywhere
  • Content API with 12 bilingual document models and an 11-screen admin dashboard, live with a publish-to-deploy pipeline
  • GA4 attribution across 12 CTA surfaces and 5 contact channels, with the visitor's language on every event; self-managed hosting with symlink rollback

Business Impact

Two years in, the client owns a site search engines can reach, understand and attribute: metadata coverage went from 4 routes to every route, the sitemap grew to 478 bilingual URLs, and Arabic became a first-class column in the data rather than a translation queue. Quotation requests carry the page, product and language they came from, so sales can see which brands and products generate enquiries. Product descriptions are now a form field, not a developer ticket. Indexing outcomes are measured against a countersigned baseline at a 120-day checkpoint that has not yet closed; this page reports the journey and the work, not a traffic figure.

Technology Stack

  • Next.js 14
  • React
  • TypeScript
  • Tailwind CSS
  • next-intl
  • Express
  • MongoDB
  • nginx
  • pm2
  • GitHub Actions
  • GA4
  • Google Tag Manager
  • JSON-LD
So What is Next?

Want a web partner who stays for the second year and audits their own work? Send us the domain. We diagnose before we quote.