A modern, clean, and production-ready starter theme for building custom WordPress Full Site Editing (FSE) themes — powered by Sass and modular PHP.
- Full FSE support: Templates and template parts structured in native
.htmlfiles - Custom styles via
theme.json: Define your color palette, spacing, typography, and block settings - SCSS workflow included: Compiles separate frontend and editor styles using
npm run buildornpm run watch - Modular PHP architecture: Split into logical
inc/files (theme-setup,assets,security,performance, etc.) - Block restrictions: Disable unused block styles, comment-related blocks, and dashboard widgets
- Console signature: A developer-friendly signature logs in the browser console on every load
- Security hardening: XML-RPC disabled, file editor blocked, version info hidden, and more
- Editor experience optimized: Clean block inserter with only relevant styles and blocks
- Automated setup: Complete WordPress installation with theme activation, plugin installation, and Git workflow
# Set up with ACF Pro license key
./bin/setup.sh --acf-license=YOUR_LICENSE_KEY
# Or use environment variable
export ACF_PRO_LICENSE="your_license_key"
./bin/setup.sh
# Or add to auth.json (copy from auth.example.json)
./bin/setup.sh# Basic setup without ACF Pro
./bin/setup.sh
# Development workflow
cd wp-content/themes/your-theme-name/_dev
npm install
npm run watch # Watch SCSS for changes- Theme folder name: The setup script defaults the theme folder to
wp-boilerplate-fseto align with the GitHub Actions deployment workflow - Customization: You can override the theme name using
--theme-dest=your-custom-nameif needed - Directory structure: The script moves all boilerplate content to your WordPress root directory
- Git workflow: Automatically creates development branches (
staging,development,feature/initial-setup) for a complete Git workflow - Deployment sync: Automatically updates GitHub workflow files with the chosen theme name for seamless deployment
The setup script creates a complete branching strategy:
main- Production-ready code (protected branch)staging- Pre-production testing and QAdevelopment- Active development and integrationfeature/initial-setup- Example feature branch template
Deployment flow:
feature/xxx → development → staging → main
Skip branch creation: Use --skip-branches if you prefer a simpler Git setup.
./bin/setup.sh [OPTIONS]
Options:
--dry-run Show what would be done without making changes
--skip-plugins Skip automatic plugin installation
--skip-git Skip git repository initialization
--skip-branches Skip creating additional git branches (staging, development)
--theme=NAME Override source theme name detection
--theme-dest=NAME Override destination theme name
--github-user=USER Override GitHub username (default: valentin-grenier)
--acf-license=KEY ACF Pro license key for installation
--help, -h Show this help messageTo automatically install ACF Pro during setup, provide your license key using one of these methods:
- Command line flag:
--acf-license=YOUR_KEY - Environment variable:
export ACF_PRO_LICENSE="YOUR_KEY" - auth.json file: Copy
auth.example.jsontoauth.jsonand add your license key as the password
{
"http-basic": {
"connect.advancedcustomfields.com": {
"username": "",
"password": "YOUR_LICENSE_KEY_HERE"
}
}
}To enable deployment via GitHub Actions, add the following secrets to your repository:
For staging deployment (FTP):
STAGING_FTP_HOST– your FTP server hostname (e.g., ftp.example.com)STAGING_FTP_PORT– FTP port (usually 21)STAGING_FTP_USER– FTP usernameSTAGING_FTP_PASSWORD– FTP passwordSTAGING_FTP_SERVER_DIR– WordPress installation root directory
For production deployment (if different from staging):
FTP_HOST– production FTP server hostnameFTP_PORT– production FTP portFTP_PROTOCOL– protocol ("ftp" or "ftps")FTP_USER– production FTP usernameFTP_PASSWORD– production FTP passwordFTP_SERVER_DIR– production WordPress installation root directory
- Staging: Deploys automatically when code is pushed to
stagingbranch - Production: Deploys automatically when code is pushed to
mainbranch
# Development build with watch mode
npm run dev
# Production build (minified, optimized)
npm run build
# Watch mode for development (if available)
npm run watchwp-content/themes/your-theme/
├── _dev/ # Development assets
│ ├── js/ # JavaScript source files
│ ├── scss/ # SCSS source files
│ ├── blocks/ # Custom block development
│ ├── package.json # Node.js dependencies
│ └── webpack.*.js # Webpack configuration
├── assets/ # Compiled assets
│ ├── css/ # Compiled CSS
│ └── js/ # Compiled JavaScript
├── inc/ # PHP includes
│ ├── theme-setup.php # Theme configuration
│ ├── security.php # Security enhancements
│ ├── performance-hooks.php # Performance optimizations
│ └── ... # Other modular functionality
├── parts/ # Template parts
├── templates/ # Full site editing templates
├── functions.php # Main theme functions
├── style.css # Theme header and basic styles
└── theme.json # FSE configuration
- Query Monitor – Development debugging
- UpdraftPlus – Backup and migration
- Admin Site Enhancements – Admin experience improvements
- Contact Form 7 – Form builder
- Broken Link Checker – SEO maintenance
- Rank Math SEO – SEO optimization
- Better WP Security – Security enhancements
- Complianz GDPR – Privacy compliance
- WebP Converter for Media – Image optimization
- Simple History – Activity logging
- Plausible Analytics – Privacy-friendly analytics
Made with ❤️ by Studio Val — a creative WordPress developer focused on fast, modern, maintainable custom themes.
- Website: studio-val.fr
- GitHub: @valentin-grenier
MIT — free to use and adapt with attribution.
Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request