Skip to content

Commit 473186e

Browse files
authored
Merge pull request #28 from disclose/preview
Align /platforms with directory.disclose.io as canonical home
2 parents 0964f65 + fc0e10e commit 473186e

21 files changed

Lines changed: 718 additions & 46 deletions

config/_default/hugo.toml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ pygmentsUseClasses = true
2929

3030
# Output formats
3131
[outputs]
32-
home = ["HTML", "RSS", "JSON"]
32+
home = ["HTML", "RSS", "JSON", "LLMSFULL"]
3333
section = ["HTML", "RSS"]
3434
page = ["HTML"]
3535

@@ -39,6 +39,10 @@ pygmentsUseClasses = true
3939
mediaType = "application/json"
4040
baseName = "index"
4141
isPlainText = true
42+
[outputFormats.LLMSFULL]
43+
mediaType = "text/plain"
44+
baseName = "llms-full"
45+
isPlainText = true
4246

4347
# Minification
4448
[minify]

content/framework/_index.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ title: "The disclose.io Framework"
33
description: "The disclose.io Framework: canonical legal terms for vulnerability disclosure, plus the diostatus program-maturity model."
44
type: framework
55
weight: 1
6+
tldr: "The disclose.io Framework is the open-source, public-domain reference for running a vulnerability disclosure program (VDP). It provides canonical legal terms organizations can drop into their own policies, a shared vocabulary security researchers use when reading or critiquing programs, and the diostatus six-level maturity model for measuring program quality over time. All Framework content is licensed CC0 1.0 and is editable at github.com/disclose/dioterms."
67
---
78

89
The disclose.io Framework is our open-source, public-domain reference for running a vulnerability disclosure program — starting-point boilerplate for organisations, shared vocabulary for security researchers reading or critiquing programs, and a way to measure maturity over time. It's all open for review and contribution, so if you spot something off, you can [open a PR at github.com/disclose/dioterms](https://github.com/disclose/dioterms) (licensed [CC0 1.0](https://creativecommons.org/publicdomain/zero/1.0/)).

content/platforms.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,5 @@
22
title: "Bug Bounty Platforms"
33
description: "A community-powered collection of all known bug bounty platforms, vulnerability disclosure platforms, and crowdsourced security platforms."
44
layout: "platforms"
5+
tldr: "disclose.io maintains a community-curated list of every known bug bounty, vulnerability disclosure, and crowdsourced security platform. Each entry includes the platform's name, primary URL, geographic focus, and disclosure model. The canonical disclose.io database — including both platforms and individual programs — lives at directory.disclose.io."
56
---

content/programs.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,5 @@
22
title: "VDP Programs"
33
description: "Search vulnerability disclosure and bug bounty programs in our database."
44
layout: "programs"
5+
tldr: "disclose.io maintains the largest open directory of vulnerability disclosure programs (VDPs) and bug bounty programs on the public internet. Each entry includes the organization, in-scope assets, disclosure policy URL, and any safe-harbor language. The directory is searchable, free to use, and powers downstream tools including lookup.disclose.io."
56
---

content/threats.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,5 @@
22
title: "Research Threats"
33
description: "An ongoing archive of legal threats made against security researchers engaged in good-faith vulnerability disclosure."
44
layout: "threats"
5+
tldr: "disclose.io maintains the canonical public archive of legal threats made against security researchers engaged in good-faith vulnerability disclosure. Each entry records the date, the organization that made the threat, the researcher(s) targeted, the topic, and the eventual outcome. The archive is open-source at github.com/disclose/research-threats and is updated as incidents are reported and verified."
56
---

content/tools.md

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
---
2+
title: "Tools"
3+
description: "Free, open-source tools from the disclose.io project — for organizations launching a VDP, for researchers finding the right contact, and for everyone working to make vulnerability disclosure simpler."
4+
tldr: "disclose.io maintains four free, open-source tools that cover the full disclosure lifecycle: Policymaker generates VDP policy text from canonical templates, Directory and Lookup help anyone find the right disclosure contact for any asset, and Vault cryptographically enforces disclosure deadlines so a committed timeline cannot be reversed."
5+
---
6+
7+
The disclose.io project ships four tools — each free, each open-source, each addressing a specific friction in the vulnerability disclosure pipeline.
8+
9+
## Policymaker
10+
**[policymaker.disclose.io](https://policymaker.disclose.io)** — Interactive policy generator
11+
12+
Generates a customized vulnerability disclosure policy (VDP) for any organization using the canonical legal terms from the [disclose.io Framework](/framework/). Pick a maturity level, fill in the organization name and contact channel, and walk away with safe-harbor language, a security.txt file, and a complete disclose.io-compliant policy.
13+
14+
## Directory
15+
**[directory.disclose.io](https://directory.disclose.io)** — The open VDP and bug bounty programs database
16+
17+
Browse every known vulnerability disclosure and bug bounty program. Each entry includes the organization, in-scope assets, policy URL, and any safe-harbor language. Open-source, community-curated, and the data source behind the [Lookup](#lookup) attribution tool.
18+
19+
## Lookup
20+
**[lookup.disclose.io](https://lookup.disclose.io)** — Security contact attribution
21+
22+
Turn any input — domain, IP, URL, email, ASN, npm package, mobile app, hardware product, free-text company name — into the right disclosure contact. The tool chains 11 attribution strategies (security.txt, the Directory, WHOIS, DNS SOA, common security@ aliases, bug bounty platform records, and more) and returns the highest-confidence contact with provenance. Available as a web UI, HTTP API, and MCP server.
23+
24+
## Vault
25+
**[vault.disclose.io](https://vault.disclose.io)** — Cryptographically enforced disclosure deadlines
26+
27+
A dead-man's-switch for vulnerability disclosure. A researcher commits a disclosure with a future publication date; the disclosure is encrypted with a timelock that cannot be bypassed, even by the operators of the vault. On expiry, the disclosure becomes publicly readable — regardless of what happens to anyone involved.
28+
29+
## Browser extension
30+
**[Chrome extension](https://chromewebstore.google.com/detail/discloseio/efelnoglhabpipbgneeoehjbcmiclpda)** *(also referenced as the Disclose extension)*
31+
32+
Surfaces the disclose.io directory's VDP posture for any site you visit — see at a glance whether the organization has a published VDP, what their safe-harbor language is, and where to report a vulnerability.
33+
34+
## Browse the source
35+
36+
Every tool is open-source under the [github.com/disclose](https://github.com/disclose) organization. Contributions, issue reports, and policy improvements all welcome.

content/universe.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ Below is the full ecosystem. Every component answers a real question someone ask
1515
## Core
1616

1717
- [disclose.io](/) — the framework, docs, and project home
18+
- [directory.disclose.io](https://directory.disclose.io?utm_source=universe&utm_medium=onepager&utm_campaign=directory) — the canonical disclose.io database of programs and platforms
1819
- [disclose.io/programs](/programs) — curated programs with safe harbor language
1920
- [disclose.io/platforms](/platforms) — bug bounty platforms supporting safe harbor
2021
- [disclose.io/threats](/threats) — research on legal threats to security researchers

data/navigation/boxes.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,11 @@
1010
icon: "search"
1111
url: "https://directory.disclose.io"
1212

13+
- title: "I'm researching a program"
14+
description: "Browse the open directory of every known vulnerability disclosure and bug bounty program, with scope, policy URLs, and safe-harbor language."
15+
icon: "menu"
16+
url: "/programs/"
17+
1318
- title: "I want to protect researchers"
1419
description: "Access model policies, legal frameworks, and safe harbor guidance. Help advance the legal protections security researchers need."
1520
icon: "shield"
Lines changed: 183 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,183 @@
1+
# Traffic Optimization Follow-ups
2+
3+
Generated from the 2026-05-17 GA 7-day analysis. The unattended work
4+
(C1 AI-readiness on disclose.io, C2 newsletter CTA propagation) shipped
5+
in commit alongside this file. The items below need your input before
6+
they can ship — each is scoped so it's ready to execute on approval.
7+
8+
## A1 — Block bot traffic in GA4 admin ✅ SHIPPED 2026-05-17
9+
10+
Audience `Likely Crawlers` (id `properties/365274897/audiences/14895335664`)
11+
now lives on the main property. Conditions: country=Singapore AND
12+
sessionDefaultChannelGroup=Direct AND hostName=directory.disclose.io.
13+
Scope: across all sessions, 30-day membership.
14+
15+
**How to use:** GA4 → Reports → Library → Customize → add Comparison →
16+
"Audience" → exclude `Likely Crawlers`. Or use it in Explore as a segment
17+
exclusion. Reversible via the audience admin if unwanted.
18+
19+
**Note on the original spec:** the engagement-rate < 5% condition was
20+
dropped because GA4 audience builders don't support that metric threshold
21+
directly. The 3-AND-condition signature is precise enough on its own — the
22+
5/10 bot wave wouldn't pass the country + direct + directory filter without
23+
also having near-zero engagement.
24+
25+
Provisioner script: `~/.claude/skills/GoogleAnalytics/Tools/provision-likely-crawlers.ts`
26+
(idempotent, safe to re-run).
27+
28+
---
29+
30+
## A1.5 — IP-based Developer/Internal Traffic filter
31+
32+
Still on the table as a stronger complement to the audience. Cloudflare
33+
obscures the actual origin IP in the GA dimension, so this needs either:
34+
(a) a server-side fix that surfaces the real client IP back to GA, or
35+
(b) acceptance that the audience filter is the practical ceiling here.
36+
37+
---
38+
39+
## A2 — Canonicalize dual-tracked subdomains (MEDIUM, needs decisions)
40+
41+
**Why:** Four subdomains are tagged in both their dedicated property AND the
42+
consolidated main property. Numbers don't reconcile.
43+
44+
**Decision needed (per subdomain):**
45+
46+
| Subdomain | Keep as canonical | Rationale (suggested) |
47+
|---|---|---|
48+
| lookup.disclose.io | **Dedicated property (530257491)** | Already has its own analytics workflow |
49+
| policymaker.disclose.io | **Dedicated property (385649734)** | Same — clean separation |
50+
| community.disclose.io | **Dedicated property (263113067)** | Discourse forum, distinct UX |
51+
| vault.disclose.io | **Dedicated property (530179529)** | Pre-launch, no need to dilute |
52+
53+
If you confirm the suggested column, I can remove the `G-NJQTCTSYCM` tag from
54+
those subdomains' HTML headers (or wherever they're injected) in one pass.
55+
56+
---
57+
58+
## A3 — Fire SPA route-change pageviews on lookup.disclose.io ✅ SHIPPED 2026-05-17
59+
60+
`renderResults` in `~/Projects/lookup-disclose-io/web/index.html` now fires
61+
a gtag virtual page_view on every result render:
62+
- `page_path: /result/<assetType>/<status>` — e.g. `/result/domain/complete`
63+
- `page_title: Lookup result — <assetType> (<status>)`
64+
65+
assetType is sanitized to lowercase a-z/0-9/hyphen/underscore for a clean
66+
virtual path. Status is one of `complete | partial | failed | unknown`.
67+
Defensive guard ensures the call no-ops if gtag isn't loaded.
68+
69+
Commit `fd0b812` on `feat/seo-static-landing-pages`. After deploy, GA will
70+
show per-asset-type traffic distribution and per-status success rates
71+
instead of one `/` aggregate.
72+
73+
---
74+
75+
## B1 — Redirect policymaker.disclose.io/ → /policymaker/introduction (LOW-MEDIUM)
76+
77+
**Why:** Root page = 6.4s avg session; `/policymaker/introduction` = 91s. Same
78+
product, different landing. Anyone arriving at the root bounces.
79+
80+
**Proposed action:** Find the Nuxt routing config in `~/Projects/policymaker/`
81+
and add a permanent redirect (308) from `/` to `/policymaker/introduction`,
82+
OR set the default index page to render the introduction content directly.
83+
84+
**Why I didn't just do it:** policymaker's `pages/` dir only has a nested
85+
`policymaker/` subdir, no top-level `pages/index.vue` — the Nuxt structure is
86+
non-obvious and I'd rather not guess at the routing convention.
87+
88+
---
89+
90+
## A4 — UTM discipline ✅ HELPER SHIPPED 2026-05-17, ongoing discipline still on you
91+
92+
UTM builder page lives at `https://disclose.io/internal/utm-builder.html`
93+
(after deploy). noindex+nofollow, self-contained HTML/JS form, disclose.io
94+
brand colors. Pre-loaded with the channels you actually use (Bluesky, X,
95+
LinkedIn, Mastodon, newsletter, email, slack, discord, podcast, HN,
96+
reddit, github).
97+
98+
**Bookmark it.** Two-week test: tag every outbound link going forward.
99+
Then run a `sessionSource` report and see if "(direct)" share of weekly
100+
users drops below 70%. If yes, UTM discipline is paying off; if no, the
101+
direct traffic is genuinely dark (privacy browsers, AI-assistant referrals
102+
that strip referer headers, etc.) rather than untagged-by-us.
103+
104+
---
105+
106+
## B2 — Investigate /threats engagement collapse ✅ DIAGNOSED 2026-05-17
107+
108+
Opened https://disclose.io/threats/ live via Interceptor (real Chrome). Page
109+
renders correctly — full nav, 60+ case entries (Columbus / Modern Solution /
110+
NEWAG / Ford / Apple / FreeHour / Josh Renaud / etc.), all links working,
111+
no console errors, accessibility tree clean.
112+
113+
**Diagnosis:** /threats is NOT broken. The 4.9% engagement rate on 60-of-61
114+
"direct" sessions is the bot signature (a scoped scanner hitting /threats
115+
specifically). Now excluded by the `Likely Crawlers` audience created in A1.
116+
117+
No code change needed for /threats itself.
118+
119+
---
120+
121+
## A5 — Link Google Search Console (LOW effort, needs you in the UI)
122+
123+
Currently the deepest channel visibility is `firstUserDefaultChannelGroup`
124+
("Organic Search" as a bucket). No per-query data. Five minutes in Search
125+
Console + GA4 admin links the two and unlocks query-level reporting.
126+
127+
This needs you to be signed into both accounts in a browser — can't be done via
128+
API alone without the property's verified ownership being linked at the GSC
129+
side first.
130+
131+
---
132+
133+
## Cross-property AI-readiness rollout (shipped across all addressable repos)
134+
135+
The 2026-05-17 round shipped AI-readiness across every disclose.io property
136+
where I had source-tree access and the change was surgical enough to ship
137+
unattended. Status:
138+
139+
| Property | Shipped? | What landed | Where |
140+
|---|---|---|---|
141+
| **disclose.io** (main) || llms.txt refresh, llms-full.txt, Dataset/CreativeWork schema on /programs and /framework, TL;DR blocks on 4 pages, newsletter CTA on 4 pages | this repo, `preview` branch (commits `8a4cb7c` + `d73aadf`) |
142+
| **lookup.disclose.io** || /llms.txt route (schema was already comprehensive) | `disclose/lookup.disclose.io` `feat/seo-static-landing-pages` (`1b96913`) |
143+
| **vault.disclose.io** || /llms.txt + /robots.txt routes (both were 404), full @graph schema with WebSite/Organization/SoftwareApplication/FAQPage, missing og: + twitter: meta tags | `disclosure-vault` `main` (`12e4be2`) |
144+
| **dnssecuritytxt.org** || docs/llms.txt (Jekyll site, picked up automatically on next push) | `disclose/dnssecuritytxt` `main` (`ea35c71`) |
145+
| **blog.disclose.io** (Ghost) | ⏭️ | Needs admin-panel code injection (head + footer settings). Schema can be added that way without theme changes. | Ghost admin UI |
146+
| **community.disclose.io** (Discourse) | ⏭️ | Needs a Discourse theme component (custom HTML in `<head>`) — Discourse has good native SEO, so the marginal value is lower than the other properties | Discourse admin → Customize → Themes |
147+
| **policymaker.disclose.io** (Nuxt) | ⏭️ | Local repo at `~/Projects/policymaker/` is scaffold-only (empty subdirs). Real source likely lives on bucky — need to land on the right host before editing | bucky (presumed) |
148+
| **directory.disclose.io** | ⏭️ | Repo not located in `~/Projects/` — referenced as a config URL only. Schema/llms.txt should go where the directory's HTML is actually served | TBD |
149+
150+
### After deploy, expected new endpoints
151+
152+
- https://disclose.io/llms-full.txt (currently 404 — needs Cloudflare Pages rebuild on `preview``main`)
153+
- https://lookup.disclose.io/llms.txt (currently 404)
154+
- https://vault.disclose.io/llms.txt + /robots.txt (currently 404)
155+
- https://dnssecuritytxt.org/llms.txt (currently 404)
156+
157+
---
158+
159+
## Originally shipped (disclose.io main repo only — kept for history)
160+
161+
- **C1 AI-readiness:**
162+
- Refreshed `static/llms.txt` with deeper page index (Framework terms, all
163+
docs, tools subdomains)
164+
- Added `Dataset` JSON-LD to `/programs`
165+
- Added `CreativeWork` JSON-LD to `/framework`
166+
- New reusable `partials/page-tldr.html` rendering verbatim-quotable
167+
summary blocks on `/platforms`, `/programs`, `/threats`, `/framework`
168+
- `llms-full.txt` Hugo output format (generated at build time, full corpus
169+
for AI crawlers)
170+
- **C2 returning-user loop:**
171+
- Extracted newsletter CTA to `partials/newsletter-cta.html`
172+
- Added to all four high-engagement pages so net-new users encounter it on
173+
the pages they spend the most time on (per the 2x returning-user
174+
engagement signal)
175+
- **B6 schema markup:** covered by C1 above
176+
177+
## Recommendations that are process, not code (not in this commit)
178+
179+
- **B5** Policy Pulse cadence — you're already on it; keep it.
180+
- **C3** Selected HN submissions — your call when there's a worthy piece.
181+
- **C4** Reddit engagement — find the 3-5 VDP/bug-bounty subreddits worth a real human presence.
182+
- **C5** LinkedIn / Facebook decision — commit to a cadence with UTMs, or drop them and stop spending attention.
183+
- **C6** Bugcrowd referral partnership — 14 sessions at 75% engagement is a relationship signal; a quick chat with Casey/Bugcrowd folks could compound it.

0 commit comments

Comments
 (0)