← Back to projects

Released public product · Headless WordPress integration

SEO & Social

Editor-managed metadata with a predictable frontend contract

SEO & Social gives WordPress editors controlled workflows for SEO, social, schema, FAQ, Open Graph images, and LLMs source data. It resolves global defaults and per-content overrides into a stable REST contract for a separate frontend.

I am the sole creator and owned the project from product definition and WordPress/PHP implementation through REST contract design, validation, documentation, packaging, and public release.

SEO & Social WordPress settings and structured metadata workflow
EvidenceReleased public product · Inspectable source
UsersHeadless WordPress developers and content editors
OwnershipSole creator · Product definition through release
StackWordPress · PHP · REST API · JavaScript · GitHub Actions
BoundaryThe plugin provides structured data; a separate frontend owns rendering
StatusPublic open-source reference project · GPL-2.0-or-later
01

The problem

In a traditional WordPress site, an SEO plugin can print tags into the document head. In a headless build, WordPress and the public frontend are separate systems. Editors still need familiar controls, while the consuming application needs stable, resolved data.

The product challenge was to define what editors save, how defaults and overrides resolve, which data is public, and what the frontend must render—while preserving that contract across permissions, malformed input, compatibility changes, and packaging.

02

The data workflow

Stored WordPress values resolve into a predictable contract for a separately owned frontend.

WordPressGlobal defaultssite-wide settings
WordPressContent overridespage-level values
Plugin boundaryResolved REST contractpredictable payload
URL ownerFrontend renderingmetadata + public routes
Stored values remain distinct and auditable. Consumers receive resolved output with defined fallback behavior; the separate frontend owns rendering.
03

Product decisions

The implementation keeps editorial control, resolved output, frontend ownership, and generated assets within clear boundaries.

01

Separate stored values from resolved output

Editor-entered values remain distinct from the fallback-resolved payload, so consumers receive predictable data without hiding what was saved.

02

Keep rendering with the URL owner

WordPress provides structured source data. The separate frontend owns canonical URLs, metadata, schema markup, FAQ presentation, sitemap files, /llms.txt, and public routes.

03

Control editorial and public access

Settings, content overrides, REST output, generated files, and operational actions use explicit capability and visibility rules instead of sharing one broad access model.

04

Constrain generated media and cleanup

Open Graph image generation, public files, caches, uninstall behavior, and compatibility checks have defined lifecycle rules.

04

The editor workflow

Editors manage global defaults and page-level overrides in WordPress. The plugin validates and resolves those values, then exposes structured output for the separate frontend.

Editor-managed WordPress data becomes structured input for the consuming frontend.
05

Validation evidence

Coverage follows the product from stored values and REST resolution through editor workflows and the downloadable ZIP.

24 scenariosManual risk baseline
ExpandedPHPUnit integration coverage
23 testsPlaywright admin coverage
Verified ZIPPackage, activation, updates, Plugin Check and compatibility gates
06

When testing changed the editor experience

Dynamic FAQ rows reused a placeholder editor ID. The first rich-text editor initialized correctly; later answers could fail to initialize independently.

I documented the behavior in issue #1, implemented the fix in pull request #3, and added regression coverage before the change shipped in v1.1.0.

Later work tightened dynamic-settings validation for incomplete rows, duplicate keys and URLs, invalid URL formats, and exact duplicate schema rows.

Seo & Social FAQ meta box showing three independently initialized answer editors with different saved content
Regression coverage and manual retesting confirmed that dynamically added FAQ answers initialize independently and preserve different values after save and reload.
07

Packaging and release validation

The downloadable ZIP is the product under test, including native update discovery from verified stable GitHub Releases.

  • Dependency audits, PHP syntax, and WordPress Coding Standards
  • PHPUnit integration and 23 Playwright admin tests
  • Translation, manifest, and deterministic ZIP verification
  • Plugin Check, clean activation, version, and native-update verification
  • WordPress and PHP compatibility matrix

The gates validate the same deterministic archive a user downloads, not a different source checkout.

View release workflows
08

Outcome

SEO & Social is a public WordPress plugin with a documented editor workflow, predictable resolved REST output, explicit access boundaries, reproducible packaging, native updates, and regression coverage.

Editors manage source data in WordPress, the plugin exposes a stable contract, and the separate frontend owns how that data appears on the public website.

Public implementation and release evidence

Inspect the plugin, REST contract, tests, workflows, documentation, and releases.