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 sitequeenofsandiego.com– Event booking and informationevents.sailjada.com– Event hub and calendarburialsatseasandiego.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