Fadhil Official Logo
Fadhil NuruzzamanSoftware Engineer
E-CatalogPersonal2026

Harvest Sun: White-Label E-Catalog Platform

Harvest Sun combines a company profile, a blog, and a full product catalog into a single website, browsable the way an online store would be, with search, category filters, sorting, and a related-products section, minus the checkout. Ordering happens directly over WhatsApp instead. It's built flexible enough to fit almost any retail business, from groceries and clothing to food, electronics, furniture, and home goods, so a new business can launch on the same proven foundation instead of starting from scratch. The products shown on the demo are placeholders, but every feature and flow behind them is already complete, so swapping in real products is all it takes to go live.

Preview

Walk Through the Site

A scrollable look at the finished site, exactly as a visitor would browse it.

Harvest Sun: White-Label E-Catalog Platform desktop preview

Desktop

Harvest Sun: White-Label E-Catalog Platform mobile preview

Mobile

Tech Stack

Technologies Powering the Build

The tools and technologies that came together to bring this project to life.

HTML logo
CSS logo
JavaScript logo
PHP logo
Wordpress logo
Blocksy logo
WooCommerce logo
Alpine.js logo
Tailwind CSS logo
VSCode logo

Roles

A Skill-by-Skill Breakdown

Each project draws on a mix of disciplines: here's how they came together on this one.

Web Development

  • Built the theme as a child theme on Blocksy plus a companion settings plugin, splitting reusable logic like Customizer controls and custom post types into the plugin so it survives independent of theme updates.
  • Structured all six static pages as thin PHP orchestrators that assemble self-contained section partials, each rendering its own ACF fields and markup, so a new page can be composed from existing sections instead of duplicating code.
  • Turned WooCommerce into a catalog without checkout by disabling purchasability while deliberately leaving its add-to-cart hook registered, after tracing an internal Blocksy behavior where removing that hook silently deleted unrelated custom buttons sharing its priority range.
  • Built branding as CSS custom properties driven entirely from the WordPress Customizer, including an automatic hex-to-RGB generator so Tailwind's opacity modifiers work against colors an admin can change at any time.

UI/UX Design

  • Designed navigation around how each breakpoint is actually used, hover-driven dropdowns on desktop and tablet, tap-driven on mobile, with mobile submenus always expanded instead of collapsed behind a toggle.
  • Redesigned the sticky header to keep only the top utility row anchored while the nav row scrolls with the page, after an earlier collapsing-header animation caused scroll-jump loops on load.
  • Designed off-canvas drawers for mobile, a category browser sliding in from the left and the main menu from the right, each mirroring the side of the button that opened it.
  • Designed the responsive grid rhythm for repeating card sections to step down column counts gracefully across breakpoints instead of ever collapsing straight to one column.
  • Designed the Customizer's branding controls so a non-technical admin can reskin the whole site's color and typography system from a handful of fields, without touching code.

Graphic Design

  • Designed the Harvest Sun brand identity and logo from scratch as the demo brand for this boilerplate.
  • Standardized every icon sitewide to a single outline style sourced from an icon library, including social brand marks that are usually filled by convention, replacing a mix of hand-drawn and filled icons found during a design audit.
  • Created the site's favicon.
  • Compressed every image to WebP and mostly under 200KB before upload, without a visible drop in quality.

Digital Marketing

  • Designed the catalog experience around WhatsApp as the actual point of contact, letting a business start taking orders without needing a payment gateway or courier integration first.
  • Added search, category filters, and sorting so shoppers can find what they want in a large catalog without scrolling through everything, keeping them from bouncing before they ever reach a product.
  • Built a related-products section on every product page, a straightforward cross-sell that puts more of the catalog in front of a shopper who's already interested.
  • Gave every product its own detail page instead of one long scrolling list, so individual products can be found and indexed through search instead of only the homepage.
  • Kept category and product data in WooCommerce's native taxonomy structure instead of custom fields, so search engines and future SEO tooling can read it the way they already expect.

Highlights

Behind the Scenes

A closer look at what the finished product offers, the problems solved during development, and the results.

Key Features

  • Fully responsive across mobile, tablet, and desktop.
  • Combines a company profile, a blog, and a full product catalog into one website.
  • Six purpose-built pages, Home, About, Customers, How to Order, Contact, and Gallery, each with its own dedicated content.
  • A stats highlight strip on the homepage.
  • A "why choose us" section highlighting the platform's strengths.
  • A product categories showcase on the homepage.
  • A trusted-by section featuring client and partner logos.
  • A recent-deliveries section showing proof of past shipments to build buyer trust.
  • A dedicated Customers page presenting featured testimonials.
  • A dedicated How to Order page walking a first-time visitor through the WhatsApp ordering flow step by step.
  • Product search, plus sorting by newest, oldest, and price low to high or high to low.
  • Filter products by price range or category.
  • Every product page includes an image carousel, a full description, and a "Buy on WhatsApp" button that skips checkout entirely.
  • Share any product by copying its link or sharing straight to Facebook or WhatsApp.
  • Download a product's photo directly, so a customer or the support team can ask about a specific item just from the image, no link required.
  • Every product's data can be added or edited from the dashboard, with a built-in guide for whoever manages it.
  • Every image compressed to WebP before upload.
  • Multi-brand ready, the whole color palette and typography can be reskinned from the WordPress admin.

Challenges Faced

A Filter Selection That Silently Returned Nothing

WooCommerce's category archive page doesn't add its own category to the query's filter conditions at the point custom code can hook in, so a custom category filter ended up stacking a second, unrelated condition on top instead of replacing it. Picking any category from the sidebar while already on a category page returned an empty grid with no error to explain why, fixed by explicitly clearing the archive's own condition before the custom filter runs.

A Refactor That Silently Deleted a Section's Spacing

A shared PHP helper that wraps every section with consistent vertical spacing was moved into a new folder during a cleanup, but the build tool that scans for Tailwind classes wasn't told to look there, since it reads files as text rather than running PHP. Its classes dropped out of the compiled CSS with no error anywhere, and the spacing between every section on every page quietly collapsed until it was caught.

A Single Plugin Away From Taking the Whole Site Down

All six pages read their content through one plugin's field function, called directly across dozens of places with no fallback. If that plugin were ever deactivated or failed to load, every page would fail with a fatal error at once instead of degrading, closed by wrapping every call behind a compatibility layer and verifying the site stayed up with the plugin disabled live.

Lessons Learned

  • Debugging a WordPress hook by watching what it actually contains at runtime, not just trusting what its name implies, is what surfaced both the category filter bug and the query relation bug, and neither was visible from reading the code alone.
  • A build tool that reads files as text has no idea a helper function exists once that file moves, a config's file paths need to be treated as part of a refactor's checklist, not a one-time setup step.
  • Wrapping a fragile integration point in a compatibility layer only proves its worth once it's tested against actual failure, not just against the happy path, disabling the plugin live was what actually confirmed the shim worked.
  • Centralizing brand colors into Customizer-driven tokens instead of hardcoding them cost more upfront than a single-brand build, but turned reskinning into a configuration change instead of a rewrite.

Business Impact

What Changed for the Business

How this project changes things for the business and the customers it serves.

Information that stays findable, not buried

Built for this business, not copied from a template

Images compressed automatically, every time

Security considered from day one

A real place to learn who they're buying from

Browse everything, no scrolling required

Everything needed to decide, in one page

A clear guide before the first question

Every way to reach the business, one place

SEO reach beyond just the product pages

Presence

Information That Gets Buried in a Feed

Before

Most businesses today rely only on social media, Instagram, Facebook, TikTok, to share information, but a feed is built to bury old posts under new ones, so anything specific gets harder to find the moment something newer gets posted.

After

A website organizes every piece of information by page and section instead of by post date, so specific details always stay exactly where a customer expects to find them.

Quality

A Website That Looks Like Everyone Else's

Before

A site generated in minutes by an AI tool or built from a generic template tends to look and feel like thousands of other sites built the exact same way, with just a logo swapped in.

After

This site was designed and built specifically for the business's own branding, not a generic look. A clear visual hierarchy, properly sized typography, and consistent spacing keep every page feeling clean and professional. It also works the same way smoothly across desktop, tablet, and phone, making it just as easy for customers to browse the catalog as it is for the team to manage it.

Quality

Slow Pages Losing Customers Before They Even Look

Before

A catalog site built without performance in mind, with unoptimized photos, loads slowly, and most visitors give up within seconds, especially on mobile, often before they've even seen a single product.

After

Every image is automatically compressed to WebP and kept under 200KB the moment it's uploaded. The site is also built on a lightweight, efficient foundation instead of being weighed down with unnecessary extras, so pages stay fast without anyone having to remember to optimize anything by hand.

Quality

A Website That's an Easy Target for Hackers

Before

A site thrown together quickly with an AI website builder or a generic template usually has no real security behind it, leaving it wide open to being hacked or having its data stolen, something a business only discovers once the damage is already done.

After

Security was part of the process from the start, not an afterthought, keeping the entire system updated, avoiding common misconfigurations, and writing every custom line of code with security in mind, so the business's reputation and customer data stay protected.

Trust

Nowhere for Customers to Learn Who They're Buying From

Before

A business known only through scattered social posts gives a customer no real place to learn who's actually behind it.

After

A company profile page shows who's behind the business, a testimonials section shows real feedback from past customers, a recent-deliveries section proves the business is still active, and a gallery shows the workspace and process behind it, giving customers everything they need to trust it before they even ask.

Conversion

No Way to See What's Actually Available

Before

Without a catalog page, a customer has no single place to see everything for sale, only a feed of old posts to scroll back through, hoping to spot every product that was ever shared.

After

A searchable, filterable product catalog lets a customer see everything available at a glance and narrow it down instantly, instead of scrolling through months of posts.

Conversion

A Product Page Missing the Basics

Before

Even after spotting something on social media, a customer usually can't see every angle, read a full description, or place an order without a back-and-forth of comments and DMs first.

After

Every product page has a full photo carousel, a complete description, and a one-tap WhatsApp button, everything needed to see it, understand it, and order it without ever leaving the page.

Conversion

First-Time Visitors Unsure How Ordering Even Works

Before

A visitor who's never ordered from a WhatsApp-based store may hesitate, unsure whether it's safe or how the process works.

After

A step-by-step how-to-order page walks a first-time visitor through the exact process before they ever have to ask.

Conversion

Every Way to Reach the Business Scattered Everywhere

Before

Phone number, address, email, social links, a customer needing to reach the business has to hunt for whichever one they can find.

After

A dedicated contact page puts every way to reach the business in one place, and an FAQ section answers the questions that come up again and again, so customers get instant answers without hunting, and the team isn't stuck repeating the same replies all day.

Growth

No Content Bringing Customers in Beyond Direct Search

Before

A business with no articles or guides is hard to find in search results, and has nothing to offer a customer besides the products themselves.

After

A blog gives space for SEO-friendly articles and practical tips for customers, building organic reach and giving them a reason to come back beyond just buying.

Technical Impact

Technical Problems Solved

The technical problems fixed while building this project.

Filtering always returns the right products

Zero single point of failure across all 6 pages

Images under 200KB

Automatic compression on every future upload

One shared source for section spacing sitewide

Critical Fix

A Category Filter That Silently Returned Nothing

Before

Picking a second category from the sidebar filter while already viewing a category archive returned zero products, with no error to explain why.

After

The archive's own category condition is explicitly cleared before the custom filter runs, so filtering always reflects what the shopper actually picked.

Critical Fix

A Single Point of Failure Across Every Page

Before

All six pages read their content through one plugin's field function with no fallback, so a disabled or failing plugin would fatal-error the entire site at once.

After

A compatibility shim wraps every call and returns safely when the plugin is unavailable, verified by disabling it live with the site staying fully up.

Performance

Product Photos That Slow Every Page Down

Before

Uncompressed images on an image-heavy catalog would have made every page slow to load, especially on a customer's mobile connection.

After

Every image is compressed to WebP before upload, keeping pages fast everywhere they're viewed.

Performance

Future Uploads Had No Safeguard Against Bloated File Sizes

Before

Compression only happened as a one-time manual pass, so any photo the client uploads later would arrive at full, uncompressed size.

After

A custom pipeline now compresses and converts every future upload automatically, so pages stay fast without relying on anyone remembering to optimize an image by hand.

Improvement

Section Spacing With No Single Source of Truth

Before

Vertical rhythm between sections could silently drift if the build tool ever lost track of the helper function defining it, as it briefly did during a refactor.

After

The gotcha is documented and guarded against, and every page's section spacing stays consistent by construction from one shared helper.