Project Name: "Little Lemon Restaurant App"
View Live Demo - Experience the app in action!
This project was developed as a solo effort. Design assets were provided as part of the project requirements.
This project was built using React.js to showcase my skills as a Junior Front-End Developer. It highlights best practices in UI/UX design, component-based architecture, scalability, and maintainability.
- Intuitive UI/UX: Clean navigation and user-friendly interface with clear visual hierarchy
- Responsive Design: Custom breakpoints for optimal viewing on mobile, tablet, and desktop devices
- Advanced Reservation System: Full-featured booking functionality with time slot selection, party size options, and special requests
- Real-time Form Validation: Interactive feedback during reservation process with accessibility features
- SCSS Architecture: Consistent branded styling using SCSS architecture with variables, mixins, and partials for maintainable styling across a growing component library
- Dynamic Menu Showcase: Featured dishes with filtering options, descriptions, and vivid imagery
- Customer Testimonials: Review section with star ratings
- Performance Optimization: Built with Vite for near-instant HMR and optimized production bundles with automatic code splitting
- Modular Component Design: Reusable UI elements with consistent props interfaces for Cards, Buttons, and Form elements
- Accessibility Compliant: WCAG standards implementation for inclusive user experience
- Installation Guide
- Project Architecture
- Styling Architecture
- Testing & Performance
- Challenges & Solutions
- Deployment
- License
- Contact Information
- Node.js (v18.0.0 or higher)
- Git (for cloning the repository)
- React.js (v18.3.0 or higher)
- Clone the repository:
git clone https://github.com/Francisco1904/little-lemon-app-full.git cd little-lemon-app-full - Install dependencies:
npm install
- Compile SCSS to CSS:
npm run scss:build
- Start the development server:
npm run dev
- Open your browser and navigate to
http://localhost:5173/to view the application.
- Frontend:
- React.js (v18.3.1)
- React Router for page navigation
- SCSS for enhanced styling capabilities
- CSS Custom Properties for theming
- Build Tool: Vite (v6.2.0)
- Version Control: Git & GitHub
- Testing: Vitest with React Testing Library
- Deployment Platform: Vercel
- Analytics: Vercel Web Analytics for tracking visitor metrics without compromising user privacy
This project follows security best practices for a React application. For details on how we handle dependency vulnerabilities and our security policy, please see SECURITY.md.
The project follows a component-based architecture with clear separation of concerns:
- Pages: Container components that represent full pages in the application
- Components: Reusable UI elements that compose the pages
- Assets: Static resources like images and logos
- Styles: Global and component-specific styling using SCSS
- Context: State management for booking functionality
- Component Composition: Building complex UIs from smaller, focused components
- Prop Drilling: Passing data to child components through props
- SCSS Variables & Mixins: Using SCSS features for consistent styling
- Responsive Design: Mobile-first approach with flexible grid layouts
- BEM-style Naming: For component organization in SCSS
βββ src
β βββ Components # Reusable UI components (Header, Footer, Card, etc.)
β βββ pages # Page components (HomePage, ReservationsPage, etc.)
β βββ assets # Images and static resources
β βββ context # Context providers for state management
β βββ utils # Utility functions
β βββ styles # Styling files
β β βββ scss/ # Source SCSS files
β β β βββ _variables.scss # Design tokens and variables
β β β βββ _mixins.scss # Reusable patterns and functions
β β β βββ _reset.scss # CSS reset
β β β βββ components/ # Component-specific styles
β β β βββ pages/ # Page-specific styles
β β β βββ main.scss # Main SCSS file that imports all partials
β β βββ css/ # Compiled CSS (generated from SCSS)
β βββ App.jsx # Main application component
β βββ main.jsx # Application entry point
This project follows modern front-end development best practices by implementing a clean, organized SCSS architecture:
- Single Source of Truth: All styles are managed through SCSS and compiled into a single CSS file
- Component-Based Organization: Styles are organized by component and feature
- Consistent Variables: Design tokens are centralized in _variables.scss for easy theming
- Responsive Design: Mobile-first approach with consistent breakpoint mixins
- Performance: CSS is optimized during build process
- Future-Proof SASS Features: Uses modern SASS modules and best practices to avoid deprecation warnings
styles/
βββ scss/ # Source SCSS files
β βββ _variables.scss # Design tokens and variables
β βββ _mixins.scss # Reusable patterns and functions
β βββ _reset.scss # CSS reset/normalize
β βββ _global.scss # Global styles
β βββ _typography.scss # Text styling
β βββ _buttons.scss # Button components
β βββ components/ # Component-specific styles
β β βββ _header.scss
β β βββ _footer.scss
β β βββ ...etc
β βββ pages/ # Page-specific styles
β β βββ _reservations.scss
β β βββ ...etc
β βββ main.scss # Main entry point that imports all partials
βββ css/ # Compiled CSS (don't edit directly)
βββ main.css # The compiled stylesheet
- Variables: Defined in
_variables.scssfor consistent tokens - Nesting: For cleaner, more readable selectors
- Mixins: For reusable style patterns
- Partials: Split styles into maintainable chunks
- BEM-style naming: For component organization
- Modern Color Manipulation: Utilizes the
sass:colormodule for color adjustments instead of deprecated global functions - Clean Declaration Structure: Follows SASS best practices for declaration ordering to prevent "mixed declarations" warnings
Run npm run scss to watch SCSS files and compile changes automatically during development.
Run npm run scss:build to compile a production-ready version for deployment.
This project follows modern front-end development best practices by implementing a clean, organized SCSS architecture:
- Single Source of Truth: All styles are managed through SCSS files in
src/styles/scss/and compiled into a single CSS file (src/styles/css/main.css) - Component-Based Organization: Styles are organized by component and feature
- Consistent Variables: Design tokens are centralized in
_variables.scssfor easy theming - Responsive Design: Mobile-first approach with consistent breakpoint mixins
- Performance: CSS is optimized during build process
src/styles/scss/- Source SCSS files_variables.scss- Design tokens and theme variables_mixins.scss- Reusable style patterns_global.scss- Global styles and utilitiescomponents/- Component-specific stylespages/- Page-specific layouts and styles
- Maintainability: Easier to maintain and update styles
- Consistency: Enforces design system consistency across components
- Developer Experience: Better organization for multiple developers
- Performance: Single CSS file reduces HTTP requests
- Vitest: For unit and component testing
- React Testing Library: For component-focused testing
- User Event: For simulating user interactions
The project includes several performance test suites to ensure optimal user experience:
- Component Render Performance: Measures render time for key components
- Page Load Performance: Measures CLS, FID, and LCP metrics using web-vitals
- React Profiler Tests: Uses React Profiler for detailed rendering analysis
- Memory Usage Tests: Ensures components don't introduce memory leaks
- Navigation Performance: Measures routing transition times
# Run all tests
npm run test
# Run performance tests only
npm run test:performance
# Run specific test file
npm run test src/tests/performance/ComponentRenderTests.test.jsx- Issue: Navigation bar width mismatch with content
- β Solution: Applied CSS flexbox adjustments and ensured consistent max-width across components.
- Issue: Component state not updating correctly
- β
Solution: Used controlled components and React's
useStatehook to manage state effectively.
- β
Solution: Used controlled components and React's
- Issue: CSS maintainability with growing codebase
- β Solution: Migrated to SCSS with partials, mixins, and variables for better organization.
- Issue: Form validation complexities
- β Solution: Created custom validation system with error handling and accessibility features.
- Issue: Git conflicts during collaborative work
- β Solution: Implemented proper Git branching strategies and resolved merge conflicts.
- Issue: Router context missing in component tests
- β Solution: Implemented proper BrowserRouter wrapping for components using navigation hooks during testing.
- Issue: Performance bottlenecks in component rendering
- β Solution: Created custom performance measurement utilities and established render time thresholds for key components.
- Issue: Accessibility for form validation errors
- β Solution: Implemented ARIA attributes and screen reader announcements for improved error messaging.
- Issue: Mobile responsiveness breaking at specific breakpoints
- β Solution: Refactored to a mobile-first approach with strategic breakpoints and fluid typography.
- Issue: State management complexity in booking flow
- β Solution: Implemented React Context API with custom hooks for centralized booking state management.
- Issue: Memory leaks in components with timers/subscriptions
- β Solution: Added proper cleanup with useEffect return functions and designed comprehensive memory usage tests.
- Issue: SASS deprecation warnings during build process
- β
Solution: Refactored to use
sass:colormodule instead of global color functions and fixed mixed declaration patterns in SCSS files.
- β
Solution: Refactored to use
- Build the project:
npm run scss:build && npm run build - Deploy using Vercel CLI:
vercel deploy
- Obtain the deployment URL and verify the live project.
This project is licensed under the MIT License. Feel free to use, modify, and distribute this project as per the terms of the license.
- GitHub: Francisco1904
- Email: franciscopontes94@gmail.com


