{"id":13428137,"url":"https://github.com/ZacSweers/CatchUp","last_synced_at":"2025-03-16T01:32:06.428Z","repository":{"id":37334195,"uuid":"57029623","full_name":"ZacSweers/CatchUp","owner":"ZacSweers","description":"An app for catching up on things.","archived":false,"fork":false,"pushed_at":"2025-03-14T03:18:48.000Z","size":18418,"stargazers_count":2009,"open_issues_count":37,"forks_count":202,"subscribers_count":46,"default_branch":"main","last_synced_at":"2025-03-14T18:56:47.241Z","etag":null,"topics":["android","anvil","catchup","circuit","coroutines","dagger","dribbble","github","graphql","hackernews","kotlin","medium","moshi","producthunt","reddit","sqldelight"],"latest_commit_sha":null,"homepage":"","language":"Kotlin","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/ZacSweers.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE.txt","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":"2016-04-25T09:33:27.000Z","updated_at":"2025-03-10T19:54:05.000Z","dependencies_parsed_at":"2024-02-01T17:10:06.888Z","dependency_job_id":"d9958451-b071-4103-b0b5-43dc1a1bd349","html_url":"https://github.com/ZacSweers/CatchUp","commit_stats":{"total_commits":3188,"total_committers":17,"mean_commits":"187.52941176470588","dds":0.3958594730238394,"last_synced_commit":"427603e900062b2085210cab7e50d9dce766dd1e"},"previous_names":["hzsweers/catchup"],"tags_count":12,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ZacSweers%2FCatchUp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ZacSweers%2FCatchUp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ZacSweers%2FCatchUp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ZacSweers%2FCatchUp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ZacSweers","download_url":"https://codeload.github.com/ZacSweers/CatchUp/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243814900,"owners_count":20352037,"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":["android","anvil","catchup","circuit","coroutines","dagger","dribbble","github","graphql","hackernews","kotlin","medium","moshi","producthunt","reddit","sqldelight"],"created_at":"2024-07-31T01:00:47.174Z","updated_at":"2025-03-16T01:32:06.389Z","avatar_url":"https://github.com/ZacSweers.png","language":"Kotlin","readme":"\u003cp\u003e\n\u003cimg src=\"https://raw.githubusercontent.com/ZacSweers/CatchUp/main/app-scaffold/src/main/play/listings/en-US/feature-graphic/feature.png\"/\u003e\n\u003c/p\u003e\n\nCatchUp\n=======\n\nAn app for catching up on things.\n\nhttps://www.zacsweers.dev/catching-up-on-catchup-introduction/\n\n## Motivations\n\nThere's a lot of services I like reading up on throughout the day. Most of these services have\ndedicated apps for consuming them, but often times I just want to skim the front page and only deep\ndive occasionally. Enter CatchUp: a high level presentation of the \"front page\" of several services\nin short form, and intelligent deeplinking into dedicated apps if you want to go further.\n\nCatchUp is not an all-purpose client for each of these services, just the concierge for at-a-glance\ndetails and router for getting on your way. It does not support login for any service, it does not\nsupport customization/filtering of their feed. CatchUp is dumb, and you should use one of the many\ngreat dedicated apps for this if you want more integration features.\n\nCatchUp is also very much a testing ground for things I personally dive into, from architecture,\nlibraries, patterns, API quirks, and more. It's been a very fun project to spike test new things.\n\n## Features\n\n- Multiple services\n- Hacker News\n- Reddit\n- Medium\n- Product Hunt\n- Slashdot\n- Designer News\n- Dribbble\n- GitHub\n- Infinite scrolling on supported services\n- Pleasant, simple, consistent UI for across services\n- Night mode\n- Smart deeplinking into dedicated apps\n\n## Technologies\n\n- Kotlin\n- Kotlin Coroutines\n- Debugging tooling as a first class citizen in the debug build\n- Leak Canary, Scalpel, debug drawer, Flipper, bug reporting, the works\n- AndroidX/Jetpack\n- Dagger 2 + Anvil\n- One of the more interesting parts of CatchUp is that its service architecture is a Dagger-powered plugin system\n- SqlDelight\n- Firebase\n- Coil\n- Apollo GraphQL\n- Standard Square buffet of Okio/OkHttp 3/Retrofit 2/Moshi\n- Inspector\n- KSP\n\nThere's a lot of neat/interesting little tidbits in the CatchUp source code that I plan to write a\nmini blog series about. Each service has its own nuances that make them unique to work with in code.\n\n## Testing\n\nWhile this is a personal pet project, extensive tests can be found [here](https://youtu.be/oHg5SJYRHA0).\n\n## Influences\n\nThis app owes a lot of its inspiration, implementation details, and general inner workings to the\nwork of others. Particularly:\n- [Nick Butcher](https://twitter.com/@crafty) and his [Plaid](https://github.com/nickbutcher/plaid) app\n- [Jake Wharton](https://twitter.com/@jakewharton) and his [u2020](https://github.com/jakewharton/u2020) demo app\n\n## Development\n\nIf you'd like to build CatchUp locally, you _should_ be able to just clone and build with no\nissues. The project requires whatever JDK version is currently defined `libs.versions.toml`.\n\nCatchUp tends to keep up with Android Studio canaries, so you may have to use a canary version.\nCheck the AGP version in `libs.versions.toml`.\n\nIf you want to build with working services, some require API keys. See the\n[wiki](https://github.com/ZacSweers/CatchUp/wiki/Authentication-information) for more details on\nwhich services require keys.\n\nBug fixes are always welcome. Tests are too if you're into that kinda thing, but I'm not actively\ntrying to make this project a shining icon of TDD. For new features or otherwise significant work,\nplease discuss in an issue first.\n\nLicense\n-------\n\n\tCopyright (C) 2017 Zac Sweers\n\n\tLicensed under the Apache License, Version 2.0 (the \"License\");\n\tyou may not use this file except in compliance with the License.\n\tYou may obtain a copy of the License at\n\n\thttp://www.apache.org/licenses/LICENSE-2.0\n\n\tUnless required by applicable law or agreed to in writing, software\n\tdistributed under the License is distributed on an \"AS IS\" BASIS,\n\tWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n\tSee the License for the specific language governing permissions and\n\tlimitations under the License.\n","funding_links":[],"categories":["Libraries","Applications","Kotlin"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FZacSweers%2FCatchUp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FZacSweers%2FCatchUp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FZacSweers%2FCatchUp/lists"}