Skip to main content

Welcome to Q-Sopa

Build beautiful restaurant menu experiences with dynamic category filtering and seamless API integration

Key Features

Dynamic Filtering

Category-based product filtering with real-time updates from your API

Responsive Design

Mobile-first design with drawer navigation and adaptive layouts

API Integration

Seamless REST API integration for categories and products

Modern Components

Reusable React components with Material Symbols icons

What’s Inside

Q-Sopa is a modern React application built with Vite that provides a complete restaurant menu experience. It includes:
  • Dynamic Category Navigation - Filter products by category with smooth transitions
  • Product Display - Beautiful product cards with images, pricing, and badges
  • Mobile-Optimized - Responsive navbar with drawer menu for mobile devices
  • Error Handling - Loading states and error messages for better UX
  • Material Icons - Integration with Google Material Symbols for consistent iconography

Getting Started

Quick Start

Get up and running in minutes with our step-by-step guide

Development Setup

Set up your local development environment

Component Reference

Explore all available React components

API Integration

Learn how to integrate with your backend API

Built With

  • React 19 - Modern React with latest features
  • Vite - Fast build tool and development server
  • CSS Modules - Component-scoped styling
  • Material Symbols - Google’s icon system
  • Fetch API - Simple REST API integration

Quick Example

Here’s how easy it is to fetch and display products:
src/services/api.js
const BASE_URL = "https://apiqsp-production.up.railway.app";

export const getProductsByCategory = async (categoryId) => {
  const res = await fetch(`${BASE_URL}/products/category/${categoryId}`);
  if (!res.ok) throw new Error("Error al cargar productos de la categoría");
  return res.json();
};
src/pages/Menu.jsx
import { getProductsByCategory } from "../services/api";

export default function Menu() {
  const [products, setProducts] = useState([]);
  
  useEffect(() => {
    if (activeCategoryId === null) return;
    
    getProductsByCategory(activeCategoryId)
      .then((data) => setProducts(data))
      .catch((err) => setError(err.message));
  }, [activeCategoryId]);
  
  return (
    <section className="products-grid">
      {products.map((product) => (
        <ProductCard
          key={product.id}
          title={product.name}
          price={product.price}
          image={product.imageUrl}
          badge={product.badge}
        />
      ))}
    </section>
  );
}

Next Steps

1

Install Dependencies

Clone the repository and install all required packages with npm, yarn, or pnpm
2

Configure API

Update the API base URL in src/services/api.js to point to your backend
3

Run Development Server

Start the Vite development server and see your menu in action
4

Customize Components

Modify the components and styling to match your brand

Need Help?

Troubleshooting

Common issues and solutions

GitHub Issues

Report bugs or request features

Build docs developers (and LLMs) love