Skip to content

steph-xue/cuisinable

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

99 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Cuisinable

(Hackcamp 2024)

Making every meal possible, enjoyable, and accessible
because everyone deserves a plate that's made just for them.

Cuisinable mascot, Chef Bearable

Devpost  |  Live Demo


Table of Contents


Contributors

  • Aaqib Patel
  • Ryan Ariles
  • Stephanie Xue
  • Victor Yu

Problem Statement

Dietary restrictions are an issue that many people struggle with on a daily basis. It's a frustrating and excluding experience, and Cuisinable aims to solve this issue.

Cuisinable is your personal culinary assistant, empowering individuals with food intolerances to enjoy diverse and delicious cuisines from around the world, safely. With approximately 7% of Canadians self-reporting food allergies, and many more indicating food intolerances, finding recipes that meet specific dietary needs without sacrificing flavor can be a challenge. Cuisinable solves this problem by offering a welcoming, accessible platform where users can discover tailored recipes based on their dietary restrictions. Simply input your food intolerances and cuisine preferences, and Cuisinable generates a variety of recipes tailored to your specific needs.

With a commitment to accessibility and thoughtful design, Cuisinable ensures a seamless experience for users of all abilities. Our friendly mascot, Chef Bearable, greets users on the landing page, setting a warm and approachable tone and guiding them through the recipe generation process.

Cuisinable is there every step of the way to ensure your recipe can be enjoyed by everyone.


Overview

This project is a full-stack web application that allows users to generate recipes tailored to their food intolerances and cuisine preferences, guiding them from an initial selection screen to a full library of matching, safe-to-eat dishes. It is built with React, JavaScript, HTML, CSS, and Bootstrap on the frontend, with Vite used as the build tool. The backend is built with Node.js and Express.js and communicates with the Spoonacular API to retrieve recipe data based on the user’s selected cuisine and intolerances, including complete ingredient lists and step-by-step instructions for each result.


Features

Landing Page

The landing page welcomes users with Chef Bearable, the app's mascot, and a "Get Started" button that begins the recipe generation process.

Landing Page


Selecting Intolerances and Cuisine

Users begin by selecting any number of food intolerances that apply to them, choosing from a comprehensive set of common allergens and sensitivities. They then choose a single cuisine from a wide range of options spanning multiple continents and culinary traditions. Every recipe generated afterward is filtered against these selections, so users only ever see dishes that are genuinely safe and relevant to them.

Food intolerances:

Dairy Peanut Soy
Egg Seafood Sulfite
Gluten Sesame Tree Nut
Grain Shellfish Wheat

Cuisines:

American German Latin American
British Greek Mediterranean
Caribbean Indian Mexican
Chinese Italian Middle Eastern
Eastern European Japanese Spanish
French Korean Thai

Intolerance and Cuisine Selector


Recipe Results

Based on the selected intolerances and cuisine, Cuisinable displays a set of recipe cards, each showing a dish's image and title. A "Change Cuisine" button lets users restart the process at any time to search with a new set of preferences.

Recipe Results


Full Recipe View

Clicking a recipe card opens a detailed view of that dish, including its image, a summary description, a full list of ingredients, and step by step preparation instructions. A close icon returns users to the recipe results.

Full Recipe View


Tech Stack

Layer Technologies
Frontend React, JavaScript, HTML, CSS, Bootstrap
Backend Express.js, Node.js
APIs Spoonacular API (supplies recipe data filtered by cuisine and intolerances)
Build Tool Vite

How It Works

The frontend is built from three main components, a landing page, a selector for choosing intolerances and cuisine, and a meals view for displaying and exploring the generated recipes, all rendered from a single root component that tracks which view is currently active. Selecting intolerances and a cuisine updates state in the root component, and clicking through to see recipes sends a request to the backend with those selections included as query parameters. On the backend, an Express.js server receives that request, builds a query string from the selected cuisine and intolerances, and calls the Spoonacular API to retrieve twelve matching recipes, each with full ingredient and instruction data included. The response is sent back to the frontend and rendered as a grid of recipe cards. Clicking a card opens a full recipe view, stripping any HTML tags from the recipe summary and de-duplicating ingredients pulled from the recipe's instructions before displaying them alongside the full set of preparation steps.


Technical Challenges and Achievements

  • Connecting the frontend to the backend and establishing seamless communication between the two for smooth functionality
  • Learning to filter and retrieve specific data from the Spoonacular API to ensure only allergy and intolerance safe recipes are displayed
  • Determining appropriate server ports and navigating Git branches for effective team collaboration
  • Prototyping and designing a user friendly interface for an intuitive user experience

Future Improvements

Several enhancements are planned to extend the functionality of the application:

  • User profiles that allow people to save their dietary preferences and favorite recipes
  • An expanded recipe database to support a larger variety of cuisines and dishes
  • A search function that enables keyword searches for specific dishes or ingredients
  • Animations for a more dynamic and engaging interface
  • Options for users to invite friends and collaborate on recipe lists for events like potlucks

Getting Started

Follow the steps below to set up and run the application on your own machine.

Prerequisites

Make sure Node.js and npm are installed before you begin. You can check both by running the commands below, which should each print a version number.

node --version
npm --version

1. Clone the repository

This downloads a copy of the project to your computer and moves you into the project folder.

git clone https://github.com/steph-xue/cuisinable.git
cd cuisinable

2. Install the dependencies

This installs React, Express, and everything else the project needs to run.

npm install

3. Start the development server

This runs both the frontend and backend together on a single local server.

npm run dev

Once the server is running, open http://localhost:8000 in your browser to start using the application.

About

Cuisinable is your new personal culinary assistant, empowering individuals with food intolerences to enjoy diverse cuisines from around the world.

Topics

Resources

Stars

1 star

Watchers

2 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors