-
Notifications
You must be signed in to change notification settings - Fork 10
DOCS-35: OpenGraph Library redesign #400
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Draft
jeff-matthews
wants to merge
51
commits into
main
Choose a base branch
from
DOCS-35-opengraph-library-redesign
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Draft
Changes from all commits
Commits
Show all changes
51 commits
Select commit
Hold shift + click to select a range
55b8fef
wip: initial working POC for new opengraph library design
jeff-matthews d647d3a
style: add badge icons and fix styling
jeff-matthews 2eea64f
fix: open issue template after cliking submit lib change
jeff-matthews 70c6a38
style: align styles with native mintlify components
jeff-matthews 5aa12d3
style: replace custom note styles with native mintlify callout compon…
jeff-matthews a19da43
refactor: comonentize hero and add guide component
jeff-matthews 030eab3
chore: remove enterprise extensions
jeff-matthews d69450a
style: more style clean up
jeff-matthews 42bdb27
refactor: add accordions for technology groups
jeff-matthews 5c5b31e
wip: add vendor icons
jeff-matthews f82e2f4
refactor: separate library data from rendering logic
jeff-matthews f8990d9
refactor: add script to generate data
jeff-matthews 3f27cc9
docs: refine OpenGraph library presentation and taxonomy
martinsohn b15115f
docs: group OpenGraph extensions by attack-path domain
martinsohn 3d5e5ef
feat: add JSON-only grouping path
jeff-matthews 5f3b8b5
refactor: use cleaner structure for library snippet assets
jeff-matthews bbce2fb
refactor: replace accordions w/ filters
jeff-matthews 2f0f115
chore: removed vendor icons
jeff-matthews 3bc4bfe
feat: added validation to the generator
jeff-matthews 2a7b9d5
refactor: remove redundant vendor metadata
martinsohn 7539bea
Update attribution references
martinsohn 05a9ec6
feat: make category headings collapsible
martinsohn 368bee3
Update attribution references data
martinsohn 6a9bd30
Rename "Credentials" to "Cross-platform Secret Scanners"
martinsohn 9914679
docs: clarify meaning of community and spectrops badges
jeff-matthews fa4242c
style: removed accordions and added three column layout
jeff-matthews 55dd1e9
chore: restore icons
jeff-matthews a4cec71
chore: remove groups
jeff-matthews 3b12c92
chore: restore original mock
jeff-matthews 09d2b90
docs: restore hero; use natove callout style
jeff-matthews 8b26245
feat: add integrations
jeff-matthews ed2f9c7
chore: remove mitre ext and bh api integration
jeff-matthews eaf9c81
refactor: move data files into a single directory
jeff-matthews def0387
chore: restore attribution sans icons
jeff-matthews 827d596
chore: remove stale code for category ordering
jeff-matthews 4539252
chore: move enterprise extensions into json
jeff-matthews 8014ae6
refactor: rename libraryCategores to communityExtensions
jeff-matthews 5f20632
chore: remove mitre icon
jeff-matthews d12381e
chore: clean up dead code
jeff-matthews bd37fbe
feat: add generator validation and include community maintained exten…
jeff-matthews 79c44ef
style: fix icons
jeff-matthews c1b3a8d
feat: add shared search and filtering across sections
jeff-matthews 83a3413
style: replace svg icons with favicons
jeff-matthews e68f6be
chore: remove unused svg icons
jeff-matthews d6865b1
style: reduce padding for vendor icons
jeff-matthews e97fdc9
chore: split extensions by creator
jeff-matthews bf18dcc
chore: add temrinal output for successful script runs
jeff-matthews 495411c
docs: document favicon generations script
jeff-matthews 4222815
style: fix syntax highlighting
jeff-matthews 2d66f1b
style: decrease indentation
jeff-matthews 1d10f1c
style: run just --fmt
jeff-matthews File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Binary file not shown.
Binary file not shown.
Binary file not shown.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file not shown.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file not shown.
Binary file not shown.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file not shown.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file not shown.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file not shown.
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,84 @@ | ||
| # OpenGraph library data | ||
|
|
||
| The BloodHound Marketplace page is rendered from JSON source files in this directory. Update those source files, then regenerate the JSX bridge that Mintlify imports. | ||
|
|
||
| ## Files | ||
|
|
||
| - `grid.jsx`: Renders the Marketplace page and maps icon types to cached vendor favicon assets. | ||
| - `data/data.generated.jsx`: Generated data bridge imported by `docs/opengraph/library.mdx`. | ||
| - `data/extensions/*.json`: Community extension categories grouped by vendor or technology. | ||
| - `data/enterprise.json`: BloodHound Enterprise extension cards. | ||
| - `data/integrations.json`: Integration cards. | ||
| - `data/tools.json`: OpenGraph tool cards. | ||
| - `../../../assets/icons/vendor-favicons/`: Cached vendor favicon assets used by `vendorIconMap`. | ||
| - `../../../../scripts/fetch-opengraph-vendor-favicons.mjs`: Fetches and refreshes cached vendor favicon assets. | ||
|
|
||
| ## Add or update an entry | ||
|
|
||
| 1. Edit the relevant JSON source file. | ||
| 1. For a new community vendor or technology, add a new file in `data/extensions/`. | ||
| 1. Add or update the entry fields: | ||
| - `name`: Card title. | ||
| - `description`: One-sentence summary shown on the card. | ||
| - `href`: Internal docs path or external repository URL. | ||
| - `maintainer`: Use `specterops` or `community` for community extension and tool entries. | ||
| - `authors`: List author names and optional links for community extension and tool entries. | ||
| - `icon`: Set `type` and `label` for category, enterprise extension, and integration card icons. | ||
| - `vendorName`: Optional vendor label for enterprise, integration, and tool cards. | ||
| - `action`: Optional button text. The renderer defaults to `View on GitHub`. | ||
| 1. If the entry uses a new vendor icon type, add the favicon asset to `docs/assets/icons/vendor-favicons/`. | ||
| - Use square favicon assets. The Marketplace renders all vendor icons with the same dimensions. | ||
| 1. Add the icon type to `vendorIconMap` in `grid.jsx`. | ||
| - If the entry uses a shared FontAwesome icon, add the icon type to the built-in icon map in `grid.jsx`. | ||
| 1. Regenerate the JSX data bridge: | ||
|
|
||
| ```bash | ||
| just generate-opengraph-library | ||
| ``` | ||
|
|
||
| 1. Review the generated changes in `data/data.generated.jsx`. | ||
| 1. Validate the source files and generated bridge: | ||
|
|
||
| ```bash | ||
| just check-opengraph-library | ||
| ``` | ||
|
|
||
| ## Refresh vendor favicons | ||
|
|
||
| Use `just fetch-opengraph-library-favicons` when you add a new vendor icon source or when a vendor changes its favicon. | ||
|
|
||
| ```bash | ||
| just fetch-opengraph-library-favicons | ||
| ``` | ||
|
|
||
| The recipe runs `scripts/fetch-opengraph-vendor-favicons.mjs`. The script fetches favicon assets for the vendor list defined in the script, writes the files to `docs/assets/icons/vendor-favicons/`, and prints the source URL used for each saved asset. | ||
|
|
||
| The script first tries an explicit `faviconUrl` when one is configured for a vendor, otherwise it tries `/favicon.ico` for the vendor site. If that request fails, it checks the site HTML for icon links and uses the best available icon candidate. When the image format changes, the script removes older cached files for the same vendor type so `vendorIconMap` only points to the current asset. | ||
|
|
||
| After refreshing favicons, review the icon changes and run: | ||
|
|
||
| ```bash | ||
| just check-opengraph-library | ||
| ``` | ||
|
|
||
| ## Sorting and visibility | ||
|
|
||
| The generator sorts community categories, community entries within each category, enterprise extensions, integrations, and tools alphabetically by `name`. | ||
|
|
||
| The Community Extensions section renders all entries in `data/extensions/`, regardless of `maintainer` value. | ||
|
|
||
| ## Validation | ||
|
|
||
| The generator validates the local data contract before writing `data/data.generated.jsx`. | ||
|
|
||
| Validation checks include: | ||
|
|
||
| - Required fields for categories, extension cards, integration cards, and tool cards. | ||
| - `maintainer` values for community extension and tool entries. | ||
| - Author names and author URL syntax. | ||
| - Internal `href` values that resolve to local docs pages. | ||
| - External `href` URL syntax. The generator does not check whether external URLs are reachable. | ||
| - Icon `type` and `label` values. | ||
| - Favicon assets referenced by `vendorIconMap` in `grid.jsx`. | ||
| - Duplicate category names, entry names, and entry `href` values. | ||
| - Stale generated data when you run `just check-opengraph-library`. | ||
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win
Correct the visibility statement for
maintainer.grid.jsxno longer renders a single "Community Extensions" section.sectionGroupssplitsdata/extensions/entries into "SpecterOps employee-created Extensions" formaintainer: specteropsand "Community-Created Extensions" for every other value. Themaintainervalue therefore selects the section.📝 Proposed wording
📝 Committable suggestion
🤖 Prompt for AI Agents