{"adoption": {"forks": 144, "observed_at": "2026-08-28T04:03:30.830102+00:00", "stars": 1081}, "canonical_url": "https://ross.abutalabs.com/products/django-defender", "card": {"archived": false, "artifact_type": "library", "description": "A simple super fast django reusable app that blocks people from brute forcing login attempts", "domain": ["security", "web-development", "backend"], "enriched": true, "function": ["auth", "rate-limiting", "security", "caching"], "health_score": 64, "homepage": null, "language": "Python", "license": "Apache-2.0", "license_family": "permissive", "maturity": "active", "member_repos": ["jazzband/django-defender"], "name": "jazzband/django-defender", "platform": ["python", "self-hosted"], "pushed_at": "2026-02-01T16:28:21+00:00", "repo": "jazzband/django-defender", "stars": 1081, "tags": ["django", "brute-force-protection", "redis", "login-security", "jazzband", "web-server"], "topics": [], "urls": [], "use_cases": ["prevent brute force attacks on django login", "rate limit login attempts by username and ip", "block users after failed login attempts", "track and review login attempts in django admin", "fast login throttling without hitting the database", "unblock users or ips locked out by failed logins"], "what_it_is": "A Django reusable app that blocks brute-force login attempts by rate limiting on username and IP address, using Redis as a fast cache backend. It logs login attempts to the database and provides Django admin pages for viewing and unblocking users.", "when_to_avoid": ["your project does not use Django", "you need general-purpose API rate limiting rather than login protection", "you cannot run Redis or another cache backend"], "when_to_choose": ["you run a Django site and need brute-force protection on authentication", "you want Redis-backed rate limiting that avoids database hits on every login", "you need admin visibility into blocked usernames, IPs, and login attempt history"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/django-defender", "repo": "jazzband/django-defender", "role": "main", "score": 52}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:03:30.830102+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T06:51:22.599386+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "123a1b7d3ce8d4335002f5923a833acfa4d3f55295351d7ad34afa7504ebd645", "fetched_at": "2026-08-28T04:03:30.830102+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jazzband/django-defender"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:03:30.830102+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T06:51:22.599386+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "123a1b7d3ce8d4335002f5923a833acfa4d3f55295351d7ad34afa7504ebd645", "fetched_at": "2026-08-28T04:03:30.830102+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jazzband/django-defender"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T06:51:22.599386+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "123a1b7d3ce8d4335002f5923a833acfa4d3f55295351d7ad34afa7504ebd645", "fetched_at": "2026-08-28T04:03:30.830102+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jazzband/django-defender"}], "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:30.830102+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:03:30.830102+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:03:30.830102+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T06:51:22.599386+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "123a1b7d3ce8d4335002f5923a833acfa4d3f55295351d7ad34afa7504ebd645", "fetched_at": "2026-08-28T04:03:30.830102+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jazzband/django-defender"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:03:30.830102+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:03:30.830102+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T06:51:22.599386+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "123a1b7d3ce8d4335002f5923a833acfa4d3f55295351d7ad34afa7504ebd645", "fetched_at": "2026-08-28T04:03:30.830102+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jazzband/django-defender"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:03:30.830102+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:03:30.830102+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:03:30.830102+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T06:51:22.599386+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "123a1b7d3ce8d4335002f5923a833acfa4d3f55295351d7ad34afa7504ebd645", "fetched_at": "2026-08-28T04:03:30.830102+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jazzband/django-defender"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:03:30.830102+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:03:30.830102+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T06:51:22.599386+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "123a1b7d3ce8d4335002f5923a833acfa4d3f55295351d7ad34afa7504ebd645", "fetched_at": "2026-08-28T04:03:30.830102+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jazzband/django-defender"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T06:51:22.599386+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "123a1b7d3ce8d4335002f5923a833acfa4d3f55295351d7ad34afa7504ebd645", "fetched_at": "2026-08-28T04:03:30.830102+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jazzband/django-defender"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T06:51:22.599386+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "123a1b7d3ce8d4335002f5923a833acfa4d3f55295351d7ad34afa7504ebd645", "fetched_at": "2026-08-28T04:03:30.830102+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jazzband/django-defender"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T06:51:22.599386+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "123a1b7d3ce8d4335002f5923a833acfa4d3f55295351d7ad34afa7504ebd645", "fetched_at": "2026-08-28T04:03:30.830102+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jazzband/django-defender"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 65, "longevity": 100, "rhythm": 8}, "computed_at": "2026-09-02T17:46:02.011165+00:00", "flags": [], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 4364, "days_push": 213, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 52, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}