{"adoption": {"forks": 74, "observed_at": "2026-08-28T04:03:25.594940+00:00", "stars": 1059}, "canonical_url": "https://ross.abutalabs.com/products/bluehood", "card": {"archived": false, "artifact_type": "application", "description": "Monitor your local neighbourhood's bluetooth activity", "domain": ["security", "privacy", "monitoring", "iot", "developer-tools"], "enriched": true, "function": ["monitoring", "security", "analytics", "web-framework"], "health_score": 97, "homepage": null, "language": "Python", "license": "MIT", "license_family": "permissive", "maturity": "experimental", "member_repos": ["dannymcc/bluehood"], "name": "dannymcc/bluehood", "platform": ["python", "iot", "self-hosted"], "pushed_at": "2026-08-12T12:49:50+00:00", "repo": "dannymcc/bluehood", "stars": 1059, "tags": ["bluetooth", "ble", "bluetooth-scanning", "device-tracking", "privacy-awareness", "flask", "raspberry-pi", "passive-scanning", "mac-vendor-lookup", "presence-detection", "linux", "web-server"], "topics": ["ble", "bluetooth", "flask", "monitoring", "privacy", "python", "raspberry-pi", "security"], "urls": [], "use_cases": ["monitor bluetooth devices in my neighborhood", "track when specific BLE devices arrive or leave", "detect privacy risks from nearby bluetooth devices", "analyze presence patterns of bluetooth devices over time", "identify unknown devices by MAC vendor and service UUIDs", "get notified when a watched device is nearby", "run a bluetooth scanner on a raspberry pi"], "what_it_is": "Bluehood is a self-hosted Bluetooth scanner that passively detects nearby BLE and Classic Bluetooth devices, identifies them by vendor and service UUIDs, and tracks their presence patterns over time. It provides a Flask-based web dashboard with heatmaps, device grouping, and push notifications, built as an educational tool to raise awareness of Bluetooth privacy risks.", "when_to_avoid": ["you need production-grade, stable software - it's explicitly alpha and may break", "you want active Bluetooth exploitation or pairing attacks - Bluehood only passively observes", "you need commercial-grade asset tracking or indoor positioning accuracy"], "when_to_choose": ["you want a self-hosted, passive Bluetooth/BLE presence monitor with a web dashboard", "you're exploring Bluetooth privacy risks or demonstrating device tracking for education", "you run a Raspberry Pi or always-on Linux box near an area of interest"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/bluehood", "repo": "dannymcc/bluehood", "role": "main", "score": 77}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:03:25.594940+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T06:57:13.371008+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "20a8d6b99e604d1cdbc4b9b36189c4c7365ede424b33e3a4b931610062b3d4e4", "fetched_at": "2026-08-28T04:03:25.594940+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dannymcc/bluehood"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:03:25.594940+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T06:57:13.371008+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "20a8d6b99e604d1cdbc4b9b36189c4c7365ede424b33e3a4b931610062b3d4e4", "fetched_at": "2026-08-28T04:03:25.594940+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dannymcc/bluehood"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T06:57:13.371008+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "20a8d6b99e604d1cdbc4b9b36189c4c7365ede424b33e3a4b931610062b3d4e4", "fetched_at": "2026-08-28T04:03:25.594940+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dannymcc/bluehood"}], "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:25.594940+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:03:25.594940+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:03:25.594940+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T06:57:13.371008+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "20a8d6b99e604d1cdbc4b9b36189c4c7365ede424b33e3a4b931610062b3d4e4", "fetched_at": "2026-08-28T04:03:25.594940+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dannymcc/bluehood"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:03:25.594940+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:03:25.594940+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T06:57:13.371008+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "20a8d6b99e604d1cdbc4b9b36189c4c7365ede424b33e3a4b931610062b3d4e4", "fetched_at": "2026-08-28T04:03:25.594940+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dannymcc/bluehood"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:03:25.594940+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:03:25.594940+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:03:25.594940+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T06:57:13.371008+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "20a8d6b99e604d1cdbc4b9b36189c4c7365ede424b33e3a4b931610062b3d4e4", "fetched_at": "2026-08-28T04:03:25.594940+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dannymcc/bluehood"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:03:25.594940+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:03:25.594940+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T06:57:13.371008+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "20a8d6b99e604d1cdbc4b9b36189c4c7365ede424b33e3a4b931610062b3d4e4", "fetched_at": "2026-08-28T04:03:25.594940+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dannymcc/bluehood"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T06:57:13.371008+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "20a8d6b99e604d1cdbc4b9b36189c4c7365ede424b33e3a4b931610062b3d4e4", "fetched_at": "2026-08-28T04:03:25.594940+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dannymcc/bluehood"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T06:57:13.371008+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "20a8d6b99e604d1cdbc4b9b36189c4c7365ede424b33e3a4b931610062b3d4e4", "fetched_at": "2026-08-28T04:03:25.594940+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dannymcc/bluehood"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T06:57:13.371008+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "20a8d6b99e604d1cdbc4b9b36189c4c7365ede424b33e3a4b931610062b3d4e4", "fetched_at": "2026-08-28T04:03:25.594940+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dannymcc/bluehood"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 97, "longevity": 16, "rhythm": 87}, "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": 228, "days_push": 21, "days_rel": 84, "gap_med": 0.0, "n_releases_24m": 13}, "score": 77, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}