A modern, responsive website for the JEC RoboWorld robotics club, built with React, TypeScript, and Tailwind CSS.
JEC RoboWorld is the robotics club at Jorhat Engineering College, dedicated to pioneering the future of robotics through innovation, education, and competitive excellence. Founded in 2011 by the Team of Talented Individuals (TTI), we continue to inspire and nurture the next generation of robotics enthusiasts.
- Modern Design: Clean, professional interface with a robotics-themed yellow, black, grey, and white color scheme
- Responsive Layout: Fully responsive design that works on all devices
- Interactive Components: Smooth animations and hover effects
- Multi-page Navigation: Comprehensive navigation with dedicated pages for different sections
- Alumni Management: Dedicated alumni section with contact information
- Event Showcase: Dynamic events display with detailed information and image galleries
- Team Profiles: Member profiles with rounded image frames
- Interactive Image Galleries:
- Card Swipe Animation: Skipper UI-powered shuffling cards for event and achievement images
- Pinterest-style Gallery Grid: Masonry layout for browsing multiple images
- Modal Image Viewer: Full-screen image viewing with navigation
- Timeline: Interactive timeline of club milestones
- Tutorials: Educational resources and tutorials
- Enhanced Media Support: Multiple image support for events and achievements with optimized loading
- Frontend Framework: React 18.3.1
- Build Tool: Vite 5.4.19
- Language: TypeScript 5.8.3
- Styling: Tailwind CSS 3.4.17
- UI Components: shadcn/ui with Radix UI primitives
- Routing: React Router DOM 6.30.1
- State Management: TanStack React Query 5.83.0
- Icons: Lucide React 0.462.0
- Form Handling: React Hook Form 7.61.1
- Animations: Tailwind CSS Animate
- Smooth Scrolling: Lenis 1.3.8
- Image Carousel: Swiper.js for card swipe animations
- Image Optimization: Custom optimized image component with lazy loading
src/
βββ assets/ # Static assets (images, documents)
β βββ alumni/ # Alumni photos
β βββ event/ # Event images
β βββ logo/ # Club logos
β βββ members/ # Member photos
β βββ projects/ # Project images
β βββ timeline/ # Timeline images
βββ components/ # Reusable React components
β βββ cards/ # Card components (AlumniCard, MemberCard, etc.)
β βββ demo/ # Demo components (CardSwipeDemo)
β βββ layout/ # Layout components (Header, Footer)
β βββ sections/ # Page sections (Hero, TeamsSection, etc.)
β βββ ui/ # shadcn/ui components + custom UI components
β β βββ CardSwipe.tsx # Skipper UI card swipe component
β β βββ ImageModal.tsx # Full-screen image modal
β β βββ ... # Other UI components
β βββ GalleryGrid.tsx # Pinterest-style gallery component
β βββ OptimizedImage.tsx # Optimized image component with lazy loading
βββ data/ # JSON data files
β βββ alumni.json # Alumni information
β βββ events.json # Events data
β βββ members.json # Team members data
β βββ teams.json # Teams information
β βββ ... # Other data files
βββ hooks/ # Custom React hooks
βββ lib/ # Utility functions
βββ pages/ # Page components
β βββ HomePage.tsx
β βββ AlumniPage.tsx
β βββ TeamPage.tsx
β βββ EventsPage.tsx
β βββ ...
βββ styles/ # Global styles and CSS
- Node.js (v18 or higher)
- npm or yarn package manager
-
Clone the repository
git clone https://github.com/JEC-RoboWorld/jecroboworld-website.git cd jecroboworld-website -
Install dependencies
npm install
-
Start the development server
npm run dev
-
Open your browser Navigate to
http://localhost:5173/to view the website
npm run dev- Start development server with hot reloadnpm run build- Build the project for productionnpm run build:dev- Build the project in development modenpm run preview- Preview the production build locallynpm run lint- Run ESLint for code quality checks
- Home (
/) - Landing page with hero section and overview - Events (
/events) - Ongoing and past events - Team (
/members) - Current and past team members - Achievements (
/achievements) - Club accomplishments and awards - Timeline (
/timeline) - Club history and milestones - Gallery (
/gallery) - Photo gallery of activities - Alumni (
/alumni) - Alumni directory with contact information - Tutorials (
/tutorials) - Educational resources - About (
/about) - About the club and its mission
The website uses a consistent design system with:
- Primary Color: Yellow (#FFFF00) - Robotics theme
- Secondary Colors: Black, Grey, White
- Typography: Clean, modern fonts
- Components: Rounded corners, subtle shadows, smooth transitions
- Responsive Breakpoints: Mobile-first approach
- Component:
CardSwipe.tsx - Technology: Swiper.js with card effect
- Features:
- Automatic shuffling/rotation of images
- Touch/swipe gestures on mobile
- Smooth card stack animation
- Configurable autoplay delay
- Responsive design for all screen sizes
- Component:
GalleryGrid.tsx - Features:
- Masonry-style layout for optimal space usage
- Click to view full-size images in modal
- Category filtering support
- Lazy loading for performance
- Responsive grid columns
- Image Count Badges: Shows number of available images
- Click Interaction: Cards with multiple images are clickable
- Modal Gallery: Opens card swipe gallery when clicked
- Optimized Loading: Priority loading for visible images
The website uses JSON files in the src/data/ directory for content management. This makes it easy to update content without modifying code.
{
"id": 99,
"eventName": "Your Event Name",
"image": "/assets/event/your-event-image.jpg",
"images": [
"/assets/event/gallery-image-1.jpg",
"/assets/event/gallery-image-2.jpg",
"/assets/event/gallery-image-3.jpg"
],
"description": "Event description here",
"joiningUrl": "https://forms.google.com/your-form",
"date": "2025-09-01",
"status": "upcoming" or "completed" or "ongoing"
}New Image Features:
image: Main cover image for the event cardimages: Array of additional images for the gallery (optional)- Cards with multiple images show an image count badge
- Clicking on cards with images opens an interactive gallery with card swipe animation
{
"id": 99,
"name": "Member Name",
"role": "Position/Role",
"photo": "assets/members/member-photo.jpg",
"status": "current" or "alumni"
}{
"id": 99,
"name": "Alumni Name",
"phone": "+91-9876543210",
"email": "[email protected]",
"image": "/assets/alumni/alumni-photo.jpg",
"batch": "2020-2024",
"currentPosition": "Current Job Position"
}{
"id": 99,
"year": "month and year",
"eventName": "Event Name",
"description": "Detailed description of the event",
"photo": "/assets/timeline/event-photo.jpg"
}{
"id": 99,
"eventName": "Competition Name",
"location": "Venue/Institution",
"position": "1st/2nd/3rd/Winner",
"year": "2025",
"description": "Achievement description",
"images": [
"/assets/achievements/achievement-image-1.jpg",
"/assets/achievements/achievement-image-2.jpg",
"/assets/achievements/achievement-image-3.jpg"
]
}New Image Features:
images: Array of images showcasing the achievement (optional)- Achievement cards display image count when multiple images are available
- Interactive gallery with card swipe animation for viewing all achievement photos
- Add images to the appropriate folders in
src/assets/ - Use consistent naming (lowercase, hyphens for spaces)
- Optimize images for web (compress before adding)
- Update paths in JSON files to match asset locations
- Add main cover image to
imagefield - Add gallery images to
imagesarray - Users can click the event card to open the interactive gallery
- Card swipe animation automatically cycles through images
- Add all achievement photos to
imagesarray - Achievement cards show image count badge
- Click to view all photos in card swipe gallery
- Lazy Loading: Images load as they come into view
- Priority Loading: First few images load immediately
- Responsive Images: Optimized for different screen sizes
- Preloading: Gallery images preload for smooth experience
- Contact Information: Update
src/data/footer.jsonandsrc/data/contact.json - Social Links: Modify
src/data/contact.jsonandsrc/data/footer.json - Logo: Replace files in
src/assets/logo/directory
- Colors: Modify
tailwind.config.jsfor theme colors - Fonts: Update font imports in CSS files
- Layout: Edit components in
src/components/layout/
The project can be deployed to any static hosting service:
-
Build the project
npm run build
-
Deploy the
distfolder to your hosting service:- Vercel (Recommended)
- Netlify
- GitHub Pages
- Firebase Hosting
We welcome contributions from club members, alumni, and the open-source community! Here's how you can help:
-
Content Updates
- Add new events, achievements, or timeline entries
- Update member information or alumni details
- Fix typos or improve descriptions
-
Bug Fixes
- Report and fix UI bugs
- Resolve responsive design issues
- Fix broken links or images
-
Feature Enhancements
- Add new sections or pages
- Improve existing components
- Add animations or interactive elements
-
Performance Improvements
- Optimize images and assets
- Improve loading speeds
- Code refactoring
-
Fork the repository
git clone https://github.com/your-username/jecroboworld-website.git
-
Create a feature branch
git checkout -b feature/your-feature-name # or git checkout -b fix/bug-description # or git checkout -b update/content-update
-
Make your changes
- Follow the existing code style
- Test your changes locally
- Update documentation if needed
-
Commit your changes
git add . git commit -m "feat: add new event for 2025" # or git commit -m "fix: resolve mobile navigation issue" # or git commit -m "update: add new alumni batch 2024"
-
Push and create a Pull Request
git push origin feature/your-feature-name
- Code Style: Follow existing TypeScript and React patterns
- Commit Messages: Use conventional commits (feat:, fix:, update:, docs:)
- Testing: Test your changes on different screen sizes
- Documentation: Update README.md if adding new features
- Assets: Optimize images before adding them
For club members who want to quickly update content:
- Navigate to the data file you want to update
- Edit the JSON following the existing format
- Add any required images to the assets folder
- Create a pull request with your changes
{
"eventName": "Your Event",
"image": "main-cover-image.jpg",
"images": ["gallery-1.jpg", "gallery-2.jpg", "gallery-3.jpg"],
// ... other fields
}{
"eventName": "Competition Name",
"images": ["trophy-photo.jpg", "team-photo.jpg", "event-photo.jpg"],
// ... other fields
}- Card Swipe: Automatic shuffling with smooth animations
- Touch Gestures: Swipe on mobile devices
- Click Navigation: Click cards to navigate
- Full Screen: Modal view for detailed image viewing
- Responsive: Works on all device sizes
- Email: [email protected]
- Address: Jorhat Engineering College, Assam
- Facebook: @jecroboworld
- Instagram: @roboworld_jec
- LinkedIn: JEC RoboWorld
- Developer: Rakib Hussain
For website-related issues, feature requests, or technical questions, please:
- Check existing issues on GitHub
- Create a new issue with detailed description
This project is licensed under the MIT License - see the LICENSE file for details.
Special thanks to:
- JEC RoboWorld Alumni for their continuous support
- Current Club Members for content and feedback
- Faculty Advisors for their guidance
- Open Source Community for the amazing tools and libraries
Built with β€οΈ by Rakib Hussain for JEC RoboWorld