{"adoption": {"forks": 198, "observed_at": "2026-08-28T04:05:27.912665+00:00", "stars": 1723}, "canonical_url": "https://ross.abutalabs.com/products/qualitymatters", "card": {"archived": false, "artifact_type": "learning-resource", "description": "Android Development Culture", "domain": ["mobile-development", "android-tools", "testing", "tutorials", "developer-tools"], "enriched": true, "function": ["testing", "e2e-testing", "ci-cd", "linter", "developer-tools"], "health_score": 20, "homepage": "https://artemzin.com/blog/android-development-culture-the-document-qualitymatters/", "language": "Java", "license": "Apache-2.0", "license_family": "permissive", "maturity": "maintenance", "member_repos": ["artem-zinnatullin/qualitymatters"], "name": "artem-zinnatullin/qualitymatters", "platform": ["jvm"], "pushed_at": "2022-03-09T17:01:30+00:00", "repo": "artem-zinnatullin/qualitymatters", "stars": 1723, "tags": ["android", "sample-app", "best-practices", "mvp", "espresso", "robolectric", "dagger2", "rxjava", "static-analysis", "code-coverage"], "topics": [], "urls": [], "use_cases": ["learn how to set up unit, integration, and UI tests for an Android app", "see a reference Android project with CI, lint, and code coverage configured", "study an MVP architecture example with Dagger 2 and RxJava", "find examples of Robolectric and Espresso test setups", "learn how to run static analysis tools like FindBugs, PMD, and Checkstyle on Android", "use as a template for a well-tested Android app codebase"], "what_it_is": "A sample Android application demonstrating the 'Android Development Culture' principles, showcasing CI, unit/integration/UI testing, static analysis, and code coverage in one reference project. It is primarily an educational codebase showing how to structure an Android app with MVP, RxJava, Dagger 2, and Retrofit 2.", "when_to_avoid": ["you need a production-ready app or maintained library", "you use modern Android stacks like Kotlin, Jetpack Compose, or MVVM", "you need up-to-date dependency versions or active support"], "when_to_choose": ["you want a real-world example of Android testing and quality tooling", "you are learning MVP architecture with Dagger 2 and RxJava", "you need reference configurations for Travis CI, Robolectric, Espresso, or Android Lint"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/qualitymatters", "repo": "artem-zinnatullin/qualitymatters", "role": "main", "score": 32}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:05:27.912665+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T03:33:56.753656+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2aad5aeb23c1ac9d6a844bfb90e17f1a1a97168903c78fcb7e9e58452a99a421", "fetched_at": "2026-08-28T04:05:27.912665+00:00", "kind": "readme", "missing": false, "url": "https://github.com/artem-zinnatullin/qualitymatters"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:05:27.912665+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T03:33:56.753656+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2aad5aeb23c1ac9d6a844bfb90e17f1a1a97168903c78fcb7e9e58452a99a421", "fetched_at": "2026-08-28T04:05:27.912665+00:00", "kind": "readme", "missing": false, "url": "https://github.com/artem-zinnatullin/qualitymatters"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T03:33:56.753656+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2aad5aeb23c1ac9d6a844bfb90e17f1a1a97168903c78fcb7e9e58452a99a421", "fetched_at": "2026-08-28T04:05:27.912665+00:00", "kind": "readme", "missing": false, "url": "https://github.com/artem-zinnatullin/qualitymatters"}], "taxonomy_version": 1}, "health_score": {"inputs": ["days_since_push", "days_since_release", "archived"], "kind": "computed", "method": "health_v1"}, "homepage": {"kind": "observed", "observed_at": "2026-08-28T04:05:27.912665+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:05:27.912665+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:05:27.912665+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T03:33:56.753656+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2aad5aeb23c1ac9d6a844bfb90e17f1a1a97168903c78fcb7e9e58452a99a421", "fetched_at": "2026-08-28T04:05:27.912665+00:00", "kind": "readme", "missing": false, "url": "https://github.com/artem-zinnatullin/qualitymatters"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:05:27.912665+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:05:27.912665+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T03:33:56.753656+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2aad5aeb23c1ac9d6a844bfb90e17f1a1a97168903c78fcb7e9e58452a99a421", "fetched_at": "2026-08-28T04:05:27.912665+00:00", "kind": "readme", "missing": false, "url": "https://github.com/artem-zinnatullin/qualitymatters"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:05:27.912665+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:05:27.912665+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:05:27.912665+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T03:33:56.753656+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2aad5aeb23c1ac9d6a844bfb90e17f1a1a97168903c78fcb7e9e58452a99a421", "fetched_at": "2026-08-28T04:05:27.912665+00:00", "kind": "readme", "missing": false, "url": "https://github.com/artem-zinnatullin/qualitymatters"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:05:27.912665+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:05:27.912665+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T03:33:56.753656+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2aad5aeb23c1ac9d6a844bfb90e17f1a1a97168903c78fcb7e9e58452a99a421", "fetched_at": "2026-08-28T04:05:27.912665+00:00", "kind": "readme", "missing": false, "url": "https://github.com/artem-zinnatullin/qualitymatters"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T03:33:56.753656+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2aad5aeb23c1ac9d6a844bfb90e17f1a1a97168903c78fcb7e9e58452a99a421", "fetched_at": "2026-08-28T04:05:27.912665+00:00", "kind": "readme", "missing": false, "url": "https://github.com/artem-zinnatullin/qualitymatters"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T03:33:56.753656+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2aad5aeb23c1ac9d6a844bfb90e17f1a1a97168903c78fcb7e9e58452a99a421", "fetched_at": "2026-08-28T04:05:27.912665+00:00", "kind": "readme", "missing": false, "url": "https://github.com/artem-zinnatullin/qualitymatters"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T03:33:56.753656+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2aad5aeb23c1ac9d6a844bfb90e17f1a1a97168903c78fcb7e9e58452a99a421", "fetched_at": "2026-08-28T04:05:27.912665+00:00", "kind": "readme", "missing": false, "url": "https://github.com/artem-zinnatullin/qualitymatters"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 0, "longevity": 100, "rhythm": 35}, "computed_at": "2026-09-02T17:46:02.011165+00:00", "flags": ["no_releases"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 3937, "days_push": 1638, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 32, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}