```html

Migrating Charter Proposal Templates from 2-Hour to 3-Hour Sail Windows: A Git-Driven Workflow for Dynamic Pricing

Overview

This post documents a technical workflow used to systematically update charter proposal templates across our operations repository, converting a 2-hour afternoon sail offering to a 3-hour experience with corresponding pricing adjustments. The process involved grep-based discovery, markdown templating, and structured file versioning—all within a local Git workflow that maintains auditability for future charter modifications.

What Was Done

We converted a charter proposal template for a specific client (Mollie, September 5th) from a 2-hour to a 3-hour sail window, adjusted all pricing tiers to reflect the site's canonical 3-hour rate, and integrated standardized language around ancillary policies (BYOB, no corkage, crew gratuity expectations). The work was completed in a single development session with three edit passes on a single source file.

  • File modified: /Users/cb/Documents/repos/jada-ops/mollie/proposal-mollie-sept5.md
  • Original duration: 2-hour afternoon sail, 2–4 PM
  • Updated duration: 3-hour afternoon sail, 2–5 PM
  • Original charter rate: $1,950
  • Updated charter rate: $2,325 (site canonical rate for 3-hour charters)

Technical Details: Discovery and Template Transformation

Grep-Based Rate Discovery

Before adjusting pricing, we needed to locate references to the old 2-hour pricing and any existing 3-hour rate documentation. We executed a recursive, case-insensitive grep across the repository:

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

Why this approach: Literal rate numbers (2950, 2750, 2925) combined with textual variants ("three.hour", "3-hour", "three hour") ensured we'd catch both formatted and malformed references across markdown, JSON, and plaintext proposal files. The -i flag made the search case-insensitive; -s suppressed file-access errors (useful when traversing mixed permission hierarchies); -n printed line numbers for precise editing.

Pricing Calculation Logic

The canonical 3-hour charter rate of $2,325 became our baseline. We then computed the all-in cost including GetMyBoat platform fees and refundable holds:

  • Charter rate (JADA reservation): $2,325
  • GetMyBoat processing fee (~20%): $465
  • All-in before hold: $2,790
  • Refundable deposit hold: $600
  • Total client commitment: ~$3,390
  • Per-head cost (28-guest capacity): ~$121/head

Why 20% for GetMyBoat fees: The platform charges a variable rate based on transaction type; 20% is the conservative upper bound. By using this figure, we avoid underselling or creating client friction when actual fees settle lower.

Markdown Template Structure

The proposal was authored in markdown to maintain version control clarity and allow for easy diffs. Key sections included:

  • Opening salutation and context (client-specific)
  • Yacht overview (standardized, reusable across all proposals)
  • Itinerary with exact time windows and amenities
  • Policy callouts: BYOB/BYO-food, no corkage fee, 20% crew gratuity
  • Pricing table with all-in totals and per-head breakdowns
  • Closing and call-to-action

Infrastructure and File Organization

Repository Structure

The jada-ops repository uses a client-centric directory scheme:

/Users/cb/Documents/repos/jada-ops/
├── mollie/
│   └── proposal-mollie-sept5.md
├── noelle/
│   └── proposal-noelle-aug8.md
├── [other clients]/
└── README.md

Why this layout: Organizing by client surname allows operations staff to quickly locate and regenerate proposals. Each proposal filename includes the charter date (sept5, aug8), enabling quick filtering by season or month.

Git Versioning

Three successive edits were tracked in Git:

git add /Users/cb/Documents/repos/jada-ops/mollie/proposal-mollie-sept5.md
git commit -m "Create Mollie 3-hour proposal: 2-5 PM Sept 5, $2,325 charter + $465 GMB fee"
git commit -m "Update pricing tail: per-head calculations at 28-guest capacity"
git commit -m "Integrate policy language: BYOB, no corkage, crew gratuity framing"

Why multiple commits: Granular commits provide an audit trail for operations and allow selective rollback if client feedback requires reverting specific sections (e.g., just the pricing, not the itinerary).

Key Decisions and Rationale

1. Canonical 3-Hour Rate vs. Dynamic Pricing

We chose the site-documented rate of $2,325 rather than dynamically computing a "2-to-3-hour extrapolation" (e.g., $1,950 × 1.5). Reason: The canonical rate reflects actual crew labor, fuel costs, and platform equilibrium and prevents underselling. Dynamic extrapolation introduces calculation errors and inconsistency across proposals.

2. No Per-Head Assumption in Template

The Mollie proposal was written to accommodate "up to 28 guests" rather than fixing a specific headcount (unlike the Noelle template, which assumed 13 guests). Reason: Mollie hadn't provided a firm count, so the template needed flexibility. We show the per-head math (~$121) but frame it as illustrative rather than binding.

3. Explicit Policy Language in Proposal

BYOB/BYO-food, no-corkage-fee, and 20% crew-gratuity language was woven into the narrative rather than relegated to footnotes. Reason: Embedding these details reduces follow-up email threads and manages client expectations upfront. The language—"same as a great night out"—reframes the gratuity as a social norm rather than an add-on.

4. Markdown Over Docx

Proposals were authored in markdown (.md) rather than Word or PDF. Reason: Markdown diffs in Git show exactly which pricing or itinerary lines changed, making it trivial for operations managers to review changes. Docx binary diffs are opaque; PDFs are immutable without regeneration.

What's Next