◆ booting phatdev.net
<PhatLam/>
000%
← All case studies
Websites and stores · WooCommerce · WordPress

Tan Doanh: a custom theme, a PC build tool and installments, mobile PageSpeed from 65 to 96

The computer-parts shop Tan Doanh needed a page that is fast on phones and a place for customers to put a build together. I rebuilt the theme and wrote a build tool with compatibility checks and installments right on the page.

Published 8 Nov 2026 · 6 min read

Tan Doanh: a custom theme, a PC build tool and installments, mobile PageSpeed from 65 to 96
Client
Tan Doanh (computer parts and prebuilt PC shop)
Industry
Computer parts and PC retail
Year
2026
Role
Planning, architecture and operations (code written with Claude Code)
Duration
From 30 Jun 2026, still being refined
Stack
  • WordPress
  • WooCommerce
  • PHP
  • JavaScript
  • Redis
  • Nginx
65 → 96
Home page mobile PageSpeed, first version vs after tuning (3 Jul 2026)
97 / 100
PageSpeed mobile / desktop of the PC build page, measured 8 Nov 2026
11
part groups in one build table
4
installment terms compared right on the build

Background

Tan Doanh is a shop that sells computer parts and prebuilt desktops. Its customers rarely buy a single part. They want to put a whole machine together, so they need to know which parts fit each other, whether the power supply is strong enough, and what they would pay each month on installments.

The shop's site, tandoanh.vn, ran on an older, fairly heavy theme and scored low on mobile speed. I rebuilt the interface as a custom theme for WordPress and WooCommerce, then wrote a tool that lets customers assemble a build right on the page. The work started on 30 Jun 2026.

The new theme now runs on tandoanh.vn. The latest measurements in this story are from 8 Nov 2026.

The Tan Doanh home page on a desktop
Home page, light theme. The logo and phone numbers are hidden in this image. The interface text is in Vietnamese.

The problem

Three jobs had to be done at once, and they pull in different directions.

The first is speed. The first version of the new theme, measured on 3 Jul 2026, scored only 65 to 77 on mobile depending on the page, with the home page at the low end, 65. The wait for the main image of the first screen ran from 4.4 to 12.4 seconds.

The second is a build tool that is actually good. Pick from 11 kinds of parts, check compatibility, add up the price, work out installments, then buy or print a quote. Every wrong step loses a customer, or worse, sells someone a part that does not fit.

The third is that shop staff must be able to edit text and images in the WordPress editor themselves, instead of calling a developer to change one line.

How it was done

1. Rebuild as a block theme

The new theme is a block theme (every header, footer and section is a block you can edit in WordPress's Site Editor). More than 50 old pages were moved to blocks. The old theme's shortcodes still work so pages not yet moved do not break. Both languages, Vietnamese and English, are rendered on the server.

2. Measure, change one thing, measure again

I measured with PageSpeed Insights and worked in rounds: find the heaviest thing sitting before the page appears, fix it, measure again. The first round found:

  • The reCAPTCHA library (spam protection, 378 KB) was loaded on every page. It now loads only on the contact page.
  • Banner images came in one size, so phones downloaded a 1920-pixel file of 179 KB. I produced three sizes and let the device choose.
  • The main image of the first screen had not been announced to the browser for early loading.

In a later round I tried inlining the CSS needed for the first screen straight into the page. It made things worse: the home page score dropped to 40 and the browser's blocking time rose to 3,730 milliseconds, because the page grew and the browser processed the CSS twice. I dropped that idea.

The deciding move was a plain one: cutting font files from 20 to 8 (3 Jul 2026). The chain of files to fetch before text appears got much shorter, and the home page jumped from 79 to 92 in my own test setup.

Diagram from live stock through PC Builder, checks and installments to cart, quote, email and share link
The path of one build: from live stock to something the customer can take away.

3. PC Builder: one table for 11 part groups

The build tool is a plugin of its own. Each part group (CPU, motherboard, RAM, graphics card, storage, power supply, case, cooler, monitor and so on) is one row in a table. Click a row to open a picker with filters like a category page. The picker lists only items that can be sold, and price and stock come from the live shop.

I was most careful about compatibility. When you pick a CPU and a motherboard, the tool compares the socket and the board's chipset. When you pick RAM, it compares the RAM type the board supports. For the power supply it estimates the power needed (with 25% headroom) and warns if the chosen unit falls short.

The PC build page with the parts table and the total panel on the right
A sample build loaded: on the right are the total, the compatibility checks and the power load. The unit price column is blurred in this image. The interface text is in Vietnamese.

I also removed something I had got wrong. On the prebuilt desktop pages, the performance score bars were at first a number multiplied by a factor, not a measurement. On 4 Nov 2026, while reviewing, I replaced them with numbers from a benchmark table that has sources, printed the source under each table, and left the bar empty where no number exists.

4. Installments right on the build

Under the total there is a Calculate installments button. The customer picks a credit card or a finance company, picks a bank, and sees the monthly payment, the conversion fee, the card fee, the total to pay and the difference from paying in full. A quick comparison shows four terms: 3, 6, 9 and 12 months. Fees per bank are entered in the admin area, not hard-coded. It only applies to orders of 3 million dong or more.

The figures are always marked as estimates, because the real amount depends on the finance provider and the term the customer picks.

The installment box with four terms and a comparison table
The installment box, opened from the build page. The interface text is in Vietnamese.

Results

The numbers here are lab numbers from Google's PageSpeed Insights, simulating a phone on a slow network. They differ from real-user data and move by a few points between runs.

PageSpeed score on mobile, home page
Home page, mobile+48%
Before65
After96

Measured with Google PageSpeed Insights, simulating a phone. Before: the first version of the new theme, 3 Jul 2026 (other pages 65 to 77). After: also 3 Jul 2026, at the end of the 25th tuning round. Re-measured on 8 Nov 2026: home page 93 (the same number three times), PC build page 97, desktop 100 for both.

Font files to download
Whole site-60%
Before20 files
After8 files

Counted from the theme's font setup, 3 Jul 2026, tuning round 25. In the same change, the home page score in my local test rig jumped from 79 to 92.

Home page HTML size on mobile
Home page HTML, mobile-26%
Before479 KB
After353 KB

Measured on 3 Jul 2026 while working, not re-measured since. This is uncompressed HTML. The number of elements on the page dropped from 3,576 to 2,663 at the same time.

On 8 Nov 2026 I measured again: the PC build page scored 97 on mobile and 100 on desktop, the home page 93 on mobile and 100 on desktop. Layout shift (CLS) stayed at or near 0.

One thing I have not managed. The mobile home page is 93 today, below the 96 of 3 Jul and below the 95 I set as a goal. I have not found the cause, and I am not drawing conclusions from three runs that gave the same number.

Home pagePC build pageInstallment box
Three screens on a phone (390 x 844) of the site, logo hidden. The site is in Vietnamese.

Lessons

Measure several times before you believe. The PageSpeed score of one page can differ by 5 points between two runs, so I look at the middle value, not at a single number.

Inlining CSS sounds like a standard speed trick, but on a heavy page it made things worse. Every trick has to be measured on your own page.

A number without a source goes, even when it makes the page look better. The benchmark bars multiplied by a factor looked convincing, and that is exactly why they had to go.

For customers who buy many parts, the tool should do the hardest part for them: knowing which part fits which. A pretty interface comes after that.

Need something similar?

If your shop sells products that must fit together, or your site is slow on phones, send me a few lines about the page. I will measure first, then tell you plainly what is worth fixing and what is not.

WooCommerceWordPressPageSpeedPC BuilderInstallments

Learn more