{"adoption": {"forks": 197, "observed_at": "2026-08-28T04:03:28.887226+00:00", "stars": 1073}, "canonical_url": "https://ross.abutalabs.com/products/qs_ledger", "card": {"archived": false, "artifact_type": "application", "description": "Quantified Self Personal Data Aggregator and Data Analysis", "domain": ["data-science", "data-visualization", "developer-tools", "healthcare", "self-hosted"], "enriched": true, "function": ["data-science", "data-visualization", "etl", "analytics", "charts"], "health_score": 20, "homepage": null, "language": "Jupyter Notebook", "license": "MIT", "license_family": "permissive", "maturity": "maintenance", "member_repos": ["markwk/qs_ledger"], "name": "markwk/qs_ledger", "platform": ["python", "cross-platform", "cli"], "pushed_at": "2022-08-18T07:50:56+00:00", "repo": "markwk/qs_ledger", "stars": 1073, "tags": ["quantified-self", "personal-data", "self-tracking", "jupyter-notebooks", "wearables", "life-logging", "data-aggregation"], "topics": ["quantified-self", "personal-data", "data-analysis", "data-visualization", "apple-health", "lastfm", "fitbit", "rescuetime", "todoist", "toggl", "self-tracking", "strava", "instapaper", "pocket", "habitica", "kindle", "kindle-highlights"], "urls": [], "use_cases": ["download my fitbit and apple health data locally", "analyze my kindle highlights and reading stats", "build a personal data dashboard from rescue time and toggl", "visualize my sleep and heart rate trends", "aggregate data from multiple self-tracking services", "analyze my goodreads reading history", "export and analyze my lastfm listening data"], "what_it_is": "A personal data aggregator and analysis toolkit for quantified self enthusiasts, written in Python and distributed as Jupyter Notebooks. It downloads data from tracking services like Apple Health, Fitbit, Last.fm, RescueTime, and Todoist, then provides analysis and visualization notebooks for each.", "when_to_avoid": ["you need a polished turnkey dashboard app with no coding", "you need a service not on the integration list", "you want actively developed features - the project is in maintenance mode", "you need a web or mobile interface"], "when_to_choose": ["you want to own and analyze your personal tracking data locally", "you're comfortable with Python and Jupyter notebooks", "you use several of the supported services like Fitbit, RescueTime, or Kindle", "you want a starting point for personal data science and visualization"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/qs_ledger", "repo": "markwk/qs_ledger", "role": "main", "score": 32}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:03:28.887226+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T06:53:37.714462+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2510da059ba5b20b73d19139867ceabebbba40b9bcb1446e0e2b1f1bdf1d9aaf", "fetched_at": "2026-08-28T04:03:28.887226+00:00", "kind": "readme", "missing": false, "url": "https://github.com/markwk/qs_ledger"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:03:28.887226+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T06:53:37.714462+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2510da059ba5b20b73d19139867ceabebbba40b9bcb1446e0e2b1f1bdf1d9aaf", "fetched_at": "2026-08-28T04:03:28.887226+00:00", "kind": "readme", "missing": false, "url": "https://github.com/markwk/qs_ledger"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T06:53:37.714462+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2510da059ba5b20b73d19139867ceabebbba40b9bcb1446e0e2b1f1bdf1d9aaf", "fetched_at": "2026-08-28T04:03:28.887226+00:00", "kind": "readme", "missing": false, "url": "https://github.com/markwk/qs_ledger"}], "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:03:28.887226+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:03:28.887226+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:03:28.887226+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T06:53:37.714462+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2510da059ba5b20b73d19139867ceabebbba40b9bcb1446e0e2b1f1bdf1d9aaf", "fetched_at": "2026-08-28T04:03:28.887226+00:00", "kind": "readme", "missing": false, "url": "https://github.com/markwk/qs_ledger"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:03:28.887226+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:03:28.887226+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T06:53:37.714462+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2510da059ba5b20b73d19139867ceabebbba40b9bcb1446e0e2b1f1bdf1d9aaf", "fetched_at": "2026-08-28T04:03:28.887226+00:00", "kind": "readme", "missing": false, "url": "https://github.com/markwk/qs_ledger"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:03:28.887226+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:03:28.887226+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:03:28.887226+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T06:53:37.714462+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2510da059ba5b20b73d19139867ceabebbba40b9bcb1446e0e2b1f1bdf1d9aaf", "fetched_at": "2026-08-28T04:03:28.887226+00:00", "kind": "readme", "missing": false, "url": "https://github.com/markwk/qs_ledger"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:03:28.887226+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:03:28.887226+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T06:53:37.714462+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2510da059ba5b20b73d19139867ceabebbba40b9bcb1446e0e2b1f1bdf1d9aaf", "fetched_at": "2026-08-28T04:03:28.887226+00:00", "kind": "readme", "missing": false, "url": "https://github.com/markwk/qs_ledger"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T06:53:37.714462+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2510da059ba5b20b73d19139867ceabebbba40b9bcb1446e0e2b1f1bdf1d9aaf", "fetched_at": "2026-08-28T04:03:28.887226+00:00", "kind": "readme", "missing": false, "url": "https://github.com/markwk/qs_ledger"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T06:53:37.714462+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2510da059ba5b20b73d19139867ceabebbba40b9bcb1446e0e2b1f1bdf1d9aaf", "fetched_at": "2026-08-28T04:03:28.887226+00:00", "kind": "readme", "missing": false, "url": "https://github.com/markwk/qs_ledger"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T06:53:37.714462+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2510da059ba5b20b73d19139867ceabebbba40b9bcb1446e0e2b1f1bdf1d9aaf", "fetched_at": "2026-08-28T04:03:28.887226+00:00", "kind": "readme", "missing": false, "url": "https://github.com/markwk/qs_ledger"}], "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": 3024, "days_push": 1476, "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}}