Project Info
This project did not submit a demo video on Devpost.
Inspiration
At the heart of Palate lies a deep-seated appreciation for the connections forged over shared meals. As a team, we've experienced firsthand the magic of gathering around a table, whether it's for cherished family dinners or impromptu meetups with friends. These moments, woven into the fabric of our lives, inspired us to create Palate at Tree Hacks, where our shared passion for food and technology converged. Throughout the weekend, fueled by Popeyes runs and dining hall escapades, we poured our energy into crafting Palate—a testament to the power of collaboration and shared vision. Yet, beyond the lines of code, Palate embodies a philosophy of mindful eating and thoughtful connection. With Palate, we aim to elevate the dining experience by seamlessly integrating personal preferences and dietary restrictions. Gone are the days of cumbersome inquiries about allergies or dislikes; instead, Palate intuitively keeps track, allowing meals to be curated with care and consideration. By prioritizing the well-being and preferences of those we share meals with, we not only foster deeper connections but also create space for moments of genuine enjoyment and appreciation. In a world filled with distractions, Palate serves as a reminder of the importance of mindful living, even in something as seemingly mundane as choosing what to eat. Through this project, we hope to inspire others to embrace the joy of shared meals, where every bite becomes an opportunity for connection and celebration.
What it does
Palate is a multifaceted platform designed to revolutionize your culinary experience. Here's a closer look at its key features: Personalized Food Journal: Palate serves as your digital food diary, meticulously cataloging your favorite cuisines and dishes. But it goes beyond mere record-keeping, as it also takes into account your dietary restrictions and ingredient preferences. Whether you're avoiding certain foods due to allergies or simply dislike their taste, Palate ensures that your culinary journey is tailored to your unique preferences. Smart Recipe Recommendations: Powered by a robust database, Palate leverages your stored information to offer personalized recipe suggestions. By analyzing your fridge inventory, liked ingredients, disliked ingredients, and dietary restrictions, Palate curates a selection of recipes perfectly suited to your tastes and dietary needs. Say goodbye to endless recipe searches and hello to a curated selection of culinary delights at your fingertips. Dynamic Recipe Retrieval: Unlike static recipe databases, Palate dynamically retrieves recipes from the internet in real-time. This means you'll always have access to a diverse range of recipes, ensuring that your culinary repertoire stays fresh and exciting. Whether you're craving a classic comfort food or eager to experiment with a new culinary trend, Palate has you covered. Interactive Chatbot: Palate takes your culinary experience to the next level with its interactive chatbot feature. Whether you're seeking recipe recommendations, ingredient substitutions, or cooking tips, the Palate chatbot is always ready to assist. But what sets Palate's chatbot apart is its ability to leverage both your chat history and database information to provide personalized assistance. By analyzing past conversations and stored data, the chatbot offers tailored suggestions and insights, ensuring that every interaction is relevant and helpful. Social Event Planning: Palate isn't just about individual culinary exploration—it's also about fostering connections through shared experiences. With its event planning feature, you can create gatherings and invite your friends to join. But Palate doesn't stop there; it takes the hassle out of menu planning by recommending recipes tailored to the preferences of all attendees. From potlucks to dinner parties, Palate ensures that every event is a culinary success. User Authentication: Ensuring that data provided from the user to us, are safe and sound! Fuzzy/error checking for ingredients: Using levenshtein distance, our program chooses ingredients that are best matched to the user's input.
How we built it
We built Palate using ReactJs as our frontend, Convex as our backend/database. For our chatbot, we used Together AI's Inference models with the Function Calling and JSON mode to structure external API calls from user queries. To query the internet, we used Tavily to perform searches, and Recipe-Scraper (https://github.com/jadkins89/Recipe-Scraper) to scrape the recipe given a url. Our steps for building our recommendation system were: The user can interact with Ramsey (chat bot) and describe dishes, ingredients, and cuisines they are interested in receiving a recipe for. Given a dataset that includes a dishes name, ingredients, and cuisine, we aggregate a user's liked ingredients, disliked ingredients, and cuisines and chat interactions to pinpoint dishes to recommend. We call Tavliy to query the web for recipes matching the dish and diet of the user and get a list of urls. We use a recipe scraper to retrieve the recipes to populate into Ramsey and our events.
Challenges we ran into
Some challenges that we ran into were: Choosing Datasets: To have Palate recommend us recipes, we first created a dataset of dishes using Recipe NLG (there are two versions, 1M+, lite). For ease of implementation, we chose to use the lite version. We felt it was important to curate to liked cuisines of the users, however, we were not able to find any available datasets on the internet that mapped dishes to cuisines. As a way to work around this, we used Together AI's API calls to categorize a dish by its cuisine based on its name and list of ingredients. We acknowledge that there may be dishes in our dataset that is falsely classified. Chatbot Challenges: Developing the chatbot proved to be a formidable task as we encountered difficulties in prompting it effectively. Despite leveraging data to augment its responses, the chatbot often provided unexpected or strange answers, requiring extensive refinement and debugging. Technical Learning Curve: Navigating the learning curves of Convex and ReactJS presented significant challenges for our team. As most of us were unfamiliar with these tools prior to embarking on the Palate project, we faced a steep learning curve in mastering their intricacies and functionalities. Understanding Asynchronous Programming: Grappling with the concepts of asynchronous programming, including async, await, and promises, posed additional hurdles in the development process. Recognizing the importance of these mechanisms in ensuring smooth and responsive user experiences, we dedicated time to deepen our understanding and implementation proficiency.
Accomplishments we're proud of
Mastering Convex: Through the development of Palate, we gained invaluable experience in utilizing Convex for user authentication, enhancing our understanding of secure authentication processes within web applications. AI Augmented Data Pipelines: Delving into the creation of pipelines for AI-augmented data retrieval and generation was a transformative learning experience. We honed our skills in integrating AI technologies seamlessly into our platform, empowering Palate to offer intelligent and personalized recommendations to users. Functional Web Application Development: Perhaps most notably, we're proud to have successfully built a functional web application for Palate. From conceptualization to execution, we navigated the complexities of web development, overcoming challenges and refining our skills along the way. Our achievement in bringing Palate to life underscores our growth and proficiency in creating user-centric digital solutions.
What we learned
Convex which enabled seamless frontend-backend interaction through API calls. Learned about function calling and generation, enhancing the dynamic capabilities of data manipulation within Palate. Transitioned from JavaScript to TypeScript with React, embracing TypeScript's benefits for writing robust and maintainable code in our frontend components.
What's next
for palate Adding more options for dishes to recommend. Being able to recommend more than one items. Caching recommendations to speed up performances. Introducing new events you can organize such as potlucks, or date night. Through this, you are able to assign yourself/others recipes to cook for your events! Palate blend: see how similar your palate is with your friends!
Getting Started with Create React App
This project was bootstrapped with Create React App.
Available Scripts
In the project directory, you can run:
npm start
Runs the app in the development mode.
Open http://localhost:3000 to view it in your browser.
The page will reload when you make changes.
You may also see any lint errors in the console.
npm test
Launches the test runner in the interactive watch mode.
See the section about running tests for more information.
npm run build
Builds the app for production to the build folder.
It correctly bundles React in production mode and optimizes the build for the best performance.
The build is minified and the filenames include the hashes.
Your app is ready to be deployed!
See the section about deployment for more information.
npm run eject
Note: this is a one-way operation. Once you eject, you can't go back!
If you aren't satisfied with the build tool and configuration choices, you can eject at any time. This command will remove the single build dependency from your project.
Instead, it will copy all the configuration files and the transitive dependencies (webpack, Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except eject will still work, but they will point to the copied scripts so you can tweak them. At this point you're on your own.
You don't have to ever use eject. The curated feature set is suitable for small and middle deployments, and you shouldn't feel obligated to use this feature. However we understand that this tool wouldn't be useful if you couldn't customize it when you are ready for it.
Learn More
You can learn more in the Create React App documentation.
To learn React, check out the React documentation.
Code Splitting
This section has moved here: https://facebook.github.io/create-react-app/docs/code-splitting
Analyzing the Bundle Size
This section has moved here: https://facebook.github.io/create-react-app/docs/analyzing-the-bundle-size
Making a Progressive Web App
This section has moved here: https://facebook.github.io/create-react-app/docs/making-a-progressive-web-app
Advanced Configuration
This section has moved here: https://facebook.github.io/create-react-app/docs/advanced-configuration
Deployment
This section has moved here: https://facebook.github.io/create-react-app/docs/deployment
npm run build fails to minify
This section has moved here: https://facebook.github.io/create-react-app/docs/troubleshooting#npm-run-build-fails-to-minify
Analysis
View
Metric
- 46
- 38
- 21
- 14
Figures cover GitHub contributors during the hackathon window. A co-authored commit counts in full for each author, so per-member totals add up to more than the whole-team figures.
Technology
- CSSIn code
- HTMLIn code
- JavaScriptIn code
- OpenAIIn code
- PythonIn code
- ReactIn code
- TypeScriptIn code
7 of 7 appear in the indexed code.
AI coding agents
No AI coding agent signals were found in this repository.
Detected from committed agent config files and commit authorship. Absence of a signal is not proof an agent was unused.
Codebase size
Source size
118 KB
Source files
56
Counts recognized source files only; vendored directories, binaries and lockfiles are excluded, so this is smaller than the repository on disk.
Repository
jmcmai/palate
69 files · 2.3 MB · @ cdb4b1f
Structure
Interface
28 files · 41%Screens, components and styles rendered to the user.
Application logic
28 files · 41%Domain rules, services and shared utilities.
Supporting
Layers are inferred from where files sit in the tree, not from reading the code. A project that names its directories unconventionally will read oddly here — open the file browser to check anything the diagram implies.
Languages
- TypeScript78%
- CSS11%
- JavaScript6%
- Markdown3%
- Python2%
- HTML1%
Share of indexed source by file size. Binary and vendored files are excluded.
Dependencies
package.json
npm · 19- @auth0/auth0-react
- @fortawesome/fontawesome-svg-core
- @fortawesome/free-solid-svg-icons
- @fortawesome/react-fontawesome
- @langchain/community
- @testing-library/jest-dom
- @testing-library/react
- @testing-library/user-event
- convex
- openai
- react
- react-dom
- react-router-dom
- recipe-scraper
- web-vitals
- +4 more
Declared in the repository’s manifests at the indexed commit. A declared package is not proof it is used, and runtime dependencies are listed first.
This project’s features have not been analysed yet.
Export this project's context (description, README, evidence, key source files) to chat with an AI agent elsewhere.