Overview
Manchao Catrers is a React-based catering service website built with TypeScript, featuring a menu management system, responsive design, and bilingual support (English/Hindi).
Tech Stack
- Framework: React 18 with TypeScript
- Build Tool: Vite
- Styling: Tailwind CSS
- Routing: React Router DOM
- Icons: Lucide React
- Search: Fuse.js (fuzzy search)
- UI Components: Custom components with shadcn/ui patterns
Project Structure
src/
├── components/ # React components
│ ├── hooks/ # Custom React hooks
│ ├── menu/ # Menu-related components
│ │ └── print/ # Print-specific menu components
│ └── ui/ # Reusable UI components
├── lib/ # Utility functions
├── types/ # TypeScript type definitions
├── App.tsx # Main application component
└── main.tsx # Application entry point
Core Features
1. Menu Management System
- Hierarchical Categories: Main categories with subcategories
- Bilingual Support: English and Hindi text for all menu items
- Search & Filter: Fuzzy search across multiple fields
- Pagination: Wrap-around pagination with touch/swipe support
- Popular Items: Special highlighting for featured menu items
2. Navigation System
- Auto-hiding Navbar: Hides on scroll, shows on hover at top
- Smooth Scrolling: Animated scrolling to page sections
- Mobile Responsive: Hamburger menu for mobile devices
- Keyboard Navigation: Arrow key support for pagination
3. Performance Optimizations
- Lazy Loading: Components loaded on demand
- Image Optimization: Lazy loading for menu item images
- Code Splitting: Separate bundles for different routes
Key Components
Custom Hooks
useMenuFilter
Purpose: Advanced filtering and search for menu items Features:
- Fuzzy search using Fuse.js
- Category-based filtering with hierarchy support
- Search across name, description, category, and Hindi text
Usage:
const { filteredItems } = useMenuFilter({
items: menuItems,
searchTerm: searchQuery,
selectedCategory: activeCategory,
menuSubCategories: subCategories,
});
useNavigation
Purpose: Keyboard and touch navigation support Features:
- Arrow key navigation (left/right)
- Touch/swipe gestures for mobile
- Configurable callback functions
Usage:
const { handleTouchStart } = useNavigation({
onNextPage: () => setCurrentPage((prev) => prev + 1),
onPreviousPage: () => setCurrentPage((prev) => prev - 1),
});
usePagination
Purpose: Advanced pagination with wrap-around Features:
- Wrap-around navigation (last → first, first → last)
- Dependency-based page reset
- Configurable items per page
Usage:
const {
currentPage,
totalPages,
currentItems,
goToNextPage,
goToPreviousPage,
goToPage,
} = usePagination({
items: filteredItems,
itemsPerPage: 12,
dependencies: [searchTerm],
});
UI Components
Navbar
Features:
- Auto-hide on scroll with hover reveal
- Mobile hamburger menu
- Smooth scroll to sections
- Support for both hash anchors and routes
MenuItemCard
Features:
- Bilingual display (English/Hindi)
- Popular item badges
- Category hierarchy display
- Responsive image handling
HeroSection
Features:
- Company branding
- Social media integration
- Responsive design
- Call-to-action layout
Type System
Menu Types
MenuItem: Base menu item structureMenuItemWithId: Menu item with database IDMenuCategory: Main category with IDMenuSubCategory: Subcategory with parent reference
Key Interfaces
interface MenuItem {
name: string;
hindiName?: string;
imageSrc?: string;
description?: string;
hindiDescription?: string;
category: string;
popular?: boolean;
hindiCategory?: string;
}
Utility Functions
cn() - Class Name Merger
Purpose: Intelligent Tailwind CSS class merging Features:
- Combines clsx and tailwind-merge
- Resolves class conflicts
- Supports conditional classes
Usage:
cn('px-2 py-1', 'px-4'); // Returns 'py-1 px-4'
cn('text-sm', { 'font-bold': isActive });
Routing Structure
/: Home page with hero, reviews, gallery/menu: Interactive menu with search and filtering/menu/print: Print-friendly menu layout/menu/single: Single page menu view
Development Guidelines
Component Patterns
- Functional Components: Use function components with hooks
- TypeScript: Strict typing for all props and returns
- JSDoc: Comprehensive documentation for all exports
- Responsive Design: Mobile-first approach with Tailwind
Code Organization
- Custom Hooks: Place in
src/components/hooks/ - UI Components: Reusable components in
src/components/ui/ - Types: Centralized in
src/types/ - Utilities: Helper functions in
src/lib/
Performance Considerations
- Lazy Loading: Use React.lazy for route components
- Memoization: Use useMemo/useMemo for expensive computations
- Image Optimization: Implement lazy loading for images
- Bundle Splitting: Separate routes into different chunks
Deployment
Build Process
npm run build # Production build
npm run preview # Preview production build
Environment Variables
- Vite automatically loads
.envfiles - Use
VITE_prefix for client-side variables
Contributing
Adding New Menu Items
- Update menu data structure
- Ensure proper categorization
- Add both English and Hindi text
- Include high-quality images
Creating New Components
- Follow existing naming conventions
- Add comprehensive JSDoc
- Include TypeScript types
- Test responsive design
- Consider accessibility
Browser Support
- Modern browsers (ES2020+)
- Mobile responsive design
- Touch gesture support
- Keyboard navigation
Future Enhancements
Potential Improvements
- Admin Panel: Content management system
- Online Ordering: E-commerce integration
- Advanced Search: Filters by price, dietary restrictions
- Analytics: User behavior tracking
- PWA: Offline support and installability
Technical Debt
- State Management: Consider Redux/Zustand for complex state
- Testing: Add unit and integration tests
- Error Boundaries: Implement error handling
- Performance: Add performance monitoring
Last Updated: January 2026