{"id":19635760,"url":"https://github.com/codepath/me102_group_project_example","last_synced_at":"2026-03-04T13:31:42.762Z","repository":{"id":37251487,"uuid":"174747713","full_name":"codepath/me102_group_project_example","owner":"codepath","description":null,"archived":false,"fork":false,"pushed_at":"2020-11-22T23:47:16.000Z","size":6,"stargazers_count":10,"open_issues_count":2,"forks_count":304,"subscribers_count":7,"default_branch":"master","last_synced_at":"2025-02-26T21:45:05.220Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/codepath.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-03-09T21:23:25.000Z","updated_at":"2025-02-06T07:01:56.000Z","dependencies_parsed_at":"2022-07-09T13:00:31.039Z","dependency_job_id":null,"html_url":"https://github.com/codepath/me102_group_project_example","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/codepath/me102_group_project_example","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codepath%2Fme102_group_project_example","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codepath%2Fme102_group_project_example/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codepath%2Fme102_group_project_example/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codepath%2Fme102_group_project_example/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/codepath","download_url":"https://codeload.github.com/codepath/me102_group_project_example/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codepath%2Fme102_group_project_example/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30081424,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-04T13:22:36.021Z","status":"ssl_error","status_checked_at":"2026-03-04T13:20:45.750Z","response_time":59,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":[],"created_at":"2024-11-11T12:26:50.249Z","updated_at":"2026-03-04T13:31:42.722Z","avatar_url":"https://github.com/codepath.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# EXAMPLE GROUP PROJECT README\n\n# TUNIN\n\n## Table of Contents\n1. [Overview](#Overview)\n1. [Product Spec](#Product-Spec)\n1. [Wireframes](#Wireframes)\n1. [Schema](#Schema)\n\n## Overview\n### Description\nTracks what music an individual listens to, and pairs them with others based on that music. Could be potentially used as a dating app, or just meeting new friends with similar music tastes.\n\n### App Evaluation\n- **Category:** Social Networking / Music\n- **Mobile:** This app would be primarily developed for mobile but would perhaps be just as viable on a computer, such as tinder or other similar apps. Functionality wouldn't be limited to mobile devices, however mobile version could potentially have more features.\n- **Story:** Analyzes users music choices, and connects them to other users with similar choices. The user can then decide to message this person and befriend them if wanted.\n- **Market:** Any individual could choose to use this app, and to keep it a safe environment, people would be organized into age groups.\n- **Habit:** This app could be used as often or unoften as the user wanted depending on how deep their social life is, and what exactly they're looking for.\n- **Scope:** First we would start with pairing people based on music taste, then perhaps this could evolve into a music sharing application as well to broaden its usage. Large potential for use with spotify, apple music, or other music streaming applications.\n\n## Product Spec\n### 1. User Stories (Required and Optional)\n\n**Required Must-have Stories**\n\n* User logs in to access previous chats and preference settings\n* User picks what their favorite artist/genre/etc. (Think Spotify interface)\n* Matches have a chat window to get to know each other, with the ability to skip music and unmatch (Tinder Style).\n* Profile pages for each user\n* Settings (Accesibility, Notification, General, etc.)\n\n**Optional Nice-to-have Stories**\n\n* Log of past songs/people with album art covers matching\n* Page of most played songs (i.e. songs that most users are connecting through)\n* Profile Add-On: Top music choices, etc.\n* Optional Shuffle Button (i.e. random encounter/random song)\n* Listening/Encounter Queue\n\n### 2. Screen Archetypes\n\n* Login \n* Register - User signs up or logs into their account\n   * Upon Download/Reopening of the application, the user is prompted to log in to gain access to their profile information to be properly matched with another person. \n   * ...\n* Messaging Screen - Chat for users to communicate (direct 1-on-1)\n   * Upon selecting music choice users matched and message screen opens\n* Profile Screen \n   * Allows user to upload a photo and fill in information that is interesting to them and others\n* Song Selection Screen.\n   * Allows user to be able to choose their desired song, artist, genre of preference and begin listening and interacting with others.\n* Settings Screen\n   * Lets people change language, and app notification settings.\n\n### 3. Navigation\n\n**Tab Navigation** (Tab to Screen)\n\n* Music selection\n* Profile\n* Settings\n\nOptional:\n* Music/Encounter Queue\n* Discover (Top Choices)\n\n**Flow Navigation** (Screen to Screen)\n* Forced Log-in -\u003e Account creation if no log in is available\n* Music Selection (Or Queue if Optional) -\u003e Jumps to Chat\n* Profile -\u003e Text field to be modified. \n* Settings -\u003e Toggle settings\n\n## Wireframes\n\u003cimg src=\"https://i.imgur.com/9CrjH1K.jpg\" width=800\u003e\u003cbr\u003e\n\n### [BONUS] Digital Wireframes \u0026 Mockups\n\u003cimg src=\"https://i.imgur.com/lYHn37F.jpg\" height=200\u003e\n\n### [BONUS] Interactive Prototype\n\u003cimg src=\"https://i.imgur.com/AiKfE5g.gif\" width=200\u003e\n\n## Schema \n### Models\n#### Post\n\n   | Property      | Type     | Description |\n   | ------------- | -------- | ------------|\n   | objectId      | String   | unique id for the user post (default field) |\n   | author        | Pointer to User| image author |\n   | image         | File     | image that user posts |\n   | caption       | String   | image caption by author |\n   | commentsCount | Number   | number of comments that has been posted to an image |\n   | likesCount    | Number   | number of likes for the post |\n   | createdAt     | DateTime | date when post is created (default field) |\n   | updatedAt     | DateTime | date when post is last updated (default field) |\n### Networking\n#### List of network requests by screen\n   - Home Feed Screen\n      - (Read/GET) Query all posts where user is author\n         ```swift\n         let query = PFQuery(className:\"Post\")\n         query.whereKey(\"author\", equalTo: currentUser)\n         query.order(byDescending: \"createdAt\")\n         query.findObjectsInBackground { (posts: [PFObject]?, error: Error?) in\n            if let error = error { \n               print(error.localizedDescription)\n            } else if let posts = posts {\n               print(\"Successfully retrieved \\(posts.count) posts.\")\n           // TODO: Do something with posts...\n            }\n         }\n         ```\n      - (Create/POST) Create a new like on a post\n      - (Delete) Delete existing like\n      - (Create/POST) Create a new comment on a post\n      - (Delete) Delete existing comment\n   - Create Post Screen\n      - (Create/POST) Create a new post object\n   - Profile Screen\n      - (Read/GET) Query logged in user object\n      - (Update/PUT) Update user profile image\n#### [OPTIONAL:] Existing API Endpoints\n##### An API Of Ice And Fire\n- Base URL - [http://www.anapioficeandfire.com/api](http://www.anapioficeandfire.com/api)\n\n   HTTP Verb | Endpoint | Description\n   ----------|----------|------------\n    `GET`    | /characters | get all characters\n    `GET`    | /characters/?name=name | return specific character by name\n    `GET`    | /houses   | get all houses\n    `GET`    | /houses/?name=name | return specific house by name\n\n##### Game of Thrones API\n- Base URL - [https://api.got.show/api](https://api.got.show/api)\n\n   HTTP Verb | Endpoint | Description\n   ----------|----------|------------\n    `GET`    | /cities | gets all cities\n    `GET`    | /cities/byId/:id | gets specific city by :id\n    `GET`    | /continents | gets all continents\n    `GET`    | /continents/byId/:id | gets specific continent by :id\n    `GET`    | /regions | gets all regions\n    `GET`    | /regions/byId/:id | gets specific region by :id\n    `GET`    | /characters/paths/:name | gets a character's path with a given name\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcodepath%2Fme102_group_project_example","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcodepath%2Fme102_group_project_example","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcodepath%2Fme102_group_project_example/lists"}