Every WordPress theme I build starts the same way: a blank canvas, a clear design system, and zero page builder plugins. Here's my exact workflow.
Start With a Proper File Structure
The classic WordPress theme structure hasn't changed much, but modern themes benefit from separating template parts, partials, and assets clearly. I use: template-parts/ for reusable chunks, assets/css/, assets/js/, and inc/ for PHP includes.
Use a functions.php That Doesn't Do Everything
The temptation to dump everything in functions.php is real. Instead, split your PHP includes into files: inc/enqueue.php, inc/custom-post-types.php, inc/hooks.php. Then require them from functions.php.
ACF Is Your Friend
Advanced Custom Fields transforms WordPress into a proper CMS. For every client project, I use ACF Pro to build flexible content blocks that let clients edit their content without touching code. Combine it with ACF Flexible Content for truly dynamic layouts.
Child Themes vs. Custom Themes
For client projects, always build a standalone custom theme. Child themes are for when you want to extend an existing theme while keeping update compatibility — not for building from scratch.
Performance From the Start
Lazy-load images, minimize JS/CSS files, and use a CDN from day one. Don't wait until the client complains about speed. Use WP Rocket or W3 Total Cache from the beginning.
A well-built custom WordPress theme is a pleasure to maintain and extend. Page builders create technical debt that compounds over time.