A modern, responsive barbershop website built with React, Vite, and Tailwind CSS
Ctrl + Trim is a modern, fully responsive barbershop website that showcases services, customer testimonials, and provides an elegant user experience. Built with cutting-edge web technologies, it features smooth animations, interactive components, and a professional design.
- 🎨 Modern UI/UX - Clean, professional design with smooth animations
- 📱 Fully Responsive - Optimized for all device sizes
- 🎬 Interactive Video Section - Engaging scroll-triggered video playback
- 🎠 Service Carousel - Interactive showcase of barbershop services
- 💬 Customer Reviews - Dynamic customer testimonials section
- 🏙️ Multi-City Presence - Location-based service areas
- 📝 Blog Section - Expandable cards with grooming tips and updates
- ⚡ Performance Optimized - Fast loading with Vite build system
- 🎭 Smooth Animations - Powered by Framer Motion and GSAP
- React 19.1.0 - Component-based UI library
- Vite 7.0.4 - Next-generation frontend build tool
- Tailwind CSS 4.1.11 - Utility-first CSS framework
- Framer Motion 12.23.6 - Production-ready motion library
- GSAP 3.13.0 - Professional animation library
- React Type Animation 3.2.0 - Typewriter effect animations
- Tabler Icons React 3.34.0 - Beautiful SVG icons
- React Icons 5.5.0 - Popular icon libraries
- Lucide React 0.525.0 - Simple and consistent icons
- clsx 2.1.1 - Conditional className utility
- tailwind-merge 3.3.1 - Merge Tailwind classes
- Manrope - Modern, geometric sans-serif
- Staatliches - Bold, condensed display font
Ensure you have the following installed:
- Node.js (v16.0.0 or higher)
- npm (v8.0.0 or higher) or yarn
-
Clone the repository
git clone https://github.com/puneetkr-06/Ctrl-Trim.git cd Ctrl-Trim -
Install dependencies
npm install # or yarn install -
Start the development server
npm run dev # or yarn dev -
Open your browser Navigate to
http://localhost:5173to view the application
npm run build
# or
yarn buildThe build artifacts will be stored in the dist/ directory.
npm run preview
# or
yarn previewCtrl-Trim/
├── public/ # Static assets
│ └── vite.svg # App icon
├── src/
│ ├── assets/ # Images and media files
│ │ ├── beard_shave.jpg
│ │ ├── facial.png
│ │ ├── hair_styling.jpg
│ │ ├── massage.png
│ │ ├── face_shoot.mp4
│ │ ├── blog_*.webp
│ │ ├── customer*.jpg
│ │ └── personal_photo.jpeg
│ ├── components/ # React components
│ │ ├── ui/ # Reusable UI components
│ │ │ └── CarouselUi.jsx
│ │ ├── Navbar.jsx # Navigation component
│ │ ├── ScrollVideo.jsx # Video scroll section
│ │ ├── Services.jsx # Services carousel
│ │ ├── Blogs.jsx # Blog cards section
│ │ ├── Customer.jsx # Customer reviews
│ │ ├── Cities.jsx # Multi-city section
│ │ ├── Profile.jsx # Owner profile
│ │ ├── Footer.jsx # Footer component
│ │ ├── Marquee.jsx # Scrolling text
│ │ └── RotatingText.jsx # Animated text
│ ├── hooks/ # Custom React hooks
│ │ └── use-outside-click.jsx
│ ├── App.jsx # Main app component
│ ├── main.jsx # Entry point
│ └── index.css # Global styles
├── tailwind.config.js # Tailwind configuration
├── vite.config.js # Vite configuration
├── package.json # Dependencies and scripts
└── README.md # Project documentation
| Component | Description | Features |
|---|---|---|
| Navbar | Navigation header | Responsive menu, smooth scrolling |
| ScrollVideo | Hero video section | Scroll-triggered playback, overlay text |
| Services | Service showcase | Interactive carousel, hover effects |
| Blogs | Content section | Expandable cards, responsive grid |
| Customer | Reviews section | Customer testimonials, rating display |
| Cities | Location section | Multi-city presence showcase |
| Profile | Owner section | Personal branding, contact info |
| Footer | Site footer | Links, social media, contact details |
| Component | Description | Purpose |
|---|---|---|
| CarouselUi | Interactive carousel | Service display with 3D effects |
| Marquee | Scrolling text | Promotional messages |
| RotatingText | Animated text | Dynamic content display |
| Hook | Description | Usage |
|---|---|---|
| useOutsideClick | Detect clicks outside element | Modal/dropdown closing |
- 3D Transform Effects - Hover interactions with perspective transforms
- Smooth Transitions - CSS transitions with custom easing
- Responsive Design - Adapts to all screen sizes
- Touch Support - Mobile-friendly interactions
- GSAP Integration - Smooth scroll animations
- Performance Optimized - Efficient video loading
- Overlay Content - Text animations over video
- Expandable Cards - Click to expand for full content
- Image Optimization - WebP format for faster loading
- Responsive Grid - Adaptive layout for all devices
- Dynamic Content - Easy to update customer reviews
- Rating System - Visual star ratings
- Profile Images - Customer photos for authenticity
The project uses Tailwind CSS v4 with custom configurations:
// tailwind.config.js
export default {
content: ["./index.html", "./src/**/*.{js,ts,jsx,tsx}"],
theme: {
extend: {
fontFamily: {
manrope: ['Manrope', 'sans-serif'],
staat: ['Staatliches', 'cursive'],
},
animation: {
marquee: "marquee 15s linear infinite",
},
keyframes: {
marquee: {
"0%": { transform: "translateX(0%)" },
"100%": { transform: "translateX(-50%)" }
},
},
},
},
plugins: [],
}// vite.config.js
export default defineConfig({
plugins: [react(), tailwindcss()],
base: './' // For proper deployment paths
})-
Build the project
npm run build
-
Deploy to Netlify
- Connect your GitHub repository to Netlify
- Set build command:
npm run build - Set publish directory:
dist - Deploy!
No environment variables are required for basic functionality.
The website is fully responsive with breakpoints:
- Mobile:
< 640px - Tablet:
640px - 1024px - Desktop:
> 1024px
Key responsive features:
- Adaptive navigation menu
- Flexible grid layouts
- Optimized typography scaling
- Touch-friendly interactions
- Primary Background:
#171717(neutral-900) - Secondary:
#B4B4B4(gray-400) - Accent:
#FFFFFF(white) - Text: Various neutral shades
- Headings: Staatliches (bold, condensed)
- Body Text: Manrope (clean, readable)
- UI Elements: System fonts
- Entrance: Fade in with scale
- Hover: Smooth transforms
- Scroll: Progressive disclosure
- Loading: Skeleton screens
- WebP Format - Modern image format for smaller file sizes
- Lazy Loading - Images load only when needed
- Responsive Images - Different sizes for different devices
- Dynamic Imports - Components loaded on demand
- Tree Shaking - Unused code elimination
- Bundle Optimization - Vite's built-in optimizations
- Font Preloading - Google Fonts optimized loading
- Asset Optimization - Compressed images and videos
- Minimal Bundle Size - Optimized dependencies
If experiencing horizontal scrolling issues:
/* Add to src/index.css */
html, body {
overflow-x: hidden;
}
* {
max-width: 100%;
box-sizing: border-box;
}Ensure proper font preloading in index.html:
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>Contributions are welcome! Please follow these steps:
- Fork the repository
- Create a feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
- Follow ESLint configuration
- Use Prettier for code formatting
- Write meaningful commit messages
- Test responsiveness on multiple devices
- Optimize images before adding
This project is licensed under the MIT License. See LICENSE file for details.
Puneet Kumar
- GitHub: @puneetkr-06
- LinkedIn: [Your LinkedIn Profile]
- Email: [Your Email]
- React Team - For the amazing framework
- Tailwind CSS - For the utility-first approach
- Framer Motion - For smooth animations
- Vite Team - For the lightning-fast build tool
- Google Fonts - For beautiful typography
- Tabler Icons - For clean, consistent icons
- Total Components: 12+
- Dependencies: 20+
- Bundle Size: ~400KB (gzipped)
- Performance Score: 90+ (Lighthouse)
- Accessibility: WCAG compliant
⭐ Star this repository if you found it helpful!
Made with ❤️ by Puneet Kumar