# Reusable Build Brief: Custom WordPress Theme

## How to use this brief

This document is a reusable specification for building a custom WordPress theme with an AI coding assistant or a human developer. Complete every **USER INPUT REQUIRED** block before development begins. Delete unused options and replace all bracketed placeholders.

The finished theme must be a classic/hybrid PHP theme. It should use the WordPress template hierarchy and standard WordPress menu functionality while also supporting current block-editor features through `theme.json` where appropriate.

Do not begin development until the required user inputs are complete. If an answer is missing or contradictory, ask the user for clarification instead of inventing brand, content, layout, or business requirements.

## Goal

Build a production-ready, responsive, accessible custom WordPress theme for the website described below. The theme should:

- Match the selected visual direction and brand requirements.
- Use standard WordPress pages, posts, featured images, menus, widgets, and the Media Library.
- Include a polished header, primary navigation, mobile navigation, content templates, and styled footer.
- Keep presentation in the theme and business functionality in plugins.
- Be easy to update through versioned ZIP releases without losing content or theme settings.
- Follow WordPress coding, security, accessibility, and performance standards.

## 1. Project identity

> [!IMPORTANT]
> **USER INPUT REQUIRED: Project identity**
>
> Provide all of the following:
>
> - Website or business name: `[REQUIRED]`
> - Theme display name: `[REQUIRED]`
> - Theme slug using lowercase letters and hyphens, such as `oak-studio-theme`: `[REQUIRED]`
> - One-sentence description of the organization and website: `[REQUIRED]`
> - Primary website goal, such as lead generation, online sales, bookings, publishing, memberships, or portfolio display: `[REQUIRED]`
> - Target audience: `[REQUIRED]`
> - Theme author name: `[REQUIRED]`
> - Theme author URL: `[REQUIRED]`
> - Text domain, normally identical to the theme slug: `[REQUIRED]`
> - Existing website URL, if any: `[OPTIONAL]`
> - Reference websites the user likes, with a short explanation of what they like about each: `[OPTIONAL]`

## 2. Source of truth

> [!IMPORTANT]
> **USER INPUT REQUIRED: Design and content source**
>
> Identify the authoritative source for the build:
>
> - Existing website to reproduce: `[URL OR NONE]`
> - Approved design file: `[FIGMA, PDF, IMAGE, OR NONE]`
> - Existing HTML/CSS prototype: `[PATH OR NONE]`
> - Brand guide: `[PATH OR NONE]`
> - Approved copy document: `[PATH OR NONE]`
> - Content migration source: `[URL, EXPORT FILE, OR NONE]`
>
> State whether the source must be matched exactly or used only as inspiration: `[EXACT MATCH / CLOSE INTERPRETATION / NEW DESIGN]`

If an approved source exists, treat it as authoritative for layout, copy, colors, typography, spacing, and links. Do not redesign an exact-match source without explicit approval.

## 3. Visual style direction

> [!IMPORTANT]
> **USER INPUT REQUIRED: Theme style**
>
> Choose one primary style and, optionally, one supporting style. Describe what the selected style means for this website.
>
> - **Boutique / luxury:** refined typography, generous spacing, editorial imagery, restrained color, premium details
> - **Modern minimalist:** clean grid, strong whitespace, simple typography, limited palette, subtle motion
> - **Classical / traditional:** serif typography, balanced symmetry, formal spacing, timeless colors, restrained decoration
> - **Gaming / technology:** dark surfaces, vivid accents, energetic type, interface-inspired details, optional motion
> - **eCommerce / retail:** product-first layouts, clear pricing and calls to action, filters, trust signals, conversion-focused design
> - **Corporate / professional:** structured layouts, credible typography, clear hierarchy, service and case-study emphasis
> - **Creative / portfolio:** large visual work, expressive typography, project grids, case studies, distinctive transitions
> - **Editorial / publishing:** readable typography, article hierarchy, categories, author information, related content
> - **Hospitality / local business:** location, hours, menus or services, reservations, reviews, maps, inviting photography
> - **Nonprofit / community:** mission-led storytelling, impact content, donations, events, volunteer calls to action
> - **Industrial / trades:** direct messaging, services, certifications, project proof, strong contact and quote actions
> - **Custom direction:** `[DESCRIBE]`
>
> Required style decisions:
>
> - Primary style: `[REQUIRED]`
> - Supporting style: `[OPTIONAL]`
> - Three to five adjectives for the desired feeling: `[REQUIRED]`
> - Light, dark, or mixed interface: `[REQUIRED]`
> - Preferred corner treatment: `[SQUARE / SLIGHTLY ROUNDED / ROUNDED / MIXED]`
> - Preferred spacing: `[COMPACT / BALANCED / SPACIOUS]`
> - Motion level: `[NONE / SUBTLE / MODERATE / EXPRESSIVE]`
> - Elements or styles to avoid: `[REQUIRED]`

## 4. Brand colors and typography

> [!IMPORTANT]
> **USER INPUT REQUIRED: Colors and fonts**
>
> Provide:
>
> - Primary color and hex value: `[REQUIRED]`
> - Secondary color and hex value: `[REQUIRED]`
> - Accent or call-to-action color and hex value: `[REQUIRED]`
> - Background colors: `[REQUIRED]`
> - Primary text color: `[REQUIRED]`
> - Heading font: `[REQUIRED OR "RECOMMEND ONE"]`
> - Body font: `[REQUIRED OR "RECOMMEND ONE"]`
> - Font source or license information: `[GOOGLE FONTS / ADOBE / SELF-HOSTED / SYSTEM / OTHER]`
> - Minimum normal body-text size: `[RECOMMENDED: 16PX OR LARGER]`

Define the approved colors, spacing, typography, content width, breakpoints, borders, radii, and shadows as CSS custom properties. Mirror relevant editor settings in `theme.json` so the editor resembles the front end.

Do not load unapproved font weights. Prefer system fonts or properly licensed, locally hosted font files when privacy or performance is important.

## 5. Branding and Media Library assets

All logos, photographs, illustrations, hero images, background images, team photos, product images, and other content imagery must be uploaded to the WordPress Media Library. Do not hard-code content-image URLs, base64 images, or local computer paths into PHP, CSS, or JavaScript.

Add support for the WordPress custom logo feature:

```php
add_theme_support(
    'custom-logo',
    array(
        'height'      => 160,
        'width'       => 480,
        'flex-height' => true,
        'flex-width'  => true,
    )
);
```

Render the selected logo with `the_custom_logo()` or the corresponding attachment functions. Use the WordPress Site Icon setting for the favicon.

For user-selectable theme images, use the Customizer Media Control or an approved settings interface that stores attachment IDs. Render images with `wp_get_attachment_image()` so WordPress can provide responsive image sizes, `srcset`, dimensions, alt text, and lazy loading.

Use featured images for posts, pages, products, portfolio entries, and other content types where appropriate. Register only the image sizes required by the design.

> [!IMPORTANT]
> **USER INPUT REQUIRED: Media and logo requirements**
>
> Provide or describe:
>
> - Primary logo file: `[REQUIRED; SVG OR HIGH-RESOLUTION PNG PREFERRED]`
> - Alternate light or dark logo: `[OPTIONAL]`
> - Site icon: `[REQUIRED; SQUARE IMAGE, AT LEAST 512×512]`
> - Hero or banner images needed: `[LIST OR NONE]`
> - Default featured image behavior when no image is assigned: `[HIDE IMAGE / USE GENERIC MEDIA-LIBRARY IMAGE / OTHER]`
> - Photography treatment: `[FULL COLOR / MUTED / BLACK AND WHITE / OVERLAY / OTHER]`
> - Required image aspect ratios or crops: `[LIST OR ASK FOR RECOMMENDATIONS]`
> - Whether the theme should expose Media Library controls for hero and footer images: `[YES / NO]`

Document the post-activation process for uploading each asset to **Media > Add New** and selecting it through WordPress settings. Never require the user to replace files inside the theme folder to change branding or content imagery.

## 6. Page and content architecture

> [!IMPORTANT]
> **USER INPUT REQUIRED: Pages and content types**
>
> List every required page and its purpose. At minimum, identify whether the site needs:
>
> - Home page: `[YES / NO; DESCRIBE SECTIONS]`
> - About page: `[YES / NO]`
> - Services or products: `[YES / NO; DESCRIBE]`
> - Blog or news: `[YES / NO]`
> - Portfolio, case studies, team, events, locations, testimonials, or other structured content: `[LIST OR NONE]`
> - Contact page: `[YES / NO; DESCRIBE FORM OR CONTACT METHOD]`
> - Search results: `[YES / NO]`
> - WooCommerce shop: `[YES / NO]`
> - Member-only or account content: `[YES / NO]`
> - Legal pages: `[LIST]`
>
> For each custom content type, state whether it already exists through a plugin. Custom post types and business data should normally be registered in a plugin so the content survives a theme change.

## 7. Layout choices

> [!IMPORTANT]
> **USER INPUT REQUIRED: Layout behavior**
>
> Select or describe:
>
> - Maximum content width: `[REQUIRED OR "RECOMMEND"]`
> - Header layout: `[LOGO LEFT + MENU RIGHT / CENTERED LOGO / SPLIT NAVIGATION / OTHER]`
> - Header behavior: `[STATIC / STICKY / SHRINKING STICKY]`
> - Mobile header behavior: `[DRAWER / DROPDOWN / FULL-SCREEN MENU / OTHER]`
> - Standard page width: `[FULL WIDTH / CONTAINED / USER-SELECTABLE]`
> - Blog archive: `[LIST / GRID / MAGAZINE / OTHER]`
> - Single-post layout: `[FULL WIDTH / LEFT SIDEBAR / RIGHT SIDEBAR / USER-SELECTABLE]`
> - Sidebar requirements: `[LIST OR NONE]`
> - Breadcrumbs: `[YES / NO / PROVIDED BY SEO PLUGIN]`
> - Homepage section order and required calls to action: `[REQUIRED]`

## 8. Standard WordPress menus

The theme must use WordPress's standard menu system. Do not hard-code navigation links into `header.php` or JavaScript.

Register menu locations during theme setup:

```php
register_nav_menus(
    array(
        'primary' => __( 'Primary Menu', 'THEME_TEXT_DOMAIN' ),
        'footer'  => __( 'Footer Menu', 'THEME_TEXT_DOMAIN' ),
    )
);
```

Replace `THEME_TEXT_DOMAIN` with the approved text domain.

Render the primary menu in the main theme header with `wp_nav_menu()`:

```php
wp_nav_menu(
    array(
        'theme_location' => 'primary',
        'container'      => 'nav',
        'container_id'   => 'site-navigation',
        'container_class'=> 'site-navigation',
        'menu_class'     => 'primary-menu',
        'fallback_cb'    => false,
        'depth'          => 3,
    )
);
```

The header's desktop navigation and mobile navigation must use the same assigned Primary Menu unless the user explicitly requests separate locations. The mobile toggle must be keyboard accessible, announce its expanded state with `aria-expanded`, close on Escape, and not trap users unexpectedly.

Render the Footer Menu in `footer.php` when one is assigned. Style current-menu states, focus states, submenus, and mobile behavior.

Document these setup steps in the theme readme:

1. In WordPress, go to **Appearance > Menus**.
2. Create a menu or select an existing menu.
3. Add the desired pages, posts, categories, and custom links.
4. Arrange menu items and submenus.
5. Under **Display location**, assign it to **Primary Menu**.
6. Save the menu and confirm it appears in the theme's main header.
7. Create or select a second menu and assign it to **Footer Menu**, if required.

> [!IMPORTANT]
> **USER INPUT REQUIRED: Menu design and structure**
>
> Provide:
>
> - Primary menu items and order: `[REQUIRED]`
> - Required dropdown or nested items: `[LIST OR NONE]`
> - Header call-to-action label and destination: `[OPTIONAL]`
> - Whether the call to action is a menu item or a separate styled button: `[MENU ITEM / BUTTON / NONE]`
> - Footer menu items: `[LIST OR NONE]`
> - Maximum supported menu depth: `[RECOMMENDED: 2 OR 3]`
> - Separate mobile menu location required: `[YES / NO]`

## 9. Header requirements

The header must include:

- The WordPress custom logo or site title fallback.
- The assigned Primary Menu in the main header.
- A keyboard-accessible mobile menu toggle.
- Clearly visible hover, focus, active, and current-page states.
- Optional search, account, cart, language, or call-to-action controls only when requested.
- Correct `wp_body_open()`, semantic `<header>`, `<nav>`, and skip-link markup.

> [!IMPORTANT]
> **USER INPUT REQUIRED: Header features**
>
> Select all required items:
>
> - Search control: `[YES / NO]`
> - WooCommerce cart control: `[YES / NO / NOT APPLICABLE]`
> - Account/login control: `[YES / NO]`
> - Language switcher: `[YES / NO; NAME THE PLUGIN]`
> - Social icons: `[YES / NO; LIST NETWORKS]`
> - Announcement bar: `[YES / NO; PROVIDE COPY AND LINK]`
> - Header call to action: `[LABEL, LINK, OR NONE]`

## 10. Styled footer

Create a deliberate, styled footer rather than an unformatted copyright line. The footer should visually complete the theme and remain readable on mobile.

Depending on user choices, the footer may contain:

- Custom logo or site title.
- Short organization description.
- Assigned Footer Menu.
- Contact information.
- Social links.
- Newsletter or form shortcode area.
- One to four registered footer widget areas.
- Legal links.
- Dynamic copyright year and organization name.
- Optional footer background image selected from the Media Library.

All footer content must be editable through WordPress menus, widgets, blocks, the Customizer, or a documented settings screen. Do not bury client-specific copy in `footer.php` unless it is explicitly approved as permanent theme text.

> [!IMPORTANT]
> **USER INPUT REQUIRED: Footer design and content**
>
> Provide:
>
> - Footer style: `[LIGHT / DARK / BRAND COLOR / IMAGE BACKGROUND]`
> - Number of columns on desktop: `[1 / 2 / 3 / 4]`
> - Logo in footer: `[PRIMARY / ALTERNATE / NONE]`
> - Short footer description: `[COPY OR NONE]`
> - Contact details to display: `[LIST OR NONE]`
> - Social networks and URLs: `[LIST OR NONE]`
> - Footer menu items: `[LIST OR NONE]`
> - Newsletter or form shortcode/plugin: `[DETAILS OR NONE]`
> - Required legal or copyright wording: `[REQUIRED]`
> - Footer background image: `[MEDIA FILE OR NONE]`

## 11. WordPress and editor support

At minimum, add theme support for:

- `title-tag`
- `post-thumbnails`
- `custom-logo`
- `automatic-feed-links`
- `html5`
- `responsive-embeds`
- `align-wide`
- `editor-styles`
- `wp-block-styles`
- Selective refresh where used in the Customizer

Create `theme.json` for approved colors, font sizes, content widths, spacing options, and editor behavior. Do not expose arbitrary editor choices that conflict with the approved brand system unless the user asks for them.

Keep SEO titles, meta descriptions, Open Graph tags, XML sitemaps, analytics, forms, custom post types, memberships, payments, and other site functionality in dedicated plugins.

> [!IMPORTANT]
> **USER INPUT REQUIRED: Editor flexibility**
>
> Choose one:
>
> - **Strict brand system:** editors use only approved colors, type sizes, spacing, and layouts.
> - **Guided flexibility:** provide approved presets plus selected custom controls.
> - **Open flexibility:** allow broad editor customization with documented risks to consistency.
>
> Selected approach: `[REQUIRED]`
>
> Identify any page builder that must be supported: `[NATIVE BLOCK EDITOR / ELEMENTOR / BEAVER BUILDER / DIVI / OTHER / NONE]`

## 12. Theme structure

Use a maintainable structure similar to:

```text
THEME_SLUG/
  style.css                 Theme header and required base styles
  functions.php             Loads modular setup files
  theme.json                Editor and design-system settings
  index.php                 Required fallback template
  header.php                Logo, primary menu, mobile menu
  footer.php                Styled footer and footer menu
  front-page.php            Static front-page template when required
  home.php                  Posts index
  page.php                  Standard pages
  single.php                Single posts
  archive.php               Archive fallback
  search.php                Search results
  404.php                   Not-found page
  comments.php              Comments when enabled
  screenshot.png            WordPress theme preview only
  inc/
    setup.php               Theme support, menus, image sizes
    enqueue.php             Styles and scripts
    customizer.php          Logo-adjacent and Media Library controls
    widgets.php             Sidebars and footer widget areas
    template-functions.php  Focused presentation helpers
  template-parts/
    content.php
    content-page.php
    content-single.php
    content-none.php
    header/
    footer/
  assets/
    css/main.css
    js/navigation.js
    js/theme.js
    fonts/                   Only properly licensed local font files, if used
  languages/
  readme.txt
  CHANGELOG.md
```

Do not place client-uploaded logos, hero images, product images, team photos, or content photography in the theme's `assets` directory. Those belong in the WordPress Media Library. `screenshot.png` is only the WordPress theme-selection preview.

## 13. CSS and responsive behavior

- Use a mobile-first approach.
- Use CSS custom properties for the design system.
- Keep selectors scoped and maintainable.
- Avoid unnecessary `!important` rules.
- Respect `prefers-reduced-motion`.
- Provide visible keyboard focus styles.
- Prevent horizontal overflow at common viewport widths.
- Test long titles, long menu labels, missing images, and large text zoom.
- Do not inline the main stylesheet in templates.

> [!IMPORTANT]
> **USER INPUT REQUIRED: Supported devices and browsers**
>
> Provide any special requirements beyond current versions of Chrome, Edge, Firefox, and Safari:
>
> - Minimum mobile width: `[RECOMMENDED: 320PX]`
> - Required tablets or devices: `[LIST OR NONE]`
> - Older browser support: `[LIST OR NONE]`
> - Right-to-left language support: `[YES / NO]`

## 14. JavaScript

- Use JavaScript only when HTML and CSS cannot provide the required behavior.
- Use vanilla JavaScript unless a justified dependency is approved.
- Keep navigation code in `assets/js/navigation.js`.
- Enqueue scripts in the footer with `wp_enqueue_script()`.
- Do not hard-code WordPress URLs in JavaScript.
- Use localized data or REST nonces only when required.
- Ensure interactive controls work with keyboards and screen readers.
- Avoid animation or interaction that blocks page use when JavaScript fails.

## 15. Enqueuing and cache busting

Enqueue theme assets through WordPress. Use the active theme version as the asset version so browsers, CDNs, and optimization plugins request changed files after every release:

```php
$theme_version = wp_get_theme()->get( 'Version' );

wp_enqueue_style(
    'THEME_SLUG-style',
    get_theme_file_uri( 'assets/css/main.css' ),
    array(),
    $theme_version
);

wp_enqueue_script(
    'THEME_SLUG-navigation',
    get_theme_file_uri( 'assets/js/navigation.js' ),
    array(),
    $theme_version,
    true
);
```

Replace `THEME_SLUG` with the approved slug. Enqueue only assets required by the current page when a feature is not site-wide.

## 16. Accessibility

Target WCAG 2.2 AA practices without claiming legal certification. At minimum:

- Semantic landmarks and heading order.
- A visible skip-to-content link.
- Keyboard-accessible menus, dropdowns, dialogs, and controls.
- Visible focus states.
- Sufficient color contrast.
- Meaningful link text.
- Media Library alt text rendered correctly.
- Form labels and error identification supplied by the selected form plugin.
- No essential information conveyed by color alone.
- Reduced-motion support.
- Usable layouts at 200% text zoom.

## 17. Performance and security

- Escape dynamic output with the appropriate WordPress escaping function.
- Sanitize and validate saved settings.
- Use nonces and capability checks for any custom administrative action.
- Do not include secrets, passwords, API keys, or environment credentials in the theme.
- Do not write directly to the database when WordPress APIs are available.
- Avoid unnecessary libraries, fonts, requests, and layout shifts.
- Use responsive Media Library images and include image dimensions.
- Prefer local theme assets over third-party CDNs when licensing permits.
- Remain compatible with page caching and common CDN setups.

## 18. WooCommerce and optional integrations

> [!IMPORTANT]
> **USER INPUT REQUIRED: Integrations**
>
> Identify every required integration:
>
> - WooCommerce: `[YES / NO]`
> - Form plugin: `[NAME OR NONE]`
> - SEO plugin: `[NAME OR NONE]`
> - Multilingual plugin: `[NAME OR NONE]`
> - Membership plugin: `[NAME OR NONE]`
> - Events, bookings, learning, directory, or other plugin: `[LIST OR NONE]`
> - Analytics or consent platform: `[LIST OR NONE]`

When WooCommerce is required, add WooCommerce theme support and style its native templates and blocks without copying plugin templates unless a documented override is necessary. Keep checkout and account workflows accessible and compatible with plugin updates.

## 19. Theme versioning and replacement updates

Use semantic versioning:

- `1.0.0` for the first production release.
- Increment the patch number for fixes, such as `1.0.1`.
- Increment the minor number for backward-compatible features, such as `1.1.0`.
- Increment the major number for breaking structural changes, such as `2.0.0`.

Set the version in the `style.css` theme header:

```css
/*
Theme Name: THEME_DISPLAY_NAME
Theme URI: THEME_URI
Author: THEME_AUTHOR
Author URI: THEME_AUTHOR_URI
Description: THEME_DESCRIPTION
Version: 1.0.0
Requires at least: 6.5
Tested up to: CURRENT_TESTED_WORDPRESS_VERSION
Requires PHP: 8.1
Text Domain: THEME_TEXT_DOMAIN
*/
```

Every release ZIP must contain the same root folder name and theme slug. For example:

```text
oak-studio-theme.zip
└── oak-studio-theme/
    ├── style.css
    ├── functions.php
    └── ...
```

Before uploading a release:

1. Increase the `Version` value in `style.css`.
2. Add the changes to `CHANGELOG.md`.
3. Commit and tag the release in Git.
4. Build a clean ZIP containing only the theme folder and production files.
5. Back up the website and test the ZIP on staging.
6. In WordPress, go to **Appearance > Themes > Add New > Upload Theme**.
7. Upload the new ZIP with the same theme folder name.
8. When WordPress detects the installed theme, choose **Replace current with uploaded**.
9. Confirm the theme remains active and the new version is listed.
10. Clear page cache, optimization cache, CDN cache, and browser cache if necessary.
11. Test the changed templates and assets on desktop and mobile.

The replacement upload must overwrite the previous theme code while preserving posts, pages, menus, Media Library files, Customizer values, widgets, and other database content. Never store user uploads or editable business content inside the theme folder because replacement updates can remove or overwrite theme files.

Using the theme version for enqueued CSS and JavaScript provides cache busting, helping the latest design changes appear after an update.

Do not edit the installed production theme directly. Make changes in source control, increase the version, create a new release ZIP, and upload it as a replacement. Any direct code changes made in WordPress's Theme File Editor will be overwritten by the next release.

> [!IMPORTANT]
> **USER INPUT REQUIRED: Version and update ownership**
>
> Provide:
>
> - Initial theme version: `[RECOMMENDED: 1.0.0]`
> - Person or team responsible for releases: `[REQUIRED]`
> - Source repository location: `[REQUIRED OR "CREATE NEW REPOSITORY"]`
> - Staging-site URL or testing method: `[REQUIRED]`
> - Backup method: `[REQUIRED]`
> - Cache/CDN services that must be cleared: `[LIST OR NONE]`
> - Whether automatic updates from a private repository are required: `[YES / NO]`

## 20. Manual setup after theme activation

Document these steps in `readme.txt`, adjusted to the completed theme:

1. Activate the theme under **Appearance > Themes**.
2. Upload the logo, alternate logo, site icon, hero images, footer images, and all other content images to the Media Library.
3. Select the logo under **Appearance > Customize > Site Identity** or the equivalent WordPress setting.
4. Select the Site Icon.
5. Create the Primary Menu under **Appearance > Menus**, add the required links, and assign it to **Primary Menu** so it appears in the main header.
6. Create and assign the Footer Menu if required.
7. Configure footer widget areas, contact details, social links, and footer image settings.
8. Create or select the static home page under **Settings > Reading**.
9. Assign featured images and other Media Library images to the relevant content.
10. Configure required plugins and confirm their templates match the theme.
11. Regenerate image thumbnails if new custom sizes were added to an existing site.
12. Clear caches and test the public website while logged out.

## 21. Testing

Test in a local or staging WordPress installation before production deployment.

Verify:

- The theme activates without PHP errors, notices, or warnings.
- The WordPress Site Health screen shows no theme-related critical issue.
- The custom logo and every content image are selected from and rendered through the Media Library.
- No content image uses a base64 source, local computer path, or hard-coded production URL.
- The Primary Menu appears in the main header after assignment under Appearance > Menus.
- Dropdown menus and the mobile menu work with keyboard, touch, mouse, Escape, and screen readers.
- The Footer Menu and styled footer render correctly.
- Home, page, post, archive, search, 404, and required plugin views work.
- Layouts work at 320px, 390px, 768px, 1024px, 1280px, and a wide desktop width.
- Text zoom, long content, missing images, and empty optional sections do not break the layout.
- Color contrast and focus states are usable.
- CSS and JavaScript load once and use the current theme version.
- A versioned replacement ZIP overwrites the previous theme version and displays the new changes after caches are cleared.
- Content, menu assignments, Media Library files, and saved theme settings remain intact after the update.
- The theme works with the required WordPress and PHP versions.

If browser automation is available, capture and review screenshots at mobile, tablet, and desktop widths before declaring the theme complete.

## 22. Version control

- Initialize a Git repository in the source project.
- Commit the approved brief and any design references before implementation.
- Commit the first working theme as the `1.0.0` milestone.
- Use feature branches or focused commits for significant changes.
- Tag every distributed release.
- Include a `.gitignore` for operating-system files, editor files, dependency folders, build output, local WordPress installations, and secrets.
- Keep release ZIP files outside the theme source folder or in a dedicated release directory.

## 23. Coding standards and constraints

- Follow WordPress Coding Standards.
- Prefix PHP functions, classes, handles, hooks, and constants with a unique prefix derived from the theme slug.
- Use the approved text domain for translatable strings.
- Escape output and sanitize saved data.
- Do not modify WordPress core or plugin files.
- Do not place business functionality in the theme when it belongs in a plugin.
- Do not hard-code navigation links.
- Do not hard-code content images or logos.
- Do not add inline site-wide CSS or JavaScript when an enqueued file is appropriate.
- Do not claim accessibility, legal, privacy, security, or SEO certification.
- Do not change approved design decisions without documenting the change and receiving approval.
- Keep the theme usable when optional content or integrations are absent.

## 24. Deliverables

Provide:

- Complete theme source folder.
- Installable versioned theme ZIP.
- `readme.txt` with installation, menu, Media Library, footer, and update instructions.
- `CHANGELOG.md` beginning with version `1.0.0`.
- `theme.json` and all required PHP, CSS, and JavaScript files.
- WordPress theme screenshot.
- List of required and recommended plugins.
- List of all user configuration still required after activation.
- Testing report covering responsive layouts, menus, Media Library assets, footer, accessibility checks, and version replacement.
- Source-control repository with the initial release tagged.

## 25. Done criteria

The project is complete when:

- Every **USER INPUT REQUIRED** block has been answered or explicitly marked not applicable.
- The theme activates cleanly and matches the approved style direction.
- The header displays the WordPress custom logo and assigned Primary Menu.
- The mobile menu is responsive and accessible.
- Logos and content images are managed through the Media Library.
- Required WordPress templates and integrations render correctly.
- The theme includes a responsive, editable, styled footer.
- The theme readme explains how to assign the Primary Menu to the main header.
- The release uses a consistent theme slug and incremented semantic version.
- Uploading a new ZIP with the same theme folder replaces the previous version without losing content, menus, media, or settings.
- Versioned asset enqueues and documented cache clearing make the new theme changes visible.
- The final ZIP, documentation, changelog, repository, and test results are delivered.

---

This MD file was created and provided by https://thirdoakproductions.com please contact us if you need help.
