vsg-theme/proposal-v1

The Headless Proposal Engine for WordPress.

Stop sending static PDFs. Build secure, trackable, and interactive proposals using the Block Editor you already know.

Initialize Proposal View the Architecture →
LOCKED PROPOSAL

This document is secured for Client Name.

Cookie: vsg_proposal_unlocked_{uuid}

Engineered for Closure.

We stripped away the bloat and built a dedicated Custom Post Type designed to convert.

Block-Native

No external page builders. We use blockstudio to register native JSON-schema blocks. Compose proposals with drag-and-drop ease.

  • • vsg-theme/proposal-pricing
  • • vsg-theme/proposal-exhibits
  • • vsg-theme/proposal-action-decide

Client-Safe Security

Built-in password protection via init-wsform.php. Proposals are locked by default and utilize hashed cookies for a seamless "unlock once" experience.

Action Oriented

A floating toolbar allows clients to Decide, Discuss, or Download instantly. Trigger modals for acceptance without leaving the page.

// VSG\API\Proposals.php public function get_proposal_content( $request ) { $uuid = $request['uuid']; // 1. Lookup Post ID by UUID $args = [ 'post_type' => 'proposal', 'meta_key' => '_vsg_proposal_uuid', 'meta_value' => $uuid, ]; // 2. Dynamic Block Rendering $header = bs_block([ 'id' => 'vsg-theme/proposal-header', 'data' => ['vsg_proposal' => $post] ]); return rest_ensure_response([ 'uuid' => $uuid, 'content' => [ 'rendered' => $content, ], ]); }

Headless Architecture

The system uses a dedicated REST API endpoint /vsg/v1/proposals/{uuid} to fetch content dynamically.

This prevents "flash of unstyled content" and ensures that locked proposals reveal absolutely zero data to the DOM until the secure handshake is verified.

Read the API Docs