Back to .md Directory

GatGridCruises

Defines a Disney cruise planning platform with 40 pages, seed data, and admin tools for ad-supported media and deal discovery.

May 2, 2026
0 downloads
2 views
ai rag
View source

What this file does

Defines a Disney cruise planning platform with 40 pages, seed data, and admin tools for ad-supported media and deal discovery.

When to use it

  • Building a niche travel or cruise comparison site with affiliate revenue
  • Creating a Next.js app with Supabase, Recharts, and Vercel cron jobs
  • Developing a content-heavy site with SEO pillar pages and interactive tools
  • Starting a project that needs local seed data for offline development

Assumes this stack

Next.js 15TypeScriptTailwind CSSSupabaseRechartsResend

GatGridCruises

Magically Valuable Disney Cruises

A Disney cruise planning and deal discovery platform. Not a booking site — an ad-supported media and tools property for families who want transparent, honest information before committing to a Disney cruise.

Tech Stack

  • Framework: Next.js 15 (App Router, Server Components)
  • Language: TypeScript (strict mode)
  • Styling: Tailwind CSS + custom design tokens (navy #0A2540, gold #D4AF37)
  • Database: Supabase (Postgres + Auth + RLS) — local seed data for MVP
  • Charts: Recharts
  • Forms: React Hook Form + Zod
  • Icons: Lucide React
  • Fonts: Inter (body) + Fraunces (headings)
  • Email: Resend (transactional + weekly digest)
  • Hosting: Vercel (with cron jobs)

Quick Start

# 1. Clone and install
git clone <repo-url>
cd gatgridcruises
npm install

# 2. Set up environment (optional — app works without it using local seed data)
cp .env.local.example .env.local

# 3. Run dev server
npm run dev

Open http://localhost:3000.

The app runs fully with local seed data out of the box — no Supabase or API keys needed for development.

Project Structure

src/
├── app/                        # Next.js App Router (40 pages)
│   ├── page.tsx                # Homepage
│   ├── deals/                  # Deal grid with filters + sorting
│   ├── sailing/[id]/           # Sailing detail (price chart, itinerary, CTA)
│   ├── ships/                  # Ship index + detail pages
│   ├── guides/                 # 10 SEO pillar content pages
│   ├── tools/
│   │   ├── cost-calculator/    # True cost calculator (15+ categories)
│   │   ├── flights/            # Flight finder for departure ports
│   │   ├── staterooms/         # Stateroom finder + reviews
│   │   ├── transfers/          # Transfer decision tool
│   │   └── compare/            # Side-by-side sailing comparison
│   ├── hotels/                 # Pre-cruise hotel guides by port
│   ├── subscribe/              # Email newsletter signup
│   ├── account/watchlist/      # Saved sailings (localStorage → Supabase)
│   ├── auth/                   # Login/signup (magic link)
│   ├── admin/                  # Admin panel (dashboard, CRUD, ads)
│   ├── api/                    # API routes (subscribe, cron, reviews, alerts)
│   ├── go/[...slug]/           # Affiliate link wrapper with click tracking
│   ├── about/                  # About page
│   ├── disclosures/            # FTC affiliate disclosures
│   ├── privacy/                # Privacy policy
│   └── terms/                  # Terms of use
├── components/
│   ├── layout/                 # Header, Footer
│   └── ui/                     # Ad slots, chatbot, charts, cards, etc.
├── data/                       # Local seed data (ships, ports, sailings, etc.)
├── lib/                        # Utils, data access, auth, scraper, email templates
└── types/                      # TypeScript interfaces
supabase/
└── migrations/                 # Production database schema
docs/
└── boardwalk-compliance-email.html  # Boardwalk Travel Agency email draft

All Pages

RouteDescription
/Homepage with featured deals, stats, newsletter CTA
/dealsAll sailings with filters, search, sorting, score badges
/sailing/[id]Price breakdown, history chart, itinerary, hotels, transfers
/shipsFleet index (8 ships)
/ships/[slug]Ship detail with staterooms, sailings, amenities
/hotelsPort hotel index
/hotels/[port]Port-specific hotel recommendations
/tools/cost-calculatorTrue trip cost calculator (15+ line items)
/tools/flightsFlight search for departure ports
/tools/stateroomsStateroom finder with noise ratings
/tools/staterooms/reviewsUser stateroom reviews
/tools/transfersTransfer guide index
/tools/transfers/[port]Port-specific transfer recommendations
/tools/compareSide-by-side sailing comparison
/guidesGuide hub (10 articles)
/guides/disney-cruise-cost-guideTrue cost breakdown
/guides/best-disney-cruise-stateroomsCategory-by-category guide
/guides/port-canaveral-vs-miamiPort comparison
/guides/first-time-disney-cruise-tips25 essential first-timer tips
/guides/disney-cruise-with-toddlersParents guide (ages 0-4)
/guides/castaway-cay-guidePrivate island guide
/guides/disney-cruise-packing-listComplete packing list
/guides/disney-cruise-vs-royal-caribbeanLine comparison
/guides/best-time-to-book-disney-cruiseBooking timing + price data
/guides/disney-cruise-food-guideEvery restaurant ranked
/subscribeNewsletter signup
/account/watchlistSaved sailings
/auth/loginMagic link login
/auth/signupAccount creation
/adminAdmin dashboard
/admin/sailingsManage sailings
/admin/shipsManage ships
/admin/portsManage ports
/admin/hotelsManage hotels
/admin/stateroomsManage staterooms
/admin/transfersManage transfers
/admin/subscribersManage subscribers
/admin/adsAd slot management + revenue dashboard
/aboutAbout page
/disclosuresFTC disclosures
/privacyPrivacy policy
/termsTerms of use

Key Features

  • Sailing Score Algorithm: Weighted formula (60% price, 20% urgency, 20% ship rating)
  • Price History Charts: Recharts-powered visualization of price trends over time
  • AI Chatbot: Floating concierge with 12+ rule-based responses
  • Affiliate Link Tracking: /go/[provider]/[target] wrapper with click logging
  • Price Scraper: Automated daily scraping via Vercel cron (6 AM EST)
  • Weekly Digest: Automated Sunday email with top deals (10 AM EST)
  • JSON-LD Structured Data: TouristTrip, Vehicle, BreadcrumbList, FAQPage schemas
  • Accessibility: Skip navigation, ARIA labels, semantic HTML, keyboard navigation

Seed Data

The MVP includes comprehensive local seed data:

  • 8 Disney ships with full metadata
  • 10 departure ports worldwide
  • 18 sample sailings with realistic pricing
  • 810 price snapshots (45 days × 18 sailings, 5 price patterns)
  • 242 staterooms across all 8 ships
  • 42 pre-cruise hotels across 7 ports
  • Transfer options for all ports

Deployment to Vercel

# Install Vercel CLI
npm i -g vercel

# Deploy
vercel

# Set environment variables
vercel env add NEXT_PUBLIC_SUPABASE_URL
vercel env add NEXT_PUBLIC_SUPABASE_ANON_KEY
vercel env add SUPABASE_SERVICE_ROLE_KEY
vercel env add RESEND_API_KEY
vercel env add CRON_SECRET
vercel env add ADMIN_ALLOWED_EMAILS

Or connect your GitHub repo to Vercel for automatic deployments on every push.

Supabase Setup

  1. Create a project at supabase.com
  2. Go to SQL Editor → paste contents of supabase/migrations/001_initial_schema.sql
  3. Run the migration — creates 10 tables with RLS policies, indexes, and triggers
  4. Copy your project URL and keys to .env.local
  5. Update src/lib/data.ts to use Supabase queries instead of local data

Legal

  • Independently owned and operated
  • Not affiliated with The Walt Disney Company or Disney Cruise Line
  • Disney Cruise Line® and related ship names are registered trademarks of The Walt Disney Company

Built with care by Grayson Starbuck.

What's inside

40 pages, 10 tools, 8 ships, 18 sailings, 810 price snapshots, 242 staterooms, 42 hotels, and admin CRUD.

Change this for your project

  • Replace robobuckstar-ops/gatgridcruises with your own repository URL
  • Replace Grayson Starbuck with your own name or brand
  • Replace Boardwalk Travel Agency in the compliance email with your affiliate partner
  • Replace Disney-specific trademarks and ship names with your own cruise line or niche

Where it goes

Keep it in your repository where the agent or team that needs it will read it.

Worth borrowing

  • Sailing Score Algorithm weighting price, urgency, and ship rating for deal ranking
  • Local seed data with 810 price snapshots enabling full offline development
  • Affiliate link wrapper /go/[provider]/[target] with click tracking for monetization

Related Documents