{"id":13694304,"url":"https://github.com/fatih-gursoy/Cuisiner","last_synced_at":"2025-05-03T01:32:38.860Z","repository":{"id":50383769,"uuid":"467691545","full_name":"fatih-gursoy/Cuisiner","owner":"fatih-gursoy","description":"Cuisiner is a user generated recipe/cooking collection app","archived":false,"fork":false,"pushed_at":"2023-04-27T12:31:24.000Z","size":65136,"stargazers_count":19,"open_issues_count":0,"forks_count":6,"subscribers_count":1,"default_branch":"master","last_synced_at":"2024-08-03T17:19:25.346Z","etag":null,"topics":["firebase","firestore","mvvm","protocol-oriented-programming","recipe-app","swift"],"latest_commit_sha":null,"homepage":"","language":"Swift","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/fatih-gursoy.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}},"created_at":"2022-03-08T22:10:20.000Z","updated_at":"2024-06-02T16:51:17.000Z","dependencies_parsed_at":"2024-04-12T23:39:30.738Z","dependency_job_id":null,"html_url":"https://github.com/fatih-gursoy/Cuisiner","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fatih-gursoy%2FCuisiner","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fatih-gursoy%2FCuisiner/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fatih-gursoy%2FCuisiner/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fatih-gursoy%2FCuisiner/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/fatih-gursoy","download_url":"https://codeload.github.com/fatih-gursoy/Cuisiner/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":224346494,"owners_count":17296223,"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":["firebase","firestore","mvvm","protocol-oriented-programming","recipe-app","swift"],"created_at":"2024-08-02T17:01:28.972Z","updated_at":"2024-11-12T20:32:06.370Z","avatar_url":"https://github.com/fatih-gursoy.png","language":"Swift","funding_links":[],"categories":["Misc"],"sub_categories":["Notes"],"readme":"\nThis app is available in the [AppStore](https://apps.apple.com/app/id1641238583)\n\n## Overview\nCuisiner is a user generated recipe/cooking collection app\n\n - **Discover:** Find other recipes and rate them. Make new meals/drinks with cook timers within recipe detail provided by owner.\n - **Create New:** Save your recipes to your book, keep them and share with people. Enter ingredients and cook instructions \u0026 cook time.\n - **My Recipes:** Your own recipe book. Keep or update them.\n\n ## Framework and Architecture\n - UIKit\n - TimerView -\u003e SwiftUI\n - MVVM-Coordinator Design Pattern\n - Data Binding: Protocol Oriented\n - Generic Network Layer for Firebase Services\n \n ## Navigation\n - Coordinator pattern for screen routing\n \n``` \n class AppCoordinator: Coordinator {\n\n    var childCoordinators = [Coordinator]()\n    var navigationController: UINavigationController\n    \n    init(navigationController: UINavigationController) {\n        self.navigationController = navigationController\n    }\n    \n    func start(isLogIn: Bool) {\n        isLogIn ? gotoTabBar() : gotoAuth()\n    }\n    \n    func childDidFinish(_ child: Coordinator) {\n        for (index, coordinator) in childCoordinators.enumerated() {\n            if coordinator === child { childCoordinators.remove(at: index) }\n        }\n    }\n    \n    func gotoAuth() {\n        let authCoordinator = AuthCoordinator(navigationController: navigationController)\n        authCoordinator.parentCoordinator = self\n        childCoordinators.append(authCoordinator)\n        authCoordinator.start()\n    }\n    \n    func gotoTabBar() {\n        let tabBarCoordinator = TabBarCoordinator(navigationController: navigationController)\n        tabBarCoordinator.parentCoordinator = self\n        childCoordinators.append(tabBarCoordinator)\n        tabBarCoordinator.start()\n    }\n```\n\n## Data Persistence\n- Core Data     -\u003e Recipe Bookmark\n- UserDefaults  -\u003e User Login\n\n## Firebase\n- Firebase Authentication\n- [Firestore](https://firebase.google.com/products/firestore/)\n- [Storage](https://firebase.google.com/products/storage)\n\n\n## Screenshots\n\u003cimg src=\"Screenshots/ss1.png\" width=20% height=20%\u003e \u003cimg src=\"Screenshots/ss2.png\" width=20% height=20%\u003e\n\u003cimg src=\"Screenshots/ss3.png\" width=20% height=20%\u003e\n\u003cimg src=\"Screenshots/ss4.png\" width=20% height=20%\u003e\n\u003cimg src=\"Screenshots/ss5.png\" width=20% height=20%\u003e\n\u003cimg src=\"Screenshots/ss6.png\" width=20% height=20%\u003e\n\u003cimg src=\"Screenshots/ss7.png\" width=20% height=20%\u003e\n\u003cimg src=\"Screenshots/ss8.png\" width=20% height=20%\u003e\n\n\n\n\n\n\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffatih-gursoy%2FCuisiner","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffatih-gursoy%2FCuisiner","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffatih-gursoy%2FCuisiner/lists"}