{"id":26775516,"url":"https://github.com/crispengari/cocktailer","last_synced_at":"2026-04-13T19:31:28.742Z","repository":{"id":284781427,"uuid":"864450532","full_name":"CrispenGari/cocktailer","owner":"CrispenGari","description":"🍸🥂is a mobile app designed to help users discover new cocktails and get personalized recommendations based on their preferences. The app provides a seamless experience without requiring user accounts, while ensuring content is suitable for users aged 18 and above.","archived":false,"fork":false,"pushed_at":"2024-10-10T08:38:37.000Z","size":45817,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-27T17:02:41.912Z","etag":null,"topics":["expo","flask","graphql","javascript","machine-learning","python","react-js","react-native","recommendation-system","typescript","urql"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/CrispenGari.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-09-28T08:51:27.000Z","updated_at":"2024-10-10T08:48:06.000Z","dependencies_parsed_at":"2025-03-27T17:12:46.669Z","dependency_job_id":null,"html_url":"https://github.com/CrispenGari/cocktailer","commit_stats":null,"previous_names":["crispengari/cocktailer"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CrispenGari%2Fcocktailer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CrispenGari%2Fcocktailer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CrispenGari%2Fcocktailer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CrispenGari%2Fcocktailer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/CrispenGari","download_url":"https://codeload.github.com/CrispenGari/cocktailer/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246131335,"owners_count":20728303,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["expo","flask","graphql","javascript","machine-learning","python","react-js","react-native","recommendation-system","typescript","urql"],"created_at":"2025-03-29T03:18:44.178Z","updated_at":"2026-04-13T19:31:28.709Z","avatar_url":"https://github.com/CrispenGari.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"### Cocktailer\n\n`Cocktailer` is a mobile app designed to help users discover new cocktails and get personalized recommendations based on their preferences. The app provides a seamless experience without requiring user accounts, while ensuring content is suitable for users aged 18 and above.\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/crispengari/cocktailer/actions/workflows/ci.yml\"\u003e\n    \u003cimg src=\"https://github.com/crispengari/cocktailer/actions/workflows/ci.yml/badge.svg\" alt=\"CI Status\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://github.com/crispengari/cocktailer/blob/main/LICENSE\"\u003e\n    \u003cimg src=\"https://img.shields.io/npm/l/cocktailer.svg?maxAge=2592000\" alt=\"License\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://typescriptlang.org/\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/language-typescript-blue.svg\" alt=\"Language: TypeScript\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://www.python.org/\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/language-python-blue.svg\" alt=\"Language: Python\"\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n### Framework\n\nThe following image shows the framework for the `cocktailer` app.\n\n\u003cp align=\"center\"\u003e\n\u003cimg src=\"/images/framework.png\" alt=\"android\" width=\"100%\"/\u003e\n\u003c/p\u003e\n\n### Key Features:\n\n1. **Browse Cocktails**: Users can explore a wide variety of cocktails, including classic recipes and modern drinks.\n2. **Like Your Favorites**: Users can like their favorite cocktails to help Cocktailer understand their preferences.\n3. **Get Recommendations**: Using a machine learning algorithm, the app suggests related cocktails based on the user’s liked drinks.\n4. **No Authentication Required**: Cocktailer does not require users to create an account, offering full access to its features immediately.\n5. **Age Restriction**: Designed for users aged 18+.\n\n### Screenshots\n\nThe basic app preview looks as follows.\n\n#### `android`\n\n\u003cp align=\"center\"\u003e\n\u003cimg src=\"/images/android/0.jpeg\" alt=\"android\" width=\"200\"/\u003e\n\u003cimg src=\"/images/android/1.jpeg\" alt=\"android\" width=\"200\"/\u003e\n\u003cimg src=\"/images/android/2.jpeg\" alt=\"android\" width=\"200\"/\u003e\n\u003cimg src=\"/images/android/3.jpeg\" alt=\"android\" width=\"200\"/\u003e\n\u003cimg src=\"/images/android/4.jpeg\" alt=\"android\" width=\"200\"/\u003e\n\u003cimg src=\"/images/android/5.jpeg\" alt=\"android\" width=\"200\"/\u003e\n\u003cimg src=\"/images/android/6.jpeg\" alt=\"android\" width=\"200\"/\u003e\n\u003c/p\u003e\n\n#### `ios`\n\n\u003cp align=\"center\"\u003e\n\u003cimg src=\"/images/ios/0.jpeg\" alt=\"ios\" width=\"200\"/\u003e\n\u003cimg src=\"/images/ios/1.jpeg\" alt=\"ios\" width=\"200\"/\u003e\n\u003cimg src=\"/images/ios/2.jpeg\" alt=\"ios\" width=\"200\"/\u003e\n\u003cimg src=\"/images/ios/3.jpeg\" alt=\"ios\" width=\"200\"/\u003e\n\u003cimg src=\"/images/ios/4.jpeg\" alt=\"ios\" width=\"200\"/\u003e\n\u003cimg src=\"/images/ios/5.jpeg\" alt=\"ios\" width=\"200\"/\u003e\n\u003cimg src=\"/images/ios/6.jpeg\" alt=\"ios\" width=\"200\"/\u003e\n\u003c/p\u003e\n\n#### `apk`\n\nYou can download the `apk` file [here](/apk/cocktailer.apk).\n\n### AI Part of the App\n\nThe AI recommendation system is powered by a **machine learning server** that analyzes user interactions with the app. Here's how the system works:\n\n1. **Data Collection**: Each time a user \"likes\" a cocktail, the server logs that interaction.\n2. **Model**: The machine learning model on the server processes the user’s cocktail preferences and finds patterns in the type of cocktails the user tends to like.\n3. **Recommendations**: The model suggests new cocktails based on the top-liked one, ensuring a personalized experience for every user.\n\nThe machine learning server is hosted separately and communicates with the app to deliver these recommendations in real-time. The server base url is: https://cocktailer.onrender.com/graphql\n\n### Stack and Algorithm:\n\n- **Framework**: Flask for server-side logic.\n- **Model**: A content-based recommendation system using cosine similarity to match liked cocktails with others in the dataset.\n- **Data**: A file database of various cocktails, including ingredients, categories, and preparation methods.\n\n### Cocktailer App - Backend and Frontend Integration\n\n#### GraphQL-Flask Server\n\nThe **Cocktailer** app uses a **Flask** backend, serving a **GraphQL API** to handle data interactions efficiently. This architecture allows flexible querying and mutation operations, making it easier to retrieve or modify specific data such as cocktail details, likes, and personalized recommendations.\n\n#### Key Components:\n\n1. **Flask**: A lightweight Python web framework used to serve the GraphQL API.\n2. **GraphQL**: A powerful query language that allows the app to request only the data it needs.\n3. **Graphene**: A Python library that simplifies the creation of GraphQL APIs in Flask.\n4. **Machine Learning Integration**: The Flask server hosts the machine learning model, which processes user preferences to suggest cocktails based on their liked ones.\n\n#### API Functionality:\n\n- **Queries**: Users can query for a list of cocktails, details of specific cocktails, and their liked status.\n- **Mutations**: Users can like/unlike a cocktail, which updates the server with their preferences.\n- **Machine Learning**: Personalized recommendations are generated based on the user's liked cocktails, providing tailored suggestions using content-based filtering.\n\n#### Benefits:\n\n- **Efficiency**: GraphQL enables the client to fetch only the data required, reducing the amount of unnecessary information transferred between the server and the app.\n- **Scalability**: The Flask-GraphQL setup can easily be expanded to include more features such as user data, additional drink categories, or recommendation models.\n\n#### Frontend Integration with [`urql`](https://commerce.nearform.com/open-source/urql/) and [`graphql.tada`](https://gql-tada.0no.co/)\n\nThe **Cocktailer** app frontend uses **[`urql`](https://commerce.nearform.com/open-source/urql/)** and **[`graphql.tada`](https://gql-tada.0no.co/)** to interact with the GraphQL API hosted on the Flask server. These tools simplify sending queries and mutations from the frontend to the backend, making the data flow seamless.\n\n#### Key Components:\n\n1. **[`urql`](https://commerce.nearform.com/open-source/urql/)**: A lightweight GraphQL client for handling queries and mutations between the app and the server. It allows efficient data fetching, caching, and subscription to updates.\n2. **[`graphql.tada`](https://gql-tada.0no.co/)**: A library that helps in parsing and writing GraphQL queries on the frontend, ensuring smooth communication with the server.\n\n#### How It Works:\n\n- **[`urql`](https://commerce.nearform.com/open-source/urql/)** connects to the Flask-based GraphQL server and sends queries for retrieving data such as the cocktail list, cocktail details, and user preferences.\n- **[`graphql.tada`](https://gql-tada.0no.co/)** is used to define queries and mutations in the frontend, such as fetching cocktail data or liking/unliking a cocktail.\n- When a user interacts with the app (e.g., liking a cocktail), a **mutation** is sent to the Flask server to update the backend with their preferences.\n- The **recommendation system** triggers when fetching personalized cocktail suggestions, which are based on the user’s liked drinks.\n\n#### Benefits:\n\n- **Real-time updates**: [`urql`](https://commerce.nearform.com/open-source/urql/) facilitates efficient data fetching and cache management, ensuring the app gets fresh data when required.\n- **Modular design**: Both [`urql`](https://commerce.nearform.com/open-source/urql/) and [`graphql.tada`](https://gql-tada.0no.co/) are lightweight and easy to integrate, making the frontend more maintainable and scalable.\n\n### Notebooks\n\nYou can access the notebook for the recommendation algorithm at [01_COCKTAIL_RECOMMANTIONS.ipynb](https://github.com/CrispenGari/recommentation-algorithms/blob/main/00_ML/02_COCKTAIL_RECOMMANTIONS/01_COCKTAIL_RECOMMANTIONS.ipynb)\n\n### License\n\n`Cocktailer` is licensed under the **MIT License**. See the full license below:\n\n```\nMIT License\n\nCopyright (c) 2024 crispengari\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcrispengari%2Fcocktailer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcrispengari%2Fcocktailer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcrispengari%2Fcocktailer/lists"}