Back to .md Directory

GatGridCruises

**Magically Valuable Disney Cruises**

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

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.

Related Documents