emirates-sport-club Svelte Themes

Emirates Sport Club

Premium video-centric football club website built with SvelteKit, TypeScript, and Tailwind CSS. Features GSAP animations, smooth scrolling, and a modern responsive design.

Emirates Sport Club

Premium, video-centric football club website built with SvelteKit, TypeScript, and Tailwind CSS.

šŸ“‹ Table of Contents

šŸŽÆ About

Emirates Sport Club is a premium football club website built with modern web technologies. It stands out with its video-centric design, smooth animations, and user-friendly interface.

The website consists of the following main sections:

  • Home: Impressive first impression with video hero sections
  • Squad: Player list, profiles, and statistics
  • Academy: Youth development program and application form
  • News: Club news, match reports, and transfer news
  • Store: Official club products and collections

✨ Features

  • šŸŽ¬ Impressive user experience with video-centric hero sections
  • šŸ“± Fully responsive design (mobile, tablet, desktop)
  • šŸŽØ Advanced scroll animations with GSAP ScrollTrigger
  • 🌊 Smooth scrolling with Lenis
  • ⚔ Fast page transitions with SvelteKit
  • šŸŽÆ Type safety with TypeScript
  • šŸŽ­ Customizable cursor effects
  • šŸ”„ Page transition animations
  • šŸ“Š Dynamic content management

šŸ›  Tech Stack

Frameworks and Languages

Styling and Design

Animation and Interaction

  • GSAP (v3.14.2) - Advanced animation library
  • Lenis (v1.3.16) - Smooth scrolling
  • Lucide Svelte (v0.562.0) - Icon library

Development Tools

  • Vite (v7.2.6) - Build tool and development server
  • Svelte Check (v4.3.4) - TypeScript checking

šŸ“¦ Requirements

  • Node.js 18.0 or higher
  • npm 9.0 or higher (or yarn, pnpm)

šŸš€ Installation

  1. Clone the repository:

    git clone <repository-url>
    cd emirates-sport-club
    
  2. Install dependencies:

    npm install
    
  3. Start the development server:

    npm run dev
    

Open http://localhost:5173 in your browser.

šŸ’» Development

Available Commands

# Start development server
npm run dev

# Build for production
npm run build

# Preview production build
npm run preview

# Run TypeScript check
npm run check

# Run TypeScript check in watch mode
npm run check:watch

Development Server

The development server runs on http://localhost:5173 by default. You can modify the port settings in the vite.config.ts file.

Build and Deployment

To create a production build:

npm run build

The build output will be saved to the build/ folder. To test the build locally:

npm run preview

šŸ“ Project Structure

emirates-sport-club/
ā”œā”€ā”€ src/
│   ā”œā”€ā”€ lib/
│   │   ā”œā”€ā”€ components/          # Reusable Svelte components
│   │   │   ā”œā”€ā”€ AcademyForm.svelte
│   │   │   ā”œā”€ā”€ CustomCursor.svelte
│   │   │   ā”œā”€ā”€ Footer.svelte
│   │   │   ā”œā”€ā”€ Header.svelte
│   │   │   ā”œā”€ā”€ Navbar.svelte
│   │   │   ā”œā”€ā”€ PageTransition.svelte
│   │   │   ā”œā”€ā”€ Preloader.svelte
│   │   │   └── VideoCard.svelte
│   │   ā”œā”€ā”€ stores/              # Svelte stores
│   │   │   └── preloader.ts
│   │   ā”œā”€ā”€ types/               # TypeScript type definitions
│   │   │   └── index.ts
│   │   ā”œā”€ā”€ utils/               # Utility functions
│   │   │   ā”œā”€ā”€ gsap.ts          # GSAP configuration
│   │   │   ā”œā”€ā”€ lenis.ts         # Lenis configuration
│   │   │   └── index.ts
│   │   └── assets/              # Static assets
│   │       └── favicon.svg
│   ā”œā”€ā”€ routes/                  # SvelteKit routes
│   │   ā”œā”€ā”€ +layout.svelte       # Main layout
│   │   ā”œā”€ā”€ +page.svelte         # Home page
│   │   ā”œā”€ā”€ academy/             # Academy page
│   │   ā”œā”€ā”€ news/                # News page
│   │   │   └── [slug]/          # Dynamic news detail page
│   │   ā”œā”€ā”€ squad/               # Squad page
│   │   │   └── [id]/            # Dynamic player detail page
│   │   └── store/               # Store page
│   └── app.css                  # Global CSS
ā”œā”€ā”€ static/                      # Static files
│   ā”œā”€ā”€ *.mp4                    # Video files
│   ā”œā”€ā”€ favicon.svg
│   ā”œā”€ā”€ manifest.json
│   └── robots.txt
ā”œā”€ā”€ package.json
ā”œā”€ā”€ svelte.config.js             # SvelteKit configuration
ā”œā”€ā”€ vite.config.ts               # Vite configuration
ā”œā”€ā”€ tailwind.config.js           # Tailwind CSS configuration
└── tsconfig.json                # TypeScript configuration

šŸŽØ Design System

Color Palette

  • Primary (Emirates Gold): #D4AF37 - Main brand color
  • Secondary (Midnight Black): #0A0A0A - Background and accent
  • Accent (Pure White): #FFFFFF - Text and contrast

Typography

  • Headlines: Oswald (Google Fonts)

    • Uppercase, bold
    • Usage: Hero headlines, section titles
  • Body Text: Inter (Google Fonts)

    • Clean, geometric sans-serif
    • Usage: Paragraphs, descriptions

Spacing and Layout

The project uses Tailwind CSS's utility-first approach. The standard spacing scale (4px, 8px, 16px, 24px, etc.) is used.

šŸ”‘ Key Features

Video Hero Sections

Full-screen video backgrounds are used for each section on the home page. Stacked pinning effect is applied with GSAP ScrollTrigger.

Smooth Scrolling

Smooth scrolling is provided across the entire site using the Lenis library.

Responsive Design

  • Desktop (769px+): Full-featured animations and stacked pinning
  • Mobile (≤768px): Optimized scroll and lighter animations

Page Transitions

Custom animations are used for page transitions. Managed with the PageTransition.svelte component.

Custom Cursor

Custom cursor effect is enabled in desktop view (CustomCursor.svelte).

šŸ›  Utilities

GSAP

To import GSAP and ScrollTrigger:

import { gsap, ScrollTrigger } from '$lib/utils/gsap';

Lenis

To initialize smooth scrolling:

import { initLenis, getLenis } from '$lib/utils/lenis';

// Initialize
initLenis();

// Get instance
const lenis = getLenis();

Icons

To use Lucide Svelte icons:

<script>
  import { Menu, X, Instagram } from 'lucide-svelte';
</script>

<Menu class="w-6 h-6" />

Svelte Stores

To check preloader state:

import { isPreloaderLoaded } from '$lib/stores/preloader';

const unsubscribe = isPreloaderLoaded.subscribe((loaded) => {
  if (loaded) {
    // Preloader completed
  }
});

šŸ“ Notes

  • Video files are stored in the static/ folder and may be large in size
  • Video files should be optimized in production builds
  • Videos are played muted on mobile devices due to autoplay policies

šŸ¤ Contributing

We welcome contributions! Please see our Contributing Guide for details.

  1. Fork the repository
  2. Create your feature branch (git checkout -b feature/AmazingFeature)
  3. Commit your changes (git commit -m 'Add some AmazingFeature')
  4. Push to the branch (git push origin feature/AmazingFeature)
  5. Open a Pull Request

šŸ“„ License

This project is licensed under the MIT License - see the LICENSE file for details.

šŸ‘„ Contact

For questions or suggestions, please open an issue or contact us.


Emirates Sport Club Ā© 2025 - Beyond The Game

Top categories

Loading Svelte Themes