Release as SoloFrame Evo (#2)

* docs: Add onboarding documentation for new developers

Add four comprehensive guides to help new developers get started
with the VDI-Starter-v5 WordPress theme:

- docs/getting-started.md: Setup from zero, local WordPress options,
  env config, theme activation warnings, troubleshooting
- docs/architecture.md: Bootstrap flow, 7 architectural layers,
  namespace conventions, WP hooks cleanup, enqueue system, theme.json
- docs/creating-blocks.md: Step-by-step ACF block creation tutorial,
  helper functions, parent-child patterns, Tailwind integration
- docs/reference.md: Hooks/filters tables, design tokens, CSS import
  tree, JS module graph, class reference, CLI commands, deployment

Update README.md: trim deep-dive API docs (moved to reference),
add documentation links section, fix CSS paths (views/styles/ →
styles/), add missing contact-info block, fix deployment filename
typo (wpengine,yml → wpengine.yml), add backToTop.js and
enqEditorAssets(), add namespace conventions table.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* docs: language graph

* docs: Update readme

* 🔵 other: Rename project and publish

* 🔵 other: Update .gitignore
This commit is contained in:
Keith Solomon
2026-07-29 15:52:21 -05:00
committed by GitHub
co-authored by Claude Opus 4.7
parent bcc701120b
commit e2f6270717
66 changed files with 2797 additions and 713 deletions
+2 -2
View File
@@ -4,10 +4,10 @@
*
* This is the template that renders the Accordion block.
*
* @package BasicWP
* @package SoloFrameEvo
*/
namespace BasicWP;
namespace SoloFrameEvo;
$open = get_field( 'open' );
$group = get_field( 'group_items' );
+1 -1
View File
@@ -5,7 +5,7 @@
"style": [
"file:./boilerplate.css"
],
"category": "vdi-blocks",
"category": "sf-blocks",
"icon": "block-default",
"keywords": [
"boilerplate"
+2 -2
View File
@@ -4,10 +4,10 @@
*
* This is the template for building your own custom blocks.
*
* @package BasicWP
* @package SoloFrameEvo
*/
namespace BasicWP;
namespace SoloFrameEvo;
$classes = 'boilerplate';
+2 -2
View File
@@ -1,8 +1,8 @@
{
"name": "acf/button",
"title": "Button (VDI)",
"title": "Button (SFE)",
"description": "A button.",
"category": "vdi-blocks",
"category": "sf-blocks",
"icon": "button",
"keywords": [
"button"
+2 -2
View File
@@ -2,10 +2,10 @@
/**
* Button block
*
* @package BasicWP
* @package SoloFrameEvo
*/
namespace BasicWP;
namespace SoloFrameEvo;
// Retrieve ACF fields
$element = get_field( 'element' ) ? get_field( 'element' ) : 'a';
+2 -2
View File
@@ -1,9 +1,9 @@
{
"name": "acf/buttons",
"title": "Buttons (VDI)",
"title": "Buttons (SFE)",
"description": "A button or group of buttons.",
"allowedBlocks": [ "acf/button" ],
"category": "vdi-blocks",
"category": "sf-blocks",
"icon": "button",
"keywords": [
"buttons"
+2 -2
View File
@@ -4,10 +4,10 @@
*
* This is the template that renders the Buttons block.
*
* @package BasicWP
* @package SoloFrameEvo
*/
namespace BasicWP;
namespace SoloFrameEvo;
$ibClasses = 'flex flex-wrap gap-4 w-full justify-center sm:justify-start';
+1 -1
View File
@@ -5,7 +5,7 @@
"style": [
"file:./contact-info.css"
],
"category": "vdi-blocks",
"category": "sf-blocks",
"icon": "feedback",
"keywords": [
"contact info",
+5 -5
View File
@@ -4,10 +4,10 @@
*
* Display contact information from global fields with icons and optional form.
*
* @package BasicWP
* @package SoloFrameEvo
*/
namespace BasicWP;
namespace SoloFrameEvo;
$classes = 'contact-info';
$wrapper = blockWrapperAttributes( $classes, $is_preview );
@@ -19,13 +19,13 @@ $wrapper = blockWrapperAttributes( $classes, $is_preview );
<h2 class="text-2xl font-bold mb-4">Contact Information</h2>
<div class="not-prose text-black my-4">
<h3 class="mb-0"><?php echo esc_html__( 'Mailing Address', 'basicwp' ); ?></h3>
<h3 class="mb-0"><?php echo esc_html__( 'Mailing Address', 'sf-evo' ); ?></h3>
<p class="my-0.5"><?php echo wp_kses_post( get_field( 'contact_info', 'option' )['address'] ); ?></p>
<h3 class="mb-0"><?php echo esc_html__( 'Email', 'basicwp' ); ?></h3>
<h3 class="mb-0"><?php echo esc_html__( 'Email', 'sf-evo' ); ?></h3>
<p class="my-0.5"><a class="hover:opacity-80 transition-colors duration-100" href="mailto:<?php echo esc_html( get_field( 'contact_info', 'option' )['email'] ); ?>"><?php echo esc_html( get_field( 'contact_info', 'option' )['email'] ); ?></a></p>
<h3 class="mb-0"><?php echo esc_html__( 'Phone', 'basicwp' ); ?></h3>
<h3 class="mb-0"><?php echo esc_html__( 'Phone', 'sf-evo' ); ?></h3>
<p class="my-0.5"><a class="hover:opacity-80 transition-colors duration-100" href="tel:<?php echo esc_html( get_field( 'contact_info', 'option' )['phone'] ); ?>"><?php echo esc_html( get_field( 'contact_info', 'option' )['phone'] ); ?></a></p>
</div>
</div>
+2 -2
View File
@@ -1,11 +1,11 @@
{
"name": "acf/grid-cell",
"title": "Grid Cell (VDI)",
"title": "Grid Cell (SFE)",
"description": "Custom grid cell block.",
"style": [
"file:./grid-cell.css"
],
"category": "vdi-blocks",
"category": "sf-blocks",
"icon": "grid-view",
"keywords": [
"grid"
+2 -2
View File
@@ -4,10 +4,10 @@
*
* This is the template that displays the Grid Cell block.
*
* @package BasicWP
* @package SoloFrameEvo
*/
namespace BasicWP;
namespace SoloFrameEvo;
// Initialize variables
$className = ! empty( $block['className'] ) ? $block['className'] : '';
+2 -2
View File
@@ -1,12 +1,12 @@
{
"name": "acf/grid",
"title": "Grid Block (VDI)",
"title": "Grid Block (SFE)",
"description": "Custom grid block.",
"style": [
"file:./grid.css"
],
"allowedBlocks": [ "acf/grid-cell" ],
"category": "vdi-blocks",
"category": "sf-blocks",
"icon": "grid-view",
"keywords": [
"grid"
+2 -2
View File
@@ -4,10 +4,10 @@
*
* This is the template that displays the grid block.
*
* @package BasicWP
* @package SoloFrameEvo
*/
namespace BasicWP;
namespace SoloFrameEvo;
$allowedBlocks = array( 'acf/grid-cell' );
$default_blocks = array(
+1 -1
View File
@@ -5,7 +5,7 @@
"style": [
"file:./homepage-hero.css"
],
"category": "vdi-blocks",
"category": "sf-blocks",
"icon": "block-default",
"keywords": [
"homepage-hero",
+2 -2
View File
@@ -2,10 +2,10 @@
/**
* Block Name: Homepage Hero
*
* @package BasicWP
* @package SoloFrameEvo
*/
namespace BasicWP;
namespace SoloFrameEvo;
// Retrieve ACF fields
$heading = get_field( 'heading' );
@@ -5,7 +5,7 @@
"style": [
"file:./media-text-innerblocks.css"
],
"category": "vdi-blocks",
"category": "sf-blocks",
"icon": "screenoptions",
"keywords": [
"media",
@@ -4,10 +4,10 @@
*
* This is the template that displays the media text inner blocks.
*
* @package BasicWP
* @package SoloFrameEvo
*/
namespace BasicWP;
namespace SoloFrameEvo;
// Retrieve ACF fields
$bgColor = get_field( 'background_color' ) ? get_field( 'background_color' ) : '#c5c5c5';
+1 -1
View File
@@ -5,7 +5,7 @@
"style": [
"file:./media-text.css"
],
"category": "vdi-blocks",
"category": "sf-blocks",
"icon": "screenoptions",
"keywords": [
"media",
+2 -2
View File
@@ -4,10 +4,10 @@
*
* This is the template that displays the Media With Text block.
*
* @package BasicWP
* @package SoloFrameEvo
*/
namespace BasicWP;
namespace SoloFrameEvo;
// Retrieve ACF fields
$bgColor = get_field( 'background_color' ) ? get_field( 'background_color' ) : '#c5c5c5';
+1 -1
View File
@@ -5,7 +5,7 @@
"style": [
"file:./page-children.css"
],
"category": "vdi-blocks",
"category": "sf-blocks",
"icon": "block-default",
"keywords": [
"page-children"
+3 -3
View File
@@ -2,10 +2,10 @@
/**
* Page Children block
*
* @package BasicWP
* @package SoloFrameEvo
*/
namespace BasicWP;
namespace SoloFrameEvo;
// Retrieve the current page ID and its children
$parentId = get_queried_object_id();
@@ -89,7 +89,7 @@ $wrapper = blockWrapperAttributes( $classes, $is_preview );
</h3>
</div>
<div class="my-0 grow-1 text-18px text-gray-600 <?php echo esc_attr( $gcPad ); ?>">
<div class="my-0 grow text-18px text-gray-600 <?php echo esc_attr( $gcPad ); ?>">
<?php
if ( ! empty( $grandchildren ) ) {
?>
+1 -1
View File
@@ -5,7 +5,7 @@
"style": [
"file:./section.css"
],
"category": "vdi-blocks",
"category": "sf-blocks",
"icon": "align-wide",
"keywords": [
"setion",
+2 -2
View File
@@ -4,10 +4,10 @@
*
* This is the template that displays the section block.
*
* @package BasicWP
* @package SoloFrameEvo
*/
namespace BasicWP;
namespace SoloFrameEvo;
// Retrieve ACF fields
$contentWidth = get_field( 'content_width' );
+1 -1
View File
@@ -6,7 +6,7 @@
* https://docs.vincentdevelopment.ca/docs/starter-v3-enhancements/navigation/
*/
namespace BasicWP;
namespace SoloFrameEvo;
// Variables available:
// $item from parent template
+1 -1
View File
@@ -6,7 +6,7 @@
* https://docs.vincentdevelopment.ca/docs/starter-v3-enhancements/navigation/
*/
namespace BasicWP;
namespace SoloFrameEvo;
// Variables available from MenuItems component:
// $topLevelNavItems, $hasChildren, $nestedNavItems, $currentPage, $location
+1 -1
View File
@@ -6,7 +6,7 @@
* https://docs.vincentdevelopment.ca/docs/starter-v3-enhancements/navigation/
*/
namespace BasicWP;
namespace SoloFrameEvo;
// Variables available:
// $item from parent template
+1 -1
View File
@@ -6,7 +6,7 @@
* https://docs.vincentdevelopment.ca/docs/starter-v3-enhancements/navigation-aux.html
*/
namespace BasicWP;
namespace SoloFrameEvo;
// Init Variables
global $wp, $views;
+1 -1
View File
@@ -6,7 +6,7 @@
* https://docs.vincentdevelopment.ca/docs/starter-v3-enhancements/navigation/
*/
namespace BasicWP;
namespace SoloFrameEvo;
global $views;
?>
+1 -1
View File
@@ -6,7 +6,7 @@
* https://docs.vincentdevelopment.ca/docs/starter-v3-enhancements/navigation/
*/
namespace BasicWP;
namespace SoloFrameEvo;
// Init Variables
$navIcon = isset( get_field( 'header', 'option' )['nav_icon'] ) ? get_field( 'header', 'option' )['nav_icon'] : '';
+13 -13
View File
@@ -6,24 +6,24 @@
* https://docs.vincentdevelopment.ca/docs/starter-v3-enhancements/search-global.html
*/
namespace BasicWP;
namespace SoloFrameEvo;
?>
<search role="search">
<form method="get" action="<?php echo esc_url( home_url( '/' ) ); ?>" class="global-search-form relative flex justify-start max-w-full w-full">
<label for="globalSearch">
<svg role="img" aria-labelledby="globalSearchLabel" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" class="absolute w-4 top-2 left-2 fill-primary-700">
<title id="globalSearchLabel"><?php echo esc_attr_x( 'Search', 'search-label', 'basicwp' ); ?></title>
<form method="get" action="<?php echo esc_url( home_url( '/' ) ); ?>" class="global-search-form relative flex justify-start max-w-full w-full">
<label for="globalSearch">
<svg role="img" aria-labelledby="globalSearchLabel" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" class="absolute w-4 top-2 left-2 fill-primary-700">
<title id="globalSearchLabel"><?php echo esc_attr_x( 'Search', 'search-label', 'sf-evo' ); ?></title>
<path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352a144 144 0 1 0 0-288 144 144 0 1 0 0 288z"/>
</svg>
</label>
<path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352a144 144 0 1 0 0-288 144 144 0 1 0 0 288z"/>
</svg>
</label>
<input id="globalSearch" type="search" placeholder="" value="<?php echo esc_attr( get_search_query() ); ?>" name="s" class="md:min-w-[25ch] w-full md:w-[18em] max-w-full text-sm p-1 pl-7 border-2 border-primary-700 rounded-l focus-visible:ring-2 ring-primary-700 !outline-default">
<input id="globalSearch" type="search" placeholder="" value="<?php echo esc_attr( get_search_query() ); ?>" name="s" class="md:min-w-[25ch] w-full md:w-[18em] max-w-full text-sm p-1 pl-7 border-2 border-primary-700 rounded-l focus-visible:ring-2 ring-primary-700 outline-default!">
<button type="submit" class="bg-primary rounded-r py-0 px-3 height-full text-sm text-white focus-visible:ring-2 ring-primary-700 !outline-default cursor-default">
<?php echo esc_attr_x( 'Search', 'search-submit', 'basicwp' ); ?>
</button>
</form>
<button type="submit" class="bg-primary rounded-r py-0 px-3 height-full text-sm text-white focus-visible:ring-2 ring-primary-700 outline-default! cursor-default">
<?php echo esc_attr_x( 'Search', 'search-submit', 'sf-evo' ); ?>
</button>
</form>
</search>
+2 -2
View File
@@ -2,10 +2,10 @@
/**
* Page Hero Partial
*
* @package BasicWP
* @package SoloFrameEvo
*/
namespace BasicWP;
namespace SoloFrameEvo;
// Set variables
$bgColor = get_field( 'background_color' );
+2 -2
View File
@@ -2,10 +2,10 @@
/**
* Social Media Links Partial
*
* @package BasicWP
* @package SoloFrameEvo
*/
namespace BasicWP;
namespace SoloFrameEvo;
$classes = $args['classes'] ?? '';
$circle = $args['circle'] ?? '';