# Haojun Mah

[haojunmah.app](https://haojunmah.app)

- **Overall score:** 96/100 (Grade A)
- **Checks passed:** 22 / 29
- **Last computed:** 2026-05-11

## Components

### Content Discoverability

- **Score:** 100/100 · **Status:** partial
- **Summary:** 1 skipped across 6 AFDocs checks.
- **Rationale:** Agents need a clear entry point and crawl map before they can reliably discover the right pages.
- **Reference:** [AFDocs reference](https://afdocs.dev)

**Checks**

- ✅ **LLMS TXT Exists** — llms.txt found at 1 location(s)
- ✅ **LLMS TXT Valid** — llms.txt follows the proposed structure (H1, blockquote, heading-delimited link sections)
- ✅ **LLMS TXT Size** — llms.txt is 2,952 characters (under 50,000 threshold)
- ✅ **LLMS TXT Links Resolve** — All 10 links are external and resolve (10 total links)
- ⏭️ **LLMS TXT Links Markdown** — All 10 links are external; cannot assess markdown support
- ✅ **LLMS TXT Directive** — llms.txt directive found in all 2 pages, near the top of content; 1 failed to fetch

### Markdown Availability

- **Score:** 88/100 · **Status:** partial
- **Summary:** 1 warning across 2 AFDocs checks.
- **Rationale:** When markdown is available directly, agents spend less effort stripping presentation markup and guessing structure.
- **Reference:** [AFDocs reference](https://afdocs.dev)

**Checks**

- ✅ **Markdown Url Support** — 3/3 pages support .md URLs (100%)
- ⚠️ **Content Negotiation** — Content negotiation partially supported: 2 correct type, 0 wrong type, 1 HTML only Your server returns markdown content for Accept: text/markdown requests but with an incorrect Content-Type header. Set the response Content-Type to text/markdown for proper agent handling.

### Page Size and Truncation Risk

- **Score:** 96/100 · **Status:** partial
- **Summary:** 1 warning across 4 AFDocs checks.
- **Rationale:** Large pages and delayed primary content increase truncation risk and make retrieval less reliable.
- **Reference:** [AFDocs reference](https://afdocs.dev)

**Checks**

- ✅ **Rendering Strategy** — All 3 pages contain server-rendered content
- ✅ **Page Size Markdown** — All 3 pages under 50K chars (median 2K, max 2K)
- ⚠️ **Page Size Html** — 1 of 3 pages convert to 50K–100K chars (max 89K, 32% boilerplate) 1 of 3 pages convert to 50K-100K characters of markdown. These may be truncated on some agent platforms.
- ✅ **Content Start Position** — Content starts within first 10% on all 3 pages (median 2%)

### Content Structure

- **Score:** 100/100 · **Status:** pass
- **Summary:** 3 AFDocs checks pass.
- **Rationale:** Predictable sections, valid code fences, and serialized tabs make the content easier for agents to parse correctly.
- **Reference:** [AFDocs reference](https://afdocs.dev)

**Checks**

- ✅ **Tabbed Content Serialization** — No tabbed content detected across 3 pages
- ✅ **Section Header Quality** — No tabbed content found; header quality check not applicable
- ✅ **Markdown Code Fence Validity** — All 0 code fences properly closed across 4 pages

### URL Stability and Redirects

- **Score:** 100/100 · **Status:** pass
- **Summary:** 2 AFDocs checks pass.
- **Rationale:** Stable URLs and sane redirect behavior prevent retrieval drift and broken tool references.
- **Reference:** [AFDocs reference](https://afdocs.dev)

**Checks**

- ✅ **Http Status Codes** — All 3 pages return proper error codes for bad URLs
- ✅ **Redirect Behavior** — All 3 redirect(s) across 3 pages are same-host HTTP redirects

### Observability and Content Health

- **Score:** 78/100 · **Status:** fail
- **Summary:** 1 failed across 3 AFDocs checks.
- **Rationale:** Coverage, parity, and cache behavior determine whether agents can trust the content they retrieve.
- **Reference:** [AFDocs reference](https://afdocs.dev)

**Checks**

- ❌ **LLMS TXT Freshness** — llms.txt covers 1/2 sitemap doc pages (50%); 1 missing Your llms.txt covers less than 80% of your site's pages. 1 live pages are missing from the index. Regenerate llms.txt from your sitemap or build pipeline.
- ✅ **Markdown Content Parity** — All 2 pages have equivalent markdown and HTML content (avg 0% missing); 1 failed to fetch
- ✅ **Cache Header Hygiene** — All 4 endpoints have appropriate cache headers

### Authentication and Access

- **Score:** 100/100 · **Status:** partial
- **Summary:** 1 skipped across 2 AFDocs checks.
- **Rationale:** Agents need either public access or a clear alternative path when documentation is gated behind auth.
- **Reference:** [AFDocs reference](https://afdocs.dev)

**Checks**

- ✅ **Auth Gate Detection** — All 3 pages are publicly accessible
- ⏭️ **Auth Alternative Access** — All docs pages are publicly accessible; no alternative access paths needed

### Full Content Discoverability

- **Score:** 100/100 · **Status:** pass
- **Summary:** llms-full.txt passes all checks.
- **Rationale:** A full-document snapshot gives long-context agents a single canonical corpus to ingest without repeated crawling.
- **Reference:** [llms-full.txt guide](https://www.mintlify.com/docs/ai/llmstxt#llms-full-txt)

**Checks**

- ✅ **LLMS Full Exists** — Found llms-full.txt.
- ✅ **LLMS Full Size** — llms-full.txt size is within the expected range.
- ✅ **LLMS Full Valid** — llms-full.txt has a recognizable markdown structure.
- ✅ **LLMS Full Links Resolve** — llms-full.txt links resolve successfully.

### Agent Skills

- **Score:** 100/100 · **Status:** pass
- **Summary:** skill.md passes all checks.
- **Rationale:** Agent skills provide product-specific operating guidance that plain documentation pages do not encode on their own.
- **Reference:** [skill.md guide](https://www.mintlify.com/docs/ai/skillmd)

**Checks**

- ✅ **Skill MD** — Found an agent skill definition.

### MCP Server

- **Score:** 0/100 · **Status:** fail
- **Summary:** MCP has 1 failing check.
- **Rationale:** A discoverable MCP server lets agents use first-class tools instead of scraping pages and inferring behavior.
- **Reference:** [MCP guide](https://www.mintlify.com/docs/ai/model-context-protocol)

**Checks**

- ❌ **MCP Server Discoverable** — No MCP server was discovered at the expected endpoints.
- ⏭️ **MCP Tool Count** — Skipped because the MCP server was not discoverable.
