
Container Box Industri supplies industrial plastic container boxes and multipurpose crates from well-known brands to businesses across Indonesia. The website brings the entire range into one catalog that can be browsed by category or by brand, then ordered through WhatsApp with a message that already names the product. Every product can also be saved as an image complete with its photo, name, and price, making it easy to share over chat.
Work like this is usually split between a developer, a UI/UX designer, a graphic designer, and a marketer. On this project, one person holds all four of those skill sets, so every decision came from someone who understood the whole project, not just their own part of it.
16
standards met, from code to marketing.
Business impact here is measured across 5 areas: Presence, Quality, Trust, Conversion and Growth. Together they cover how the business is found, perceived, and acted on.
Every product findable, not buried in chats
Before
When a supplier shares its range through chat photos, price lists, and brochure files, a buyer has to dig through old messages to find a specific container, and nobody searching on Google can find the products at all.
After
Every product has its own page, organized by category and by brand, so the full range stays in one place a buyer can return to and can be found directly through search.
Each project draws on a mix of disciplines: here’s how they came together on this one.
The tools and technologies that came together to bring this project to life.










The problems that came up while building this project, and what came out of solving them.
A Brand Color Too Light to Use as Text
The brand yellow has a contrast ratio of about 1.5:1 against white, far too low for readable text, yet the design called for the second line of the hero headline to stand out in the brand color. Instead of darkening the brand, the headline keeps black text on top of a yellow marker band that repeats on every wrapped line, and a separate set of color tokens decides which text goes on dark surfaces and which goes on brand-colored buttons.
One Codebase Behind Many Websites
The same core theme and plugin serve a whole family of catalog websites, and every per-client file override freezes an old copy that stops receiving core fixes. Client differences were pushed into data, design tokens and configuration per domain, with file overrides kept to the minimum and security files forbidden from being overridden at all, while the build reports every override so drift is visible each time the core changes.
Hiding Descriptions Took the SEO Meta With Them
Category descriptions were filtered out sitewide so they would never appear on the page, but the SEO plugin reads its meta description through the same function, so a category with a written description quietly lost a meta description that was already indexed. The filter now steps aside while the page head is being generated, keeping the meta tag while the description stays hidden on the page.
Filter Combinations Without an End
Every mix of categories, tags, brands, and price ranges produces a new URL, so a large catalog can generate an almost unlimited number of pages for crawlers to fetch. Selection limits are enforced on the server, filtered pages are marked noindex, and robots rules keep those URL patterns away from crawlers entirely.
The technical problems fixed while building this project.
Core fixes reach every site automatically
Malformed requests no longer crash pages
194 KB loaded only on demand
Every image served as WebP
Meta descriptions kept intact
Filter combinations kept out of the index
887 pages verified after launch
Before
In a core shared by many websites, a client-specific copy of a security file would quietly stop receiving every fix made to the core afterward.
After
Security files are forbidden from being overridden, client differences live in configuration and design tokens, and the build lists every override per client so drift stays visible.
Before
Unexpected request parameters, such as arrays where text was expected, can make WordPress functions throw fatal errors and return a server error to any visitor using that URL.
After
Incoming parameters are validated and rejected before they reach the code that would fail, so malformed requests get a clean response instead of an error page.
Before
The library that renders the downloadable product image weighs 194 KB and would be downloaded and parsed on every product page, even though most visitors never use it.
After
The library is fetched only when a visitor opens the share menu, and every other script loads only on the pages that use it.
Before
An image-heavy catalog served in older formats would make every page slow, especially over mobile connections.
After
Every image is served as WebP, and all 8,477 images were checked after launch to confirm none were broken.
Before
Filtering category descriptions out sitewide also removed the meta description the SEO plugin builds from them, silently costing an indexed page its search snippet.
After
The filter steps aside while the page head is generated, so meta descriptions stay intact while descriptions remain hidden on the page.
Before
Every combination of categories, tags, brands, and prices created a new crawlable URL, wasting crawl budget and server resources on near-duplicate pages.
After
Selection limits are enforced on the server, filtered pages carry noindex, and robots rules keep those patterns away from crawlers while still allowing AI search crawlers.
Before
Spot-checking a few pages after deployment can miss broken links or missing images deep in a large catalog.
After
The database was test-imported into a temporary copy before go-live, and the live site was crawled in full afterward, covering all 887 pages and 8,477 images.