Skip to content

ankurhalder/lakecomo

Repository files navigation

Spies of Style 🎬

A modern, production-ready cinematic event experience website built with Next.js 16, React 19, TypeScript, and Sanity CMS. Features smooth animations, a unified landing page, and a custom Sanity Migration Engine for seamless content syncing across environments.

✨ Features

  • πŸŽ₯ Cinematic Landing Page - Unified landing page with hero videos, mission story, experiences, and upcoming events.
  • πŸ•΅οΈ Mission Experience - An immersive espionage experience module (/mission-experience) detailing the real WWII spy story on Lake Como.
  • πŸ“… Events System - Dynamic recurring and single ticketed event management directly from the CMS.
  • πŸ’Œ Contact & Inquire Form - Interactive, scroll-to contact form with Nodemailer email integration.
  • 🎨 Smooth Animations - Powered by Framer Motion, Lenis scroll, and custom canvas-based falling stars.
  • πŸ“± Fully Responsive & Accessible - Mobile-first design with focus trap and keyboard navigation support.
  • 🎨 Headless CMS - Sanity Studio integrated locally at /admin for easy content management.
  • βš™οΈ Sanity Migration Engine v3 - Custom build tools for schema introspection, data diffing, and environment syncing.

πŸ› οΈ Tech Stack

Core

  • Next.js 16.1.6 - React framework with App Router
  • React 19.2.3 - Latest React with Server Components
  • TypeScript 5 - Type-safe development
  • Tailwind CSS 4 - Utility-first styling with @tailwindcss/postcss

CMS & Content

  • Sanity 4.22.0 - Headless CMS
  • next-sanity 11.6.12 - Sanity integration for Next.js
  • @sanity/image-url - Optimized image handling

Animations & UX

  • Framer Motion 12.23.26 - Advanced animations and scroll parallax
  • Lenis 1.3.17 - Smooth scroll experience
  • focus-trap-react - Accessibility focus management
  • Lucide React - Beautiful icon system

Utilities & Developer Tools

  • Nodemailer 7.0.12 - Email functionality
  • React Compiler - Automatic optimizations (babel-plugin-react-compiler)
  • tsx - Execution of custom Sanity migration scripts

πŸ“ Project Structure

spies-of-style/
β”œβ”€β”€ src/
β”‚   β”œβ”€β”€ app/
β”‚   β”‚   β”œβ”€β”€ (main)/              # Main landing page routes & sections
β”‚   β”‚   β”‚   β”œβ”€β”€ sections/        # Modular sections (Hero, Story, Assignment, etc.)
β”‚   β”‚   β”‚   └── page.tsx         # Consolidated Homepage
β”‚   β”‚   β”œβ”€β”€ admin/               # Sanity Studio route
β”‚   β”‚   β”œβ”€β”€ api/                 # API routes (revalidate, send-email)
β”‚   β”‚   β”œβ”€β”€ mission-experience/  # Standalone Mission Experience page
β”‚   β”‚   β”œβ”€β”€ globals.css          # Global styles & Tailwind
β”‚   β”‚   β”œβ”€β”€ layout.tsx           # Root layout
β”‚   β”‚   β”œβ”€β”€ not-found.tsx        # Custom 404 page
β”‚   β”‚   └── sitemap.ts           # SEO sitemap
β”‚   β”œβ”€β”€ components/              # Reusable components (Layout, Providers, Shared)
β”‚   β”œβ”€β”€ sanity/                  # Sanity configuration
β”‚   β”‚   β”œβ”€β”€ lib/                 # Sanity client & GROQ data fetching queries
β”‚   β”‚   β”œβ”€β”€ schemaTypes/         # Content schemas (landingPage, event, navbar, etc.)
β”‚   β”‚   └── structure.ts         # Studio structure config
β”‚   └── proxy.ts                 # Next.js middleware / proxy redirects
β”œβ”€β”€ scripts/
β”‚   └── sanity/                  # Custom Sanity Migration Engine v3 scripts
β”œβ”€β”€ sanity-mirror/               # Local JSON mirror of the Sanity dataset for migrations
β”œβ”€β”€ public/                      # Static assets
β”œβ”€β”€ sanity.config.ts             # Sanity Studio config
β”œβ”€β”€ next.config.ts               # Next.js configuration
β”œβ”€β”€ postcss.config.mjs           # PostCSS configuration
└── tsconfig.json                # TypeScript configuration

πŸš€ Getting Started

Prerequisites

  • Node.js 20.x or higher
  • npm package manager
  • Sanity account (for CMS)

Installation

  1. Clone the repository

    git clone https://github.com/ankurhalder/lakecomo.git
    cd lakecomo
  2. Install dependencies

    npm install
  3. Set up environment variables

    Create a .env.local file in the root directory:

    # Sanity Configuration
    NEXT_PUBLIC_SANITY_PROJECT_ID=your_project_id
    NEXT_PUBLIC_SANITY_DATASET=production
    NEXT_PUBLIC_SANITY_API_VERSION=2025-12-27
    
    # Required for Sanity CMS seeding / restore operations
    SANITY_WRITE_TOKEN_WITH_EDITOR_ACCESS=sk...
    SANITY_MIGRATE_CONFIRM=yes
    
    # Email Configuration (for contact form)
    EMAIL_HOST=smtp.gmail.com
    EMAIL_PORT=587
    EMAIL_USER=your_email@gmail.com
    EMAIL_PASSWORD=your_app_password
    EMAIL_TO=recipient@example.com
    
    # Site URL
    NEXT_PUBLIC_SITE_URL=http://localhost:3000
  4. Run the development server

    npm run dev
  5. Open your browser

    Navigate to http://localhost:3000

Sanity Studio Setup

  1. Access Sanity Studio

    Navigate to http://localhost:3000/admin

  2. Login with your Sanity account

  3. Manage content - Landing Page, Mission Experience, Events, Navbar, and Footer.

πŸ“ Available Scripts

# Development & Build
npm run dev          # Start development server
npm run build        # Build for production
npm run start        # Start production server
npm run lint         # Run ESLint

# Sanity Migration Engine v3
npm run sanity:export      # Export live CMS β†’ sanity-mirror/documents/
npm run sanity:diff        # Compare live vs mirror β†’ diff-report.json
npm run sanity:plan        # Generate migration-plan.json from diff
npm run sanity:seed        # Upsert mirror docs into live Sanity
npm run sanity:migrate     # Full pipeline: snapshot β†’ diff β†’ plan β†’ seed

Note: For a complete list of Sanity migration scripts and detailed workflow, see SANITY_MIGRATION.md.

🎨 Customization

Styling

  • Global styles & Theme Colors: Edit src/app/globals.css
  • Tailwind: Configure via postcss.config.mjs and CSS variables

Content Schemas

Add or modify content types in src/sanity/schemaTypes/. The schemas are defined using Sanity's defineType and defineField. Ensure you update GROQ queries in src/sanity/lib/ to reflect schema changes.

πŸ”§ Configuration

Next.js Configuration

The next.config.ts includes:

  • React Compiler enabled (reactCompiler: true)
  • Image optimization with cdn.sanity.io remote patterns
  • Permanent redirects for deprecated legacy routes (/themes, /cast, /gallery, etc.) pointing back to the unified homepage.

πŸ“¦ Deployment

Vercel (Recommended)

  1. Push your code to GitHub
  2. Import project to Vercel
  3. Add environment variables
  4. Deploy

πŸ“„ License

This project is private and proprietary. All rights reserved.

πŸ‘€ Author

Ankur Halder

πŸ™ Acknowledgments

  • Next.js team for the amazing framework
  • Sanity.io for the powerful CMS
  • Framer Motion for smooth animations
  • Tailwind CSS for the utility-first approach

Built with ❀️ using Next.js 16 and Sanity CMS

About

A modern movie website built with Next.js 16, React 19, and Sanity CMS featuring smooth animations and responsive design

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors