Integrating USCG Passenger Manifest Requirements into Charter Operations: A Template-Driven Approach

What Was Done

JADA's guest confirmation email flow was missing a critical operational requirement: the U.S. Coast Guard mandate for a pre-departure passenger manifest with full names. While the existing workflow included a liability waiver template, that document served only as a signature sheet filled at the dock—not a true manifest. This gap meant JADA could face compliance violations on every charter.

The solution integrated a passenger name-list request directly into the existing guest confirmation email template, ensuring the request reaches every charter contact automatically. This was implemented via a shared template module—the same pattern used for all other policy blocks—making it maintainable and consistent across all confirmation email scripts.

Technical Details

Template Architecture: Shared Policy Blocks

JADA's charter operations use a centralized template pattern in ~/icloud-jada-ops/templates/boat_policy.py. This module defines reusable HTML and plaintext blocks that are imported by every guest confirmation email generator. The file already contained blocks for onboard policy, liability waiver, and booking terms.

To add the manifest request without duplicating logic across multiple scripts, two new constants were added to boat_policy.py:

MANIFEST_REQUEST_HTML = """
<section>
  <h3>Passenger Manifest Requirement</h3>
  <p>The U.S. Coast Guard requires a complete passenger manifest prior to departure.</p>
  <p><strong>Please reply to this email with the full names of all passengers and crew sailing on [DATE].</strong></p>
  <p>Names must be received at least 48 hours before your charter time. If we don't receive them by then, we'll follow up by phone to confirm.</p>
</section>
"""

MANIFEST_REQUEST_PLAIN = """
PASSENGER MANIFEST REQUIREMENT
The U.S. Coast Guard requires a complete passenger manifest prior to departure.

Please reply with the full names of all passengers and crew sailing on [DATE].
Names must be received at least 48 hours before your charter time.
"""

Both HTML and plaintext versions follow the existing template pattern, ensuring consistency in tone and formatting across confirmation emails.

Integration Into Guest Confirmation Email

The send_charter_emails.py script generates confirmation emails by composing multiple policy blocks. The relevant function, guest_html(), was modified to include the new manifest request immediately after the liability waiver section:

def guest_html(booking_data):
    """Generate guest confirmation email HTML."""
    html_parts = [
        render_header(),
        render_booking_details(booking_data),
        boat_policy.ONBOARD_POLICY_HTML,
        boat_policy.WAIVER_HTML,
        boat_policy.MANIFEST_REQUEST_HTML,  # NEW: passenger names
        boat_policy.TERMS_HTML,
        render_footer(),
    ]
    return "".join(html_parts)

Plaintext variants are handled similarly in the guest_plain() function. This approach ensures every confirmation email—regardless of charter type or booking source—includes the manifest request without code duplication.

Operational Workflow Documentation

The canonical ops checklist, CHARTER-WORKFLOW.md, was updated to document manifest collection as a mandatory step. A new Step D2 was inserted into the pre-departure phase, between guest page provisioning and crew dispatch:

## D. Pre-Departure Ops (48h–0h before charter)

### D1. Provision Guest Page
- Generate booking confirmation page
- Send initial guest email (includes manifest request)
- Flag in Stripe notes: "manifest request sent"

### D2. Collect Passenger Manifest **[MANDATORY]**
- Guest confirmation email requests full names via reply-to
- Names should land in `passengers/contacts.csv` with date and charter ID
- Generate printed manifest PDF for crew and USCG compliance
- **IF names not received by 24h prior:** follow up by SMS/phone
- Waiver signature sheet (filled at dock) ≠ manifest—don't rely on it
- Example: `passengers/2026-07-15-BOOKING-456.csv`

This documentation clarifies a critical distinction: the existing waiver template is a signature sheet, not a manifest. The true manifest—required by USCG—must include passenger names received in advance.

Why This Approach

Template reuse over duplication: Rather than modifying each confirmation email script individually, the shared template module ensures consistency. Any future changes to the manifest request (e.g., deadline updates) need only be made once.

Integrated into existing flow: Adding a new communication item would have fragmented the workflow. By folding the request into the existing guest confirmation email, it rides the natural contact point—no new process overhead.

Compliance-first placement: Placing the manifest request alongside the waiver (rather than as an afterthought) emphasizes that both are required—and that they serve different purposes. This prevents crew or guests from mistaking the day-of waiver signature sheet for the Coast Guard manifest.

Key Decisions

  • 48-hour lead time: Balances USCG requirements (manifest before departure) with booking reality (late bookings). Allows time for name collection and crew coordination.
  • 24-hour follow-up trigger: If names aren't received by 24 hours before departure, ops staff must call to confirm attendance and capture any missing names before the charter launches.
  • Persistent storage location: Names are stored in passengers/contacts.csv with charter date and booking ID, creating an audit trail for compliance purposes.
  • No new infrastructure: Leverages existing email template pattern and ops workflow docs rather than adding custom logic or database schema.

What's Next

Ongoing work includes:

  • Manual confirmation emails: Some charters still use hand-built confirmation emails (copied and rewritten rather than generated). These must manually include the MANIFEST_REQUEST_HTML block to maintain consistency.
  • Manifest PDF generation: A follow-up task is to auto-generate a USCG-compliant manifest PDF from the names collected, formatted for crew and compliance records.
  • Crew notification: Integrate the passenger manifest into the crew dispatch email, so crew see the final passenger list before embarking.
  • Compliance audit: Periodically verify that manifests are collected and stored within the 48-hour window for all active charters.

The foundation is now in place for systematic, USCG-compliant passenger manifest collection across all JADA charters.