{"id":20740072,"url":"https://github.com/rcasanovan/tinder-gyms","last_synced_at":"2026-04-28T05:35:30.582Z","repository":{"id":243133257,"uuid":"806092498","full_name":"rcasanovan/Tinder-gyms","owner":"rcasanovan","description":"A demo with a Tinder UI to show info about gyms using TCA (The Composable Architecture).","archived":false,"fork":false,"pushed_at":"2024-05-26T11:10:05.000Z","size":23542,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-01-18T01:43:48.312Z","etag":null,"topics":["composable-architecture","swift","swiftui","tca"],"latest_commit_sha":null,"homepage":"","language":"Swift","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rcasanovan.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-05-26T11:01:41.000Z","updated_at":"2024-12-05T15:11:49.000Z","dependencies_parsed_at":"2024-06-06T22:55:16.378Z","dependency_job_id":null,"html_url":"https://github.com/rcasanovan/Tinder-gyms","commit_stats":null,"previous_names":["rcasanovan/tinder-gyms"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rcasanovan%2FTinder-gyms","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rcasanovan%2FTinder-gyms/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rcasanovan%2FTinder-gyms/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rcasanovan%2FTinder-gyms/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rcasanovan","download_url":"https://codeload.github.com/rcasanovan/Tinder-gyms/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243030775,"owners_count":20224663,"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":["composable-architecture","swift","swiftui","tca"],"created_at":"2024-11-17T06:27:19.979Z","updated_at":"2025-12-25T05:01:33.948Z","avatar_url":"https://github.com/rcasanovan.png","language":"Swift","funding_links":[],"categories":[],"sub_categories":[],"readme":"## Here we go!\n\nThis demo implements a similar version of a popular dating app to list a series of gyms with activities.\n\nThe user can discard or like each of the gyms/activities and depending on the case, show a match.\n\n\n## Architecture\n\n\"The Composable Architecture (TCA, for short) is a library for building applications in a consistent and understandable way, with composition, testing, and ergonomics in mind. It can be used in SwiftUI, UIKit, and more, and on any Apple platform (iOS, macOS, tvOS, and watchOS)\".\n\n\n## What is the Composable Architecture?\n\nThis library provides a few core tools that can be used to build applications of varying purpose and complexity. It provides compelling stories that you can follow to solve many problems you encounter day-to-day when building applications, such as:\n\n* State management\n\nHow to manage the state of your application using simple value types, and share state across many screens so that mutations in one screen can be immediately observed in another screen.\n\n* Composition\n\nHow to break down large features into smaller components that can be extracted to their own, isolated modules and be easily glued back together to form the feature.\n\n* Side effects\n\nHow to let certain parts of the application talk to the outside world in the most testable and understandable way possible.\n\n* Testing\n\nHow to not only test a feature built in the architecture, but also write integration tests for features that have been composed of many parts, and write end-to-end tests to understand how side effects influence your application. This allows you to make strong guarantees that your business logic is running in the way you expect.\n\n* Ergonomics\n\nHow to accomplish all of the above in a simple API with as few concepts and moving parts as possible.\n\n\n## Data flow\n\u003cp float=\"center\"\u003e\n  \u003cimg src=\"https://github.com/urbansportsgroup-challenges/ios-coding-challenge-rcasanovan/blob/main/Images/TCA_image.001.jpeg\"/\u003e\n\u003c/p\u003e\n\n## Snapshots\n\u003cp float=\"left\"\u003e\n  \u003cimg src=\"https://github.com/urbansportsgroup-challenges/ios-coding-challenge-rcasanovan/blob/main/Images/testLoadActivitiesViewLoadingState.light.png\" width=\"250\" /\u003e\n  \u003cimg src=\"https://github.com/urbansportsgroup-challenges/ios-coding-challenge-rcasanovan/blob/main/Images/testLoadActivitiesViewSuccessState.light.png\" width=\"250\" /\u003e \n  \u003cimg src=\"https://github.com/urbansportsgroup-challenges/ios-coding-challenge-rcasanovan/blob/main/Images/testLoadActivitiesViewFailureState.light.png\" width=\"250\" /\u003e\n  \u003cimg src=\"https://github.com/urbansportsgroup-challenges/ios-coding-challenge-rcasanovan/blob/main/Images/testLoadActivitiesViewSuccessStateWithNoGyms.light.png\" width=\"250\" /\u003e\n  \u003cimg src=\"https://github.com/urbansportsgroup-challenges/ios-coding-challenge-rcasanovan/blob/main/Images/testMatchView.light.png\" width=\"250\" /\u003e \n\u003c/p\u003e\n\n\n## Requirements included in the demo\n- create the UI using SwiftUI\n- set the minimum deployment target to iOS 16\n- add any dependencies you decide to use with SPM (TCA and snapshot testing)\n- fetch data from a remote endpoint ([OpenGym](https://data.townofcary.org/api/explore/v2.1/catalog/datasets/open-gym/records?limit=100))\n- cover at least the basic functionality with unit tests\n- design the app as a single-screen that displays gym information and user distance, with a swipe-right-to-like matching interface similar to dating apps\n- set the match chance to 10% of the interactions and trigger an animation: the app is getting 100 records from the API so you need to do 10 likes before see a match\n- additional animations for a dynamic user experience\n- more comprehensive tests, including UI tests (snapshot tests)\n\n\n## Additional tools / technologies\n* [Swift-format](https://github.com/apple/swift-format): swift-format provides the formatting technology for SourceKit-LSP and the building blocks for doing code formatting transformations.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frcasanovan%2Ftinder-gyms","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frcasanovan%2Ftinder-gyms","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frcasanovan%2Ftinder-gyms/lists"}