Skip to content

A dynamic Next.js website for the 6-piece funk/pop band Clark's Bowling Club, featuring bilingual content, interactive 3D elements, and content management via Google Sheets.

Notifications You must be signed in to change notification settings

TandemCreativeDev/cbc

Repository files navigation

Clark's Bowling Club Website

Next.js TypeScript Tailwind CSS Three.js

A dynamic Next.js website for the 6-piece funk/pop band Clark's Bowling Club, featuring bilingual content, interactive 3D elements, and content management via Google Sheets.

Table of Contents

Features

✨ Bilingual Support: English/French with automatic location detection
🎡 Music Integration: Embedded Spotify, YouTube, and Bandcamp players
🎯 3D Interactive Elements: Three.js powered spinning logo with holographic effects
πŸ“± Responsive Design: Mobile-first approach with Tailwind CSS
πŸ“§ Contact Forms: Email integration with bilingual templates
πŸ—“οΈ Tour Management: Dynamic tour dates with past/future filtering
🎀 Lyrics Display: Searchable lyrics organised by album
πŸ” SEO Optimised: Automatic sitemap generation, robots.txt, and LLMs.txt
β™Ώ Accessibility: ARIA labels, keyboard navigation, reduced motion support
πŸ“Š Dynamic Content: Pages populated from Google Sheets CMS

Tech Stack

  • Framework: Next.js 15 with TypeScript
  • Styling: Tailwind CSS with custom fonts
  • 3D Graphics: Three.js for interactive elements
  • Email: Nodemailer for contact forms
  • Data: Google Sheets as CMS via CSV exports
  • Icons: React Icons (Font Awesome 6)
  • State: React Context for language switching
  • Deployment: Optimised for Vercel

Getting Started

Prerequisites

  • Node.js 18.0 or higher
  • npm or yarn package manager

Installation

  1. Clone the repository:
  • with https:
git clone https://github.com/TandemCreativeDev/cbc.git
cd cbc
  • with ssh (recommended):
git clone git@github.com:TandemCreativeDev/cbc.git
cd cbc
  1. Install dependencies:
npm install
  1. Set up environment variables (see Environment Setup)

  2. Run the development server:

npm run dev

Open http://localhost:3000 to view the site.

Project Structure

src/
β”œβ”€β”€ app/                    # Next.js app router pages
β”‚   β”œβ”€β”€ api/send-emails/    # Email sending endpoint
β”‚   β”œβ”€β”€ [page]/             # Dynamic page routes
β”‚   └── _components/        # Page-specific components
β”œβ”€β”€ components/             # Shared components
β”‚   β”œβ”€β”€ layout/             # Header, footer, navigation
β”‚   └── ui/                 # Reusable UI components
β”œβ”€β”€ context/                # React contexts
β”œβ”€β”€ utils/                  # Utility functions
β”œβ”€β”€ data/                   # Static data files
└── fonts/                  # Custom web fonts

Environment Setup

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

# Google Sheets Configuration
NEXT_PUBLIC_CSV_URL=https://docs.google.com/spreadsheets/d/[SHEET_ID]/export?format=csv

# Site Configuration
NEXT_PUBLIC_SITE_URL=https://clarksbowlingclub.com

# Email Configuration (SMTP)
EMAIL_HOST=smtp.host.com
EMAIL_PORT=587
EMAIL_SECURE=false
EMAIL_USER=your@email.com
EMAIL_PASSWORD=your_app_password

Content Management

Content is managed via Google Sheets with specific tab GIDs:

  • About Page: GID 0 (title, content)
  • Music: GID 1713768433 (embedded media, categories)
  • Lyrics: GID 145198726 (songs, albums, lyrics)
  • Tour Page: GID 127405583 (page content)
  • Tour Dates: GID 572869052 (events, venues, tickets)

Sheet Format

Pages use this structure:

key,english,french
title,About,Bio
content,"Band description...","Description du groupe..."

Key Components

Language Context

Automatic language detection based on user location, with manual toggle support.

Navigation Animation

Custom bowling ball indicator that animates between active nav items with CSS animations.

3D Logo

Three.js powered spinning logo with holographic effects and mouse tracking.

Contact Forms

Bilingual email templates with validation and toast notifications.

Development

Available Scripts

# Start development server with Turbopack
npm run dev

# Build for production
npm run build

# Start production server
npm start

# Run linting
npm run lint

Development Features

  • Hot Reload: Instant updates during development
  • TypeScript: Full type safety and IntelliSense
  • Turbopack: Fast bundling with Next.js 15
  • ESLint: Code quality enforcement
  • Tailwind CSS: Utility-first styling with JIT compilation

Browser Support

Modern browsers with ES6+ support. Graceful degradation for:

  • Reduced motion preferences
  • JavaScript disabled scenarios
  • Legacy browser compatibility

Key production features

  • Automatic sitemap generation including dynamic content
  • SEO-friendly meta tags and structured data
  • Performance optimisations with Next.js Image component
  • Accessibility compliance with ARIA labels and keyboard navigation

Documentation

Official Documentation

Tutorials & Guides

Development Guidelines

  • Follow TypeScript best practices
  • Use Tailwind's utility classes (no custom CSS when possible)
  • Ensure accessibility compliance
  • Test on multiple devices and browsers
  • Maintain bilingual support for new features

Author

TandemCreativeDev - hello@runintandem.com

Clark's Bowling Club - A 6-piece funk/pop band based in Lyon, France.
🌐 Website | πŸ“§ Contact | 🎡 Spotify

About

A dynamic Next.js website for the 6-piece funk/pop band Clark's Bowling Club, featuring bilingual content, interactive 3D elements, and content management via Google Sheets.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •