A modern and welcoming landing page built with React and TypeScript.
This is a responsive, multilingual website designed specifically for Block n' Roll beach volleyball club.
- 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
- 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
-
Clone the repository
git clone <repository-url> cd blocknroll
-
Install dependencies
npm install # or pnpm install -
Start the development server
npm run dev # or pnpm dev -
Open your browser Navigate to
http://localhost:3000
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
- 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
- Hero - Eye-catching introduction with key statistics
- About - Club story and team information
- Services - Training programs and pricing options
- Gallery - Community photos and activities
- Contact - Contact form and location information
- Footer - Additional information and social links
npm run dev- Start development servernpm run build- Build for productionnpm run preview- Preview production buildnpm run lint- Run ESLintnpm run test- Run testsnpm run test:coverage- Run tests with coverage
The project supports multiple languages through react-i18next. Translation files are located in src/i18n/locales/:
es.json- Spanish translationsen.json- English translationsca.json- Catalan translations
Styles are organized using CSS modules:
src/styles/global/- Global styles and design tokenssrc/styles/components/- Component-specific stylessrc/styles/utils/- Utility classes and responsive helpers
Update content by modifying the translation files. No code changes required for:
- Text content
- Pricing information
- Contact details
- Service descriptions
The gallery should automatically display Instagram posts when configured:
- ✅ 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
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.
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- Instagram app integration
- SEO optimization
- Blog functionality
- Payment integration (?)
- Member dashboard (?)
- Events calendar/management (?)
- Analytics integration (?)
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.