{"adoption": {"forks": 253, "observed_at": "2026-08-28T04:04:56.250521+00:00", "stars": 1513}, "canonical_url": "https://ross.abutalabs.com/products/writehat", "card": {"archived": false, "artifact_type": "application", "description": "A pentest reporting tool written in Python.  Free yourself from Microsoft Word.", "domain": ["security", "penetration-testing", "developer-tools", "documentation"], "enriched": true, "function": ["pdf", "markdown", "templating", "web-framework", "self-hosted"], "health_score": 65, "homepage": null, "language": "Python", "license": "GPL-3.0", "license_family": "copyleft", "maturity": "active", "member_repos": ["blacklanternsecurity/writehat"], "name": "blacklanternsecurity/writehat", "platform": ["self-hosted", "python"], "pushed_at": "2026-04-01T19:54:30+00:00", "repo": "blacklanternsecurity/writehat", "stars": 1513, "tags": ["pentest-reporting", "report-generation", "django", "markdown-to-pdf", "findings-database", "docker", "web-server"], "topics": [], "urls": [], "use_cases": ["generate pentest reports without word", "write penetration testing reports in markdown", "manage findings database for security assessments", "convert markdown reports to pdf", "collaborate on report sections with team members", "clone and template security reports", "score vulnerabilities with cvss or dread"], "what_it_is": "WriteHat is a self-hosted web application for generating penetration test reports, converting Markdown to HTML to PDF without Microsoft Word. Built with Django and deployed via Docker Compose, it includes a drag-and-drop report builder, findings database, and CVSS/DREAD scoring.", "when_to_avoid": ["you only need simple one-off document conversion", "you cannot run docker or a self-hosted server", "you need offline desktop word-processor-style editing"], "when_to_choose": ["you need a dedicated self-hosted reporting tool for pentest engagements", "you want markdown-based report authoring with pdf output", "you need a reusable findings database and report templating"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/writehat", "repo": "blacklanternsecurity/writehat", "role": "main", "score": 66}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:04:56.250521+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T04:32:14.582725+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "748419b08d5ad00219350d860e575e1e36c4832b2018218e8d31c9d3f752b83a", "fetched_at": "2026-08-28T04:04:56.250521+00:00", "kind": "readme", "missing": false, "url": "https://github.com/blacklanternsecurity/writehat"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:04:56.250521+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T04:32:14.582725+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "748419b08d5ad00219350d860e575e1e36c4832b2018218e8d31c9d3f752b83a", "fetched_at": "2026-08-28T04:04:56.250521+00:00", "kind": "readme", "missing": false, "url": "https://github.com/blacklanternsecurity/writehat"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T04:32:14.582725+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "748419b08d5ad00219350d860e575e1e36c4832b2018218e8d31c9d3f752b83a", "fetched_at": "2026-08-28T04:04:56.250521+00:00", "kind": "readme", "missing": false, "url": "https://github.com/blacklanternsecurity/writehat"}], "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:04:56.250521+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:04:56.250521+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:04:56.250521+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T04:32:14.582725+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "748419b08d5ad00219350d860e575e1e36c4832b2018218e8d31c9d3f752b83a", "fetched_at": "2026-08-28T04:04:56.250521+00:00", "kind": "readme", "missing": false, "url": "https://github.com/blacklanternsecurity/writehat"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:04:56.250521+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:04:56.250521+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T04:32:14.582725+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "748419b08d5ad00219350d860e575e1e36c4832b2018218e8d31c9d3f752b83a", "fetched_at": "2026-08-28T04:04:56.250521+00:00", "kind": "readme", "missing": false, "url": "https://github.com/blacklanternsecurity/writehat"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:04:56.250521+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:04:56.250521+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:04:56.250521+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T04:32:14.582725+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "748419b08d5ad00219350d860e575e1e36c4832b2018218e8d31c9d3f752b83a", "fetched_at": "2026-08-28T04:04:56.250521+00:00", "kind": "readme", "missing": false, "url": "https://github.com/blacklanternsecurity/writehat"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:04:56.250521+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:04:56.250521+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T04:32:14.582725+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "748419b08d5ad00219350d860e575e1e36c4832b2018218e8d31c9d3f752b83a", "fetched_at": "2026-08-28T04:04:56.250521+00:00", "kind": "readme", "missing": false, "url": "https://github.com/blacklanternsecurity/writehat"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T04:32:14.582725+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "748419b08d5ad00219350d860e575e1e36c4832b2018218e8d31c9d3f752b83a", "fetched_at": "2026-08-28T04:04:56.250521+00:00", "kind": "readme", "missing": false, "url": "https://github.com/blacklanternsecurity/writehat"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T04:32:14.582725+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "748419b08d5ad00219350d860e575e1e36c4832b2018218e8d31c9d3f752b83a", "fetched_at": "2026-08-28T04:04:56.250521+00:00", "kind": "readme", "missing": false, "url": "https://github.com/blacklanternsecurity/writehat"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T04:32:14.582725+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "748419b08d5ad00219350d860e575e1e36c4832b2018218e8d31c9d3f752b83a", "fetched_at": "2026-08-28T04:04:56.250521+00:00", "kind": "readme", "missing": false, "url": "https://github.com/blacklanternsecurity/writehat"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 75, "longevity": 100, "rhythm": 35}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": ["no_releases"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 2102, "days_push": 154, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 66, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}