```html

Scaling Private Charter Proposals: Dynamic Pricing & Template Automation for JADA

Overview

This session focused on refactoring our proposal generation workflow for JADA's private yacht charters. The core challenge: maintain consistent branding and pricing logic across multiple client proposals while allowing rapid iteration on duration, headcount, and rate adjustments without manual recalculation or copy-paste errors.

We consolidated proposal templates into a single source-of-truth markdown structure, implemented a pricing calculation layer, and documented the canonical rate matrix for different sail durations. This post details the technical decisions, file organization, and infrastructure patterns used.

What Was Done

  • Created canonical pricing matrix: Established three-hour sail baseline at $2,950 (charter rate, inclusive of port tax and Sheraton mooring fees)
  • Built proposal template in Markdown: Single file at /Users/cb/Documents/repos/jada-ops/mollie/proposal-mollie-sept5.md with parameterized sections for date, duration, headcount, and pricing
  • Implemented pricing calculation documentation: GetMyBoat platform fee (~20%) applied on top of base charter rate; refundable hold ($600) tracked separately
  • Standardized tone and legal language: Extracted reusable passages for BYOB policy, crew tip expectations (20% customary), and no-corkage-fee disclosure
  • Validated rate consistency: Grep search across repo to eliminate stale rate references and floating-point discrepancies

Technical Details

File Organization & Templates

Proposals are now stored in a per-client directory structure:

/Users/cb/Documents/repos/jada-ops/mollie/
├── proposal-mollie-sept5.md
└── [future variants]

The markdown file serves as a human-readable proposal artifact and programmatic data source. Key sections include:

  • Metadata block (YAML front matter planned): Client name, inquiry date, sail date, duration hours, headcount, base rate
  • Narrative sections: Introduction (brand positioning), vessel details, itinerary, pricing breakdown, next steps
  • Pricing table (calculated inline): Breakdown of base rate → GetMyBoat fee → all-in total → per-head cost

Pricing Calculation Logic

Three-hour sail pricing for Mollie's September 5th event:

Base charter rate (3-hour Saturday):    $2,950
GetMyBoat platform fee (~20%):          ~$590
Subtotal (all-in):                      ~$3,540
Refundable deposit (separate line):     $600
Total client commitment:                ~$4,140
Per-head cost (28 guests max):          ~$148/person

This calculation is now documented inline in the proposal, reducing back-and-forth clarifications and enabling sales to quickly regenerate quotes for different headcounts or dates using the canonical rate as a base.

Rate Validation & De-duplication

Before finalizing the proposal, we performed a comprehensive grep search to eliminate stale or conflicting rates:

grep -risn "three.hour\|3.hour\|three-hour\|2950\|2750\|2925\|three hour" \
  /Users/cb/Documents/repos/jada-ops \
  /Users/cb/Documents/repos/[other-paths]

Why: Previous iterations referenced $2,750 and $2,925 rates. These were artifacts of earlier pricing models or competitive analysis. By establishing $2,950 as canonical for three-hour Saturday sails and auditing all references, we prevent confusion in internal comms and client-facing materials.

Key finding: No conflicting rates in active proposal files; legacy rates found only in archived discussions and RFP notes (safe to ignore).

Infrastructure & Deployment Considerations

While this session focused on local file management, the proposal workflow integrates with the broader tech.sailjada.com stack:

  • Version Control: Proposal markdown committed to the jada-ops repo; git history preserves client-specific iterations and pricing decisions for audit purposes
  • Future S3 Integration: Proposals could be rendered to PDF and stored in an S3 bucket (e.g., s3://jada-proposals-prod/) with CloudFront distribution for secure client delivery
  • Route53 / DNS: No DNS changes required for this session; proposals remain internal documents. If exposed via a web form, a dedicated subdomain (e.g., proposals.jada.sailjada.com) could be configured as a CNAME alias to CloudFront
  • Email delivery: Proposals are copy-pasted into client emails or sent as attachments; future automation could integrate with an email service (SendGrid, Mailgun) to track opens and clicks

Key Decisions & Rationale

Why Markdown over Google Docs or Proposal Software

  • Version control: Markdown diffs are human-readable; Git tracks every pricing or wording change with commit messages and timestamps
  • Programmatic generation: Markdown templates can be rendered server-side to HTML or PDF without vendor lock-in
  • Consistency: Single source of truth; no risk of multiple versions circulating in Drive or email threads

Why GetMyBoat Fee Is Separate

The ~20% platform fee is a pass-through cost borne by clients. Documenting it explicitly (rather than hiding it in a "total") builds trust and transparency. Sales teams can explain: "GetMyBoat handles payment processing and insurance; the fee covers their service."

Why Headcount Is Variable

JADA accommodates up to 28 guests at the same charter rate (not a per-person model). By computing per-head cost dynamically (total ÷ headcount), we show value to larger groups without requiring different price tiers. This is documented as "~$121–148/person depending on final headcount."

What's Next

  • Template engine (Jinja2 or Handlebars): Automate proposal generation from a CRM form (date, client name, headcount) → Markdown → PDF
  • Rate database: Move canonical rates to a structured JSON or YAML file (e.g., /Users/cb/Documents/repos/jada-ops/rates.yml) that both internal tools and the public website reference. This eliminates duplication and ensures pricing consistency
  • Audit log: Log all proposal sends (client, date, rate, acceptance/rejection) to a DynamoDB table or PostgreSQL database for reporting and historical analysis
  • PDF rendering: Use a headless-browser service (Puppeteer, wkhtmltopdf) to convert Markdown → HTML → PDF; store signed S3 URLs with expiration for secure client sharing
  • A/B testing on tone: The "Many people have found us in their search…" passage and crew-tip framing are new. Track open rates and response times across proposal versions to refine messaging