Skip to content

AlejandroLuisHC/blocknroll

Repository files navigation

Block n' Roll - Beach Volleyball Club Website

A modern and welcoming landing page built with React and TypeScript.

🏐 About This Project

This is a responsive, multilingual website designed specifically for Block n' Roll beach volleyball club.

Key Features

  • Modern Design: Clean, responsive layout optimized for all devices
  • Multilingual Support: Built-in internationalization (Spanish/English/Catalan)
  • Service Showcase: Flexible sections for training programs and pricing
  • Dynamic Gallery: Future Instagram integration with smart fallback to sample images
  • Contact Section: User-friendly contact and inquiry section with email sending service
  • Performance Optimized: Fast loading with modern build tools

πŸš€ Technologies Used

  • React 19 - Modern React framework
  • TypeScript - Static type checking
  • Vite - Fast build tool and development server
  • Bootstrap - CSS framework for responsive design
  • react-i18next - Internationalization library
  • Vitest - Testing framework
  • Vercel - Serverless functions and deployment
  • Nodemailer - Email sending library
  • Maileroo - SMTP provider
  • React Email - Email templates

πŸ“¦ Installation

  1. Clone the repository

    git clone <repository-url>
    cd blocknroll
  2. Install dependencies

    npm install
    # or
    pnpm install
  3. Start the development server

    npm run dev
    # or
    pnpm dev
  4. Open your browser Navigate to http://localhost:3000

πŸ—οΈ Main Project Structure

src/
β”œβ”€β”€ components/          # React components
β”‚   β”œβ”€β”€ Navbar.tsx      # Navigation bar
β”‚   β”œβ”€β”€ Hero.tsx        # Hero section with stats
β”‚   β”œβ”€β”€ About.tsx       # About section
β”‚   β”œβ”€β”€ Services.tsx    # Training programs and pricing
β”‚   β”œβ”€β”€ Gallery.tsx     # Dynamic photo gallery
β”‚   β”œβ”€β”€ Contact.tsx     # Contact form
β”‚   β”œβ”€β”€ Footer.tsx      # Footer component
β”‚   └── ui/             # Reusable UI components
β”œβ”€β”€ i18n/               # Internationalization
β”‚   └── locales/        # Translation files (ES/EN/CA)
β”œβ”€β”€ styles/             # CSS modules and styling
β”œβ”€β”€ hooks/              # Custom React hooks
β”œβ”€β”€ types/              # TypeScript type definitions
β”œβ”€β”€ utils/              # Utility functions
β”œβ”€β”€ layouts/            # Page layouts
β”œβ”€β”€ pages/              # Page components
└── routes/             # Application routing

🎨 Design System

Design Principles

  • Community First: Focus on building relationships over sales
  • Accessibility: Designed for all skill levels and backgrounds
  • Transparency: Clear information and straightforward communication
  • Mobile-First: Responsive design optimized for all devices

πŸ“± Website Sections

  1. Hero - Eye-catching introduction with key statistics
  2. About - Club story and team information
  3. Services - Training programs and pricing options
  4. Gallery - Community photos and activities
  5. Contact - Contact form and location information
  6. Footer - Additional information and social links

πŸ”§ Available Scripts

  • npm run dev - Start development server
  • npm run build - Build for production
  • npm run preview - Preview production build
  • npm run lint - Run ESLint
  • npm run test - Run tests
  • npm run test:coverage - Run tests with coverage

🌐 Customization

Content Localization

The project supports multiple languages through react-i18next. Translation files are located in src/i18n/locales/:

  • es.json - Spanish translations
  • en.json - English translations
  • ca.json - Catalan translations

Styling

Styles are organized using CSS modules:

  • src/styles/global/ - Global styles and design tokens
  • src/styles/components/ - Component-specific styles
  • src/styles/utils/ - Utility classes and responsive helpers

Content Management

Update content by modifying the translation files. No code changes required for:

  • Text content
  • Pricing information
  • Contact details
  • Service descriptions

πŸ“· Instagram Integration (to-do)

The gallery should automatically display Instagram posts when configured:

Features:

  • βœ… Automatic post loading
  • βœ… Smart fallback to sample images
  • βœ… Media type support (images/videos)
  • βœ… Error handling and loading states
  • βœ… Manual refresh capability
  • βœ… Redirect to post/account

πŸ“§ Email Sending

Emails are sent from a Serverless Function (api/send-email.js) using Nodemailer over SMTP.

Note: Works with any SMTP provider (e.g., Maileroo, Gmail, etc.) by setting the variables accordingly.

πŸ§ͺ Testing

The project includes comprehensive testing:

  • Unit Tests: Component and utility function tests
  • Coverage Reports: Detailed test coverage analysis

Run tests with:

npm run test
npm run test:coverage

🎯 To-Do List

  • Instagram app integration
  • SEO optimization
  • Blog functionality
  • Payment integration (?)
  • Member dashboard (?)
  • Events calendar/management (?)
  • Analytics integration (?)

πŸ“„ License

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


Built with love ❀️ for the Block n' Roll club and the beach volleyball community.

About

This is a responsive, multilingual website designed specifically for Block n' Roll beach volleyball club (Barcelona).

Topics

Resources

License

Stars

2 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors