{"adoption": {"forks": 514, "observed_at": "2026-08-28T04:09:04.853896+00:00", "stars": 5022}, "canonical_url": "https://ross.abutalabs.com/products/pushdeer", "card": {"archived": false, "artifact_type": "service", "description": "开放源码的无App推送服务，iOS14+扫码即用。亦支持快应用/iOS和Mac客户端、Android客户端、自制设备", "domain": ["self-hosted", "developer-tools", "iot"], "enriched": true, "function": ["webhook", "http-server", "mobile-framework"], "health_score": 57, "homepage": null, "language": "C", "license": "NOASSERTION", "license_family": "other", "maturity": "abandoned", "member_repos": ["easychen/pushdeer"], "name": "easychen/pushdeer", "platform": ["self-hosted"], "pushed_at": "2026-01-16T01:37:41+00:00", "repo": "easychen/pushdeer", "stars": 5022, "tags": ["push-notifications", "app-clip", "quickapp", "esp8266", "notification-service", "message-push", "messaging", "ios", "macos", "android", "docker", "web-server"], "topics": ["app", "push", "clip", "notification-service"], "urls": [], "use_cases": ["send push notifications to my phone from scripts", "self-hosted push notification service", "notify me when a long task finishes", "push alerts to a diy esp32 device", "send markdown messages to iphone without installing an app", "webhook notifications to mobile devices"], "what_it_is": "PushDeer is an open-source, self-hostable push notification service that lets users send messages to their devices via a simple HTTP API, with an app-less iOS App Clip option (iOS 14+), plus iOS/Mac/Android clients and a DIY ESP8266/ESP32 hardware device. It is no longer maintained; the official hosted API still works but clients and API receive no new features.", "when_to_avoid": ["you need actively maintained software - the project is officially unmaintained", "you rely on the official Android build, which no longer works due to API permission revocation", "you don't want to deal with yearly push certificate renewal on self-hosted servers"], "when_to_choose": ["you need a simple HTTP-based push channel to iOS/Mac/Android devices", "you want an app-less option via iOS App Clip", "you want to push alerts to a custom ESP8266/ESP32 device"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/pushdeer", "repo": "easychen/pushdeer", "role": "main", "score": 51}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:09:04.853896+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-29T18:17:29.350420+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e87967a9e3e8146b3e68707354c000dc0d425f85abdf6814a653e1f6cff217d6", "fetched_at": "2026-08-28T04:09:04.853896+00:00", "kind": "readme", "missing": false, "url": "https://github.com/easychen/pushdeer"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:09:04.853896+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-29T18:17:29.350420+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e87967a9e3e8146b3e68707354c000dc0d425f85abdf6814a653e1f6cff217d6", "fetched_at": "2026-08-28T04:09:04.853896+00:00", "kind": "readme", "missing": false, "url": "https://github.com/easychen/pushdeer"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-29T18:17:29.350420+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e87967a9e3e8146b3e68707354c000dc0d425f85abdf6814a653e1f6cff217d6", "fetched_at": "2026-08-28T04:09:04.853896+00:00", "kind": "readme", "missing": false, "url": "https://github.com/easychen/pushdeer"}], "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:09:04.853896+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:09:04.853896+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:09:04.853896+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-29T18:17:29.350420+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e87967a9e3e8146b3e68707354c000dc0d425f85abdf6814a653e1f6cff217d6", "fetched_at": "2026-08-28T04:09:04.853896+00:00", "kind": "readme", "missing": false, "url": "https://github.com/easychen/pushdeer"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:09:04.853896+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:09:04.853896+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-29T18:17:29.350420+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e87967a9e3e8146b3e68707354c000dc0d425f85abdf6814a653e1f6cff217d6", "fetched_at": "2026-08-28T04:09:04.853896+00:00", "kind": "readme", "missing": false, "url": "https://github.com/easychen/pushdeer"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:09:04.853896+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:09:04.853896+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:09:04.853896+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-29T18:17:29.350420+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e87967a9e3e8146b3e68707354c000dc0d425f85abdf6814a653e1f6cff217d6", "fetched_at": "2026-08-28T04:09:04.853896+00:00", "kind": "readme", "missing": false, "url": "https://github.com/easychen/pushdeer"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:09:04.853896+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:09:04.853896+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-29T18:17:29.350420+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e87967a9e3e8146b3e68707354c000dc0d425f85abdf6814a653e1f6cff217d6", "fetched_at": "2026-08-28T04:09:04.853896+00:00", "kind": "readme", "missing": false, "url": "https://github.com/easychen/pushdeer"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-29T18:17:29.350420+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e87967a9e3e8146b3e68707354c000dc0d425f85abdf6814a653e1f6cff217d6", "fetched_at": "2026-08-28T04:09:04.853896+00:00", "kind": "readme", "missing": false, "url": "https://github.com/easychen/pushdeer"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-29T18:17:29.350420+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e87967a9e3e8146b3e68707354c000dc0d425f85abdf6814a653e1f6cff217d6", "fetched_at": "2026-08-28T04:09:04.853896+00:00", "kind": "readme", "missing": false, "url": "https://github.com/easychen/pushdeer"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-29T18:17:29.350420+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e87967a9e3e8146b3e68707354c000dc0d425f85abdf6814a653e1f6cff217d6", "fetched_at": "2026-08-28T04:09:04.853896+00:00", "kind": "readme", "missing": false, "url": "https://github.com/easychen/pushdeer"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 62, "longevity": 100, "rhythm": 8}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": ["no_license"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 1721, "days_push": 230, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 51, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}