{"adoption": {"forks": 293, "observed_at": "2026-08-28T04:03:50.783419+00:00", "stars": 1168}, "canonical_url": "https://ross.abutalabs.com/products/cent", "card": {"archived": false, "artifact_type": "application", "description": "完全免费、开源的多人协作记账 Web App | Completely free, open-source, collaborative accounting Web App", "domain": ["fintech", "developer-tools", "web-development", "data-visualization"], "enriched": true, "function": ["data-visualization", "analytics", "chatbot", "speech-recognition", "file-upload"], "health_score": 80, "homepage": "https://cent.linkai.work/", "language": "TypeScript", "license": "NOASSERTION", "license_family": "other", "maturity": "active", "member_repos": ["glink25/Cent"], "name": "glink25/Cent", "platform": ["browser", "cross-platform", "self-hosted"], "pushed_at": "2026-08-24T08:47:59+00:00", "repo": "glink25/Cent", "stars": 1168, "tags": ["expense-tracking", "personal-finance", "pwa", "github-as-database", "multi-currency", "budgeting", "collaborative-ledger", "offline-first", "typescript", "web-server", "ios"], "topics": ["accounting", "pwa"], "urls": [], "use_cases": ["track shared expenses with family or friends", "record expenses by voice with AI parsing", "manage budgets and spending analytics", "import WeChat and Alipay bills", "track spending in multiple currencies while traveling", "self-host a bookkeeping app without a server", "visualize spending locations on a map"], "what_it_is": "Cent is a free, open-source collaborative bookkeeping (expense tracking) web app built as a pure-frontend PWA that stores ledger data as JSON in users' own GitHub/Gitee repositories or WebDAV, requiring no backend server. It supports multi-user collaboration via GitHub collaborators, incremental sync, multi-currency, budgets, statistics, AI-assisted voice entry, and bill import from WeChat/Alipay.", "when_to_avoid": ["you need a traditional backend with a real database or enterprise accounting features", "you are unwilling to use GitHub/Gitee OAuth or store financial data in Git repositories", "you require a permissive license for commercial reuse (CC BY-NC-SA is non-commercial)", "you need guaranteed offline sync beyond the supported caching scenarios"], "when_to_choose": ["you want a free, serverless expense tracker with full data ownership in your own Git repos", "you need multi-user collaborative bookkeeping with version history and rollback", "you want a PWA installable on desktop plus an iOS app", "you need multi-currency support with automatic exchange rates"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/cent", "repo": "glink25/Cent", "role": "main", "score": 62}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:03:50.783419+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T06:28:47.108237+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3e9cebb37ca83188348b8b980b45735c8df8827b38152f6d1cb5de9cce192a44", "fetched_at": "2026-08-28T04:03:50.783419+00:00", "kind": "readme", "missing": false, "url": "https://github.com/glink25/Cent"}, {"content_hash": "623053831da0cf8ab4c5754e9d8aa14f70a85c779dbc1d13c521342a1f2ce76a", "fetched_at": "2026-08-29T12:34:57.530679+00:00", "kind": "homepage", "missing": false, "url": "https://cent.linkai.work/"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:03:50.783419+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T06:28:47.108237+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3e9cebb37ca83188348b8b980b45735c8df8827b38152f6d1cb5de9cce192a44", "fetched_at": "2026-08-28T04:03:50.783419+00:00", "kind": "readme", "missing": false, "url": "https://github.com/glink25/Cent"}, {"content_hash": "623053831da0cf8ab4c5754e9d8aa14f70a85c779dbc1d13c521342a1f2ce76a", "fetched_at": "2026-08-29T12:34:57.530679+00:00", "kind": "homepage", "missing": false, "url": "https://cent.linkai.work/"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T06:28:47.108237+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3e9cebb37ca83188348b8b980b45735c8df8827b38152f6d1cb5de9cce192a44", "fetched_at": "2026-08-28T04:03:50.783419+00:00", "kind": "readme", "missing": false, "url": "https://github.com/glink25/Cent"}, {"content_hash": "623053831da0cf8ab4c5754e9d8aa14f70a85c779dbc1d13c521342a1f2ce76a", "fetched_at": "2026-08-29T12:34:57.530679+00:00", "kind": "homepage", "missing": false, "url": "https://cent.linkai.work/"}], "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:50.783419+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:03:50.783419+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:03:50.783419+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T06:28:47.108237+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3e9cebb37ca83188348b8b980b45735c8df8827b38152f6d1cb5de9cce192a44", "fetched_at": "2026-08-28T04:03:50.783419+00:00", "kind": "readme", "missing": false, "url": "https://github.com/glink25/Cent"}, {"content_hash": "623053831da0cf8ab4c5754e9d8aa14f70a85c779dbc1d13c521342a1f2ce76a", "fetched_at": "2026-08-29T12:34:57.530679+00:00", "kind": "homepage", "missing": false, "url": "https://cent.linkai.work/"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:03:50.783419+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:03:50.783419+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T06:28:47.108237+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3e9cebb37ca83188348b8b980b45735c8df8827b38152f6d1cb5de9cce192a44", "fetched_at": "2026-08-28T04:03:50.783419+00:00", "kind": "readme", "missing": false, "url": "https://github.com/glink25/Cent"}, {"content_hash": "623053831da0cf8ab4c5754e9d8aa14f70a85c779dbc1d13c521342a1f2ce76a", "fetched_at": "2026-08-29T12:34:57.530679+00:00", "kind": "homepage", "missing": false, "url": "https://cent.linkai.work/"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:03:50.783419+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:03:50.783419+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:03:50.783419+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T06:28:47.108237+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3e9cebb37ca83188348b8b980b45735c8df8827b38152f6d1cb5de9cce192a44", "fetched_at": "2026-08-28T04:03:50.783419+00:00", "kind": "readme", "missing": false, "url": "https://github.com/glink25/Cent"}, {"content_hash": "623053831da0cf8ab4c5754e9d8aa14f70a85c779dbc1d13c521342a1f2ce76a", "fetched_at": "2026-08-29T12:34:57.530679+00:00", "kind": "homepage", "missing": false, "url": "https://cent.linkai.work/"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:03:50.783419+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:03:50.783419+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T06:28:47.108237+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3e9cebb37ca83188348b8b980b45735c8df8827b38152f6d1cb5de9cce192a44", "fetched_at": "2026-08-28T04:03:50.783419+00:00", "kind": "readme", "missing": false, "url": "https://github.com/glink25/Cent"}, {"content_hash": "623053831da0cf8ab4c5754e9d8aa14f70a85c779dbc1d13c521342a1f2ce76a", "fetched_at": "2026-08-29T12:34:57.530679+00:00", "kind": "homepage", "missing": false, "url": "https://cent.linkai.work/"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T06:28:47.108237+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3e9cebb37ca83188348b8b980b45735c8df8827b38152f6d1cb5de9cce192a44", "fetched_at": "2026-08-28T04:03:50.783419+00:00", "kind": "readme", "missing": false, "url": "https://github.com/glink25/Cent"}, {"content_hash": "623053831da0cf8ab4c5754e9d8aa14f70a85c779dbc1d13c521342a1f2ce76a", "fetched_at": "2026-08-29T12:34:57.530679+00:00", "kind": "homepage", "missing": false, "url": "https://cent.linkai.work/"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T06:28:47.108237+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3e9cebb37ca83188348b8b980b45735c8df8827b38152f6d1cb5de9cce192a44", "fetched_at": "2026-08-28T04:03:50.783419+00:00", "kind": "readme", "missing": false, "url": "https://github.com/glink25/Cent"}, {"content_hash": "623053831da0cf8ab4c5754e9d8aa14f70a85c779dbc1d13c521342a1f2ce76a", "fetched_at": "2026-08-29T12:34:57.530679+00:00", "kind": "homepage", "missing": false, "url": "https://cent.linkai.work/"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T06:28:47.108237+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3e9cebb37ca83188348b8b980b45735c8df8827b38152f6d1cb5de9cce192a44", "fetched_at": "2026-08-28T04:03:50.783419+00:00", "kind": "readme", "missing": false, "url": "https://github.com/glink25/Cent"}, {"content_hash": "623053831da0cf8ab4c5754e9d8aa14f70a85c779dbc1d13c521342a1f2ce76a", "fetched_at": "2026-08-29T12:34:57.530679+00:00", "kind": "homepage", "missing": false, "url": "https://cent.linkai.work/"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 99, "longevity": 26, "rhythm": 35}, "computed_at": "2026-09-02T17:46:02.011165+00:00", "flags": ["no_releases", "no_license"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 369, "days_push": 9, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 62, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}