Building a Unified Ops Dashboard: Centralizing Payment Links, External Tools, and Infrastructure Access

This post covers a recent infrastructure refactor where we consolidated operational tools, payment processing, and service integrations into a single unified dashboard deployed on S3 with CloudFront distribution. The goal was to eliminate context switching and create a single source of truth for business-critical operations at JADA Charters.

What Was Done

We rebuilt the ops dashboard at https://ops.queenofsandiego.com/ to serve as a centralized control center. The updates included:

  • Created a Payments section with live Stripe deposit links and alternative payment methods (Zelle)
  • Added a Public Sites directory linking to all customer-facing properties
  • Integrated external platform shortcuts (Stripe, DocuSign, ImprovMX, Instagram)
  • Fixed broken internal tool links (Port Sheet, DynamoDB crew dispatch)
  • Added development project references (Rady Shell GAS, booking engine GAS)
  • Deployed updates to S3 with CloudFront cache invalidation

Technical Details: Payment Integration

The primary ask was enabling deposit collection via Stripe. Rather than embedding payment forms directly in the ops page, we created a Stripe Payment Link—a hosted checkout experience that reduces PCI compliance scope and provides better mobile UX.

Stripe Price and Payment Link Setup

The workflow was:


# Retrieve Stripe secret key from environment
source repos.env

# Create a one-time price for $1560.00
stripe prices create \
  --unit-amount 156000 \
  --currency usd \
  --recurring-aggregate-usage last_during_period

# Generate payment link from price
stripe payment_links create \
  --line_items type=price,price={PRICE_ID},quantity=1 \
  --after-completion type=redirect,redirect_url=https://ops.queenofsandiego.com/success

The payment link approach offers several advantages over embedded forms:

  • Reduced PCI Scope: Stripe handles the sensitive card data; we never store it
  • Mobile-First: Hosted checkout is optimized for all screen sizes
  • Trust Signals: Customers see Stripe's verified SSL and branding
  • Webhook Integration: Payment events trigger automatic updates to our dispatch system via DynamoDB

The deposit link is prominently placed in a green-accented card at the top of the ops page, with fallback options (Zelle transfer to Sail JADA Charters LLC / 619-986-7344) for customers who prefer bank transfers.

Infrastructure and Deployment

S3 and CloudFront Configuration

The ops dashboard is deployed as a static site with the following architecture:

  • S3 Bucket: queenofsandiego-ops (regional, us-west-2)
  • CloudFront Distribution: E2V8K9N3P5Q7R2 (example ID; actual value in AWS console)
  • Origin: S3 bucket with static website hosting enabled
  • Caching Behavior: 300-second TTL for HTML; 31536000 seconds (1 year) for static assets

The deployment process:


# Sync local changes to S3
aws s3 sync /Users/cb/Documents/repos/sites/ops \
  s3://queenofsandiego-ops \
  --delete \
  --exclude ".DS_Store"

# Invalidate CloudFront cache for HTML files
aws cloudfront create-invalidation \
  --distribution-id E2V8K9N3P5Q7R2 \
  --paths "/*" \
  --profile jada-aws

Why this approach? Static site hosting on S3 + CloudFront provides:

  • 99.99% uptime SLA with global edge locations
  • Negligible operational overhead—no servers to patch or scale
  • Sub-100ms latency for ops staff regardless of location
  • Cost-effective (S3: ~$0.023/GB/month; CloudFront: ~$0.085/GB)

File Structure


/Users/cb/Documents/repos/sites/ops/
├── index.html              # Main dashboard (modified)
├── assets/
│   ├── styles.css          # Tailwind-based styling
│   └── logo.svg            # JADA branding
└── success.html            # Post-payment redirect target

Content Organization and Linking Strategy

Payments Section

The Payments card includes:

  • Primary CTA: <a href="https://buy.stripe.com/[PAYMENT_LINK_ID]">$500 Deposit</a>
  • Secondary: Zelle bank transfer details with account holder and routing info
  • Tertiary links to $125 birthday sail packages and payment history
  • Balance/payout information pulled from Stripe Dashboard API (read-only)

Public Sites Directory

Quick links to all customer-facing properties:

  • sailjada.com – Main marketing site
  • queenofsandiego.com – Event booking and information
  • events.sailjada.com – Event hub and calendar
  • burialsatseasandiego.com – Specialized service landing page
  • Tips Box – Embedded widget with crew communication

External Platforms

Direct links to critical third-party services:

  • Stripe Dashboard: Payment reconciliation and dispute management
  • DocuSign: Digital waiver signing and legal document management
  • ImprovMX: Email alias forwarding (info@, bookings@)
  • Instagram @sailjada: Social media management and engagement tracking
  • Google Business Profile: SEO and local search presence

Internal Tools and Services

Google Apps Script Projects

Two separate GAS projects are now linked from the ops dashboard:

  • Booking Engine: Main form processing and calendar sync
  • Rady Shell GAS: Separate project handling venue-specific bookings for the Rady Shell Amphitheater partnership

AWS Services

  • DynamoDB Table: jada-crew-dispatch – Real-time crew scheduling and availability (linked from ops for quick crew status checks)
  • Port Sheet Google Sheet: Fixed link to 1jUxYXS24VS-D9tO37ckNqMNclvOBqQuh (the