{"adoption": {"forks": 118, "observed_at": "2026-08-28T04:05:12.840826+00:00", "stars": 1624}, "canonical_url": "https://ross.abutalabs.com/products/openreads", "card": {"archived": false, "artifact_type": "application", "description": "A mobile books tracker written in Flutter that respects your privacy.", "domain": ["mobile-development", "developer-tools", "education", "privacy", "cross-platform"], "enriched": true, "function": ["gui", "search-engine", "data-visualization"], "health_score": 91, "homepage": null, "language": "Dart", "license": "GPL-2.0", "license_family": "copyleft", "maturity": "active", "member_repos": ["mateusz-bak/openreads"], "name": "mateusz-bak/openreads", "platform": ["cross-platform"], "pushed_at": "2026-07-20T21:01:26+00:00", "repo": "mateusz-bak/openreads", "stars": 1624, "tags": ["books-tracker", "flutter-app", "reading-list", "openlibrary", "barcode-scanner", "offline-first", "android", "ios", "mobile"], "topics": ["android", "books", "flutter", "mobile", "flutter-app", "flutter-apps", "open-source", "opensource", "openlibrary", "privacy"], "urls": [], "use_cases": ["track books i'm reading on my phone", "keep a private reading list without an account", "scan a book barcode to add it to my library", "see statistics about books i finished this year", "organize books with custom tags and filters", "find book details from the open library database"], "what_it_is": "Openreads is a privacy-respecting, open source mobile app for tracking books you have finished, are reading, want to read, or abandoned. It is written in Flutter and available for Android and iOS, with book lookup via Open Library, barcode scanning, manual entry, tags, and reading statistics.", "when_to_avoid": ["you need a desktop or web app", "you want social features like sharing reviews with friends", "you require syncing with Goodreads or StoryGraph"], "when_to_choose": ["you want a free, open source, privacy-friendly book tracker on Android or iOS", "you prefer local data without ads or tracking", "you need finished/reading/want-to-read/did-not-finish lists with tags and stats"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/openreads", "repo": "mateusz-bak/openreads", "role": "main", "score": 78}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:05:12.840826+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T03:48:47.367434+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a9a663c3a0e537db0e5c2c772d855d6f44844fff3e3d86108dcc8b8f8f6fd747", "fetched_at": "2026-08-28T04:05:12.840826+00:00", "kind": "readme", "missing": false, "url": "https://github.com/mateusz-bak/openreads"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:05:12.840826+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T03:48:47.367434+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a9a663c3a0e537db0e5c2c772d855d6f44844fff3e3d86108dcc8b8f8f6fd747", "fetched_at": "2026-08-28T04:05:12.840826+00:00", "kind": "readme", "missing": false, "url": "https://github.com/mateusz-bak/openreads"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T03:48:47.367434+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a9a663c3a0e537db0e5c2c772d855d6f44844fff3e3d86108dcc8b8f8f6fd747", "fetched_at": "2026-08-28T04:05:12.840826+00:00", "kind": "readme", "missing": false, "url": "https://github.com/mateusz-bak/openreads"}], "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:12.840826+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:05:12.840826+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:05:12.840826+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T03:48:47.367434+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a9a663c3a0e537db0e5c2c772d855d6f44844fff3e3d86108dcc8b8f8f6fd747", "fetched_at": "2026-08-28T04:05:12.840826+00:00", "kind": "readme", "missing": false, "url": "https://github.com/mateusz-bak/openreads"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:05:12.840826+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:05:12.840826+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T03:48:47.367434+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a9a663c3a0e537db0e5c2c772d855d6f44844fff3e3d86108dcc8b8f8f6fd747", "fetched_at": "2026-08-28T04:05:12.840826+00:00", "kind": "readme", "missing": false, "url": "https://github.com/mateusz-bak/openreads"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:05:12.840826+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:05:12.840826+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:05:12.840826+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T03:48:47.367434+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a9a663c3a0e537db0e5c2c772d855d6f44844fff3e3d86108dcc8b8f8f6fd747", "fetched_at": "2026-08-28T04:05:12.840826+00:00", "kind": "readme", "missing": false, "url": "https://github.com/mateusz-bak/openreads"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:05:12.840826+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:05:12.840826+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T03:48:47.367434+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a9a663c3a0e537db0e5c2c772d855d6f44844fff3e3d86108dcc8b8f8f6fd747", "fetched_at": "2026-08-28T04:05:12.840826+00:00", "kind": "readme", "missing": false, "url": "https://github.com/mateusz-bak/openreads"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T03:48:47.367434+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a9a663c3a0e537db0e5c2c772d855d6f44844fff3e3d86108dcc8b8f8f6fd747", "fetched_at": "2026-08-28T04:05:12.840826+00:00", "kind": "readme", "missing": false, "url": "https://github.com/mateusz-bak/openreads"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T03:48:47.367434+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a9a663c3a0e537db0e5c2c772d855d6f44844fff3e3d86108dcc8b8f8f6fd747", "fetched_at": "2026-08-28T04:05:12.840826+00:00", "kind": "readme", "missing": false, "url": "https://github.com/mateusz-bak/openreads"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T03:48:47.367434+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a9a663c3a0e537db0e5c2c772d855d6f44844fff3e3d86108dcc8b8f8f6fd747", "fetched_at": "2026-08-28T04:05:12.840826+00:00", "kind": "readme", "missing": false, "url": "https://github.com/mateusz-bak/openreads"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 93, "longevity": 100, "rhythm": 47}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": [], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 1961, "days_push": 44, "days_rel": 358, "gap_med": 10, "n_releases_24m": 4}, "score": 78, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}