Introduction
When ProSilicones64 reached out, their website had been accumulating patches for years. It was a WordPress installation with 23 active plugins, four security vulnerabilities (two of them critical), and a 6.2-second load time that made any procurement engineer close the tab before even seeing the catalogue.
The problem wasn't the design. The problem was that they'd built a house on top of a house on top of another house, and now nobody knew what would break when you touched something.
This case study explains how I scrapped everything and built from scratch a system designed specifically for a technical industrial catalogue. Real code, justified decisions, and measurable results.
The Problem
First thing I did was SSH into the server and enable the MySQL query log. I opened a random product page—a silicone profile for railway door sealing—and counted the queries.
45 queries. To display a page with a title, description, three images, and a technical specifications table.
Why so many? Because each plugin was doing its own thing with no coordination. The SEO plugin queried the database. The caching plugin queried to check if there was cache. The translation plugin queried three times per field. The theme queried global options on every load. And so on, up to 45.
TTFB (Time To First Byte) was sitting at 890ms. That means the server took nearly a second just to start sending data, before the browser could even begin rendering.
- 23 active plugins with no dependency control
- Page load time: 6.2 seconds
- TTFB: 890ms (nearly a second just to start)
- 45 MySQL queries per product page
- 4 active vulnerabilities, 2 critical
- Static catalogue impossible to scale
- No Schema.org markup whatsoever
For an industrial company where procurement engineers have 15 tabs open comparing suppliers, that's commercial suicide.
The decision: scrap everything and rebuild from scratch
There were two options. First: optimise what existed—disable plugins, install aggressive caching, hope nothing breaks. Second: migrate to a bespoke system designed specifically for what ProSilicones64 actually needed.
I chose the second. ProSilicones64 isn't an e-commerce store or a corporate blog. It's an industrial manufacturer with a complex technical catalogue: 30 products, 19 silicone compound series with different properties, 10 industrial sectors, 127 standards and certifications. Each product can be manufactured in multiple series, each series has specific temperature and hardness ranges, each sector requires specific certifications.
WordPress wasn't built for this. You can force it with custom fields plugins and custom taxonomies, but you end up with a monster that nobody understands and that breaks every time you update something.
The architecture: straight PHP, relational MySQL, zero unnecessary dependencies
I didn't use Laravel or Symfony. Not because they're bad—they're excellent frameworks—but because for this project they added complexity without real benefit. ProSilicones64 doesn't need an ORM abstracting the database; it needs optimised SQL queries that return exactly what each page needs to display.
Each controller does exactly one thing. The product page controller calls the product service, which calls the repository, which executes a single SQL query with the necessary JOINs. One request, one query, one response.
Directory structure
- /app/controllers → Receive request, call service, return view
- /app/services → Business logic: which series apply to which sectors
- /app/repositories → Pure SQL queries, one function per data requirement
- /app/views → Plain PHP with HTML, no templating engine
Relational database designed for the business
- products → categories: extrusion, moulding, technical rubbers, sheets
- silicone_series → 19 series with temperature range (-60°C to +300°C) and hardness (30-90 Shore A)
- sectors → railway, medical, food-grade, aerospace...
- standards_certifications → 127 records: ISO, EN 45545-2, FDA, USP Class VI
- product_series_sector → pivot table connecting everything
Three-tier caching system
- Tier 1: PHP OPcache — compiled bytecode stored in memory
- Tier 2: Query cache — results stored as JSON with timestamp, trigger-based invalidation
- Tier 3: HTTP cache — Cache-Control headers for browser and CDN
Proper technical SEO
- Schema.org Product markup on all product pages with technical properties
- Clean URLs: from /product/?id=847&cat=3 to /products/railway-silicone-profiles/
- 301 redirects to preserve external link equity
- Dynamic XML sitemap generated from database
The results: real numbers, not projections
After three months with the new system in production, here's the comparative data. The last number is the one that matters: from 8 monthly quote requests to 31. Not because the design looks better—it's virtually identical—but because the site loads fast, products are easy to find, and the contact form works without JavaScript errors.
Before/after comparison
| Metric | WordPress (before) | Custom system (after) |
|---|---|---|
| Page load time | 6.2s | 1.1s |
| TTFB | 890ms | 180ms |
| SQL queries per page | 45 | 8 |
| Active vulnerabilities | 4 | 0 |
| Plugins/dependencies | 23 | 0 |
| Valid pages in Search Console | 68% | 94% |
| Quote requests/month | 8 | 31 |
Conclusion
This project confirmed something I already suspected: for industrial companies with technical catalogues, WordPress is the wrong choice. Not because it's bad, but because it was designed for a different type of content.
A personal blog, a five-page corporate site, a standard online shop... WordPress handles those perfectly well. But when you have complex relationships between products, series, sectors, and regulatory standards, you need a database that reflects that complexity. And when you need real speed to compete with other manufacturers, you need full control over every query that runs.
ProSilicones64 now has a website that can scale without degrading. Adding a new silicone series means inserting rows in the database, not installing another plugin. Adding a new sector means creating relationships, not hacking shortcodes.
And when they want to redesign the front-end five years from now, they'll be able to do it without touching the business logic. Because they're separated. Because that's how you build systems that last.
If your technical catalogue is running on WordPress and you've noticed it getting slower, updates breaking things, or procurement engineers abandoning before reaching the contact form... you're probably in the same situation ProSilicones64 was a year ago. I can run a technical audit on your site: measure real load times, count queries, identify bottlenecks, assess vulnerabilities. No obligation, no fluff. Verifiable data you can use to make decisions.
Request technical audit →