php bin/setup.php sets the theme name and text domain, replaces the PHP namespace, picks the plugins and runs Composer, npm and the first build.
How it works
From git clone to a client site that updates itself from GitHub releases.
From clone to live site
-
Step 1
Clone and run the setup wizard
-
Step 2
Set the brand
Colors, fonts and spacing go into
config/design-tokens/*.tokens.json.npm run tokenswrites them to CSS variables for light and dark mode. -
Step 3
Activate the theme
On activation the theme creates the basic pages and menus, and it can generate a private styleguide page that renders every module and component with the current tokens.
-
Step 4
Build the pages
Editors compose pages from the modules. Logo, contact data, footer and analytics live in the theme options.
-
Step 5
Ship updates
Conventional commits drive semantic release. Each GitHub release carries the theme zip and its checksum, and sites pick it up in the WordPress dashboard.
Stack
| Part | Technology |
|---|---|
| Templates | Laravel Blade (Illuminate v13) with components such as x-section and x-button |
| Styles | Tailwind CSS v4.1 on top of generated design tokens |
| Scripts | TypeScript and Alpine.js, bundled with Vite 8 |
| Content model | Classic Editor, ACF Pro Flexible Content, ACF Extended |
| PHP | 8.3 or newer, strict types, service providers |
| Plugins | Managed with Composer through wpackagist.org |
Under the hood
Service providers
The theme boots a list of small providers, each with one job: Blade, ACF, security headers, SEO, images, menus, updates, logging. A feature is easy to find and easy to switch off.
Fields in PHP
All ACF fields are defined in PHP, not in the database or JSON. They live in version control and one definition serves every module that needs it.