{"adoption": {"forks": 302, "observed_at": "2026-08-28T04:09:15.807333+00:00", "stars": 5338}, "canonical_url": "https://ross.abutalabs.com/products/bulletinboard", "card": {"archived": false, "artifact_type": "library", "description": "General-purpose contextual cards for iOS", "domain": ["mobile-development", "developer-tools"], "enriched": true, "function": ["ui-components", "mobile-framework"], "health_score": 20, "homepage": null, "language": "Swift", "license": "MIT", "license_family": "permissive", "maturity": "maintenance", "member_repos": ["alexaubry/BulletinBoard"], "name": "alexaubry/BulletinBoard", "platform": [], "pushed_at": "2022-05-16T18:03:28+00:00", "repo": "alexaubry/BulletinBoard", "stars": 5338, "tags": ["bottom-cards", "onboarding", "contextual-ui", "swift", "objective-c", "accessibility", "ios", "mobile"], "topics": ["ios", "card", "onboarding", "configuration", "swift"], "urls": [], "use_cases": ["show onboarding screens as bottom cards in an iOS app", "display quick configuration prompts like Apple's AirPods pairing card", "present contextual user interactions at the bottom of the screen", "build custom card pages for user setup flows", "show accessible bottom sheets with VoiceOver support"], "what_it_is": "BulletinBoard is an iOS library that generates and manages contextual cards displayed at the bottom of the screen, mimicking the style of Apple's system cards for AirPods or HomePod configuration. It supports Swift and Objective-C, works on iPhone and iPad, and includes built-in accessibility support.", "when_to_avoid": ["you need cross-platform cards beyond iOS", "you want a fully customizable bottom sheet library with drag gestures", "the project requires actively maintained dependencies, as the latest release dates to 2022"], "when_to_choose": ["you need iOS bottom-card UI similar to Apple's system configuration cards", "you want a Swift or Objective-C library with accessibility support out of the box", "you need onboarding or quick-interaction cards on iPhone and iPad"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/bulletinboard", "repo": "alexaubry/BulletinBoard", "role": "main", "score": 23}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:09:15.807333+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-29T17:58:50.795041+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "6acd9838cd9339e35e9742477dd4a5b2f9387cd0a2812563a25cb76fb15d7516", "fetched_at": "2026-08-28T04:09:15.807333+00:00", "kind": "readme", "missing": false, "url": "https://github.com/alexaubry/BulletinBoard"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:09:15.807333+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-29T17:58:50.795041+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "6acd9838cd9339e35e9742477dd4a5b2f9387cd0a2812563a25cb76fb15d7516", "fetched_at": "2026-08-28T04:09:15.807333+00:00", "kind": "readme", "missing": false, "url": "https://github.com/alexaubry/BulletinBoard"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-29T17:58:50.795041+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "6acd9838cd9339e35e9742477dd4a5b2f9387cd0a2812563a25cb76fb15d7516", "fetched_at": "2026-08-28T04:09:15.807333+00:00", "kind": "readme", "missing": false, "url": "https://github.com/alexaubry/BulletinBoard"}], "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:15.807333+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:09:15.807333+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:09:15.807333+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-29T17:58:50.795041+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "6acd9838cd9339e35e9742477dd4a5b2f9387cd0a2812563a25cb76fb15d7516", "fetched_at": "2026-08-28T04:09:15.807333+00:00", "kind": "readme", "missing": false, "url": "https://github.com/alexaubry/BulletinBoard"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:09:15.807333+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:09:15.807333+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-29T17:58:50.795041+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "6acd9838cd9339e35e9742477dd4a5b2f9387cd0a2812563a25cb76fb15d7516", "fetched_at": "2026-08-28T04:09:15.807333+00:00", "kind": "readme", "missing": false, "url": "https://github.com/alexaubry/BulletinBoard"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:09:15.807333+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:09:15.807333+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:09:15.807333+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-29T17:58:50.795041+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "6acd9838cd9339e35e9742477dd4a5b2f9387cd0a2812563a25cb76fb15d7516", "fetched_at": "2026-08-28T04:09:15.807333+00:00", "kind": "readme", "missing": false, "url": "https://github.com/alexaubry/BulletinBoard"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:09:15.807333+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:09:15.807333+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-29T17:58:50.795041+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "6acd9838cd9339e35e9742477dd4a5b2f9387cd0a2812563a25cb76fb15d7516", "fetched_at": "2026-08-28T04:09:15.807333+00:00", "kind": "readme", "missing": false, "url": "https://github.com/alexaubry/BulletinBoard"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-29T17:58:50.795041+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "6acd9838cd9339e35e9742477dd4a5b2f9387cd0a2812563a25cb76fb15d7516", "fetched_at": "2026-08-28T04:09:15.807333+00:00", "kind": "readme", "missing": false, "url": "https://github.com/alexaubry/BulletinBoard"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-29T17:58:50.795041+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "6acd9838cd9339e35e9742477dd4a5b2f9387cd0a2812563a25cb76fb15d7516", "fetched_at": "2026-08-28T04:09:15.807333+00:00", "kind": "readme", "missing": false, "url": "https://github.com/alexaubry/BulletinBoard"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-29T17:58:50.795041+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "6acd9838cd9339e35e9742477dd4a5b2f9387cd0a2812563a25cb76fb15d7516", "fetched_at": "2026-08-28T04:09:15.807333+00:00", "kind": "readme", "missing": false, "url": "https://github.com/alexaubry/BulletinBoard"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 0, "longevity": 100, "rhythm": 8}, "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": 3263, "days_push": 1570, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 23, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}