code.jasonmorris.com/presents
https://code.jasonmorris.com/presents/
Last scanned: Jul 9, 2026, 6:16 AM
Lighthouse scores
96%
performance
100%
accessibility
100%
bestPractices
100%
seo
100%
Agents
Web vitals
| Metric | Value |
|---|---|
| First Contentful Paint | 1.4s |
| Largest Contentful Paint | 2.7s |
| Total Blocking Time | 0ms |
| Cumulative Layout Shift | 0 |
| Speed Index | 1.4s |
| Total page weight | 181.5KB |
| Document | 4.3KB |
| Script | 6.2KB |
Agents feedback
| Status | Audit | Details |
|---|---|---|
| Pass (All audits passed) | Accessibility tree is well-formed | A well-formed accessibility tree helps AI agents to navigate and interact with the page. |
| Info | WebMCP form coverage | Consider adding WebMCP annotations to the forms listed below. This helps AI agents identify and interact with these forms more reliably. |
| Info | WebMCP tools registered | Lists the WebMCP tools registered at the time of analysis. |
| Info | WebMCP schemas are valid | Valid WebMCP schemas are required for AI agents to understand and interact with tools correctly. Please fix any errors or warnings reported by the browser. |
| Pass (0) | Cumulative Layout Shift | Cumulative Layout Shift measures the movement of visible elements within the viewport. Learn more about the Cumulative Layout Shift metric. |
| Info | llms.txt follows recommendations | If your llms.txt file does not follow recommendations, large language models may not be able to understand how you want your website to be crawled or used for training. The llms.txt file should be a Markdown file containing at least one H1 header. |
Lighthouse score trends
Score history
| Date | Performance | Accessibility | Best practices | SEO | Agents |
|---|---|---|---|---|---|
| Jun 9, 2026 | 91% | 100% | 100% | 100% | — |
| Jun 10, 2026 | 89% | 100% | 100% | 100% | — |
| Jun 11, 2026 | 92% | 100% | 100% | 100% | — |
| Jun 12, 2026 | 86% | 100% | 100% | 100% | — |
| Jun 13, 2026 | 94% | 100% | 100% | 100% | — |
| Jun 14, 2026 | 95% | 100% | 100% | 100% | — |
| Jun 15, 2026 | 93% | 100% | 100% | 100% | — |
| Jun 16, 2026 | 94% | 100% | 100% | 100% | — |
| Jun 17, 2026 | 91% | 100% | 100% | 100% | — |
| Jun 18, 2026 | 95% | 100% | 100% | 100% | — |
| Jun 19, 2026 | 94% | 100% | 100% | 100% | — |
| Jun 20, 2026 | 95% | 100% | 100% | 100% | — |
| Jun 21, 2026 | 92% | 100% | 100% | 100% | — |
| Jun 23, 2026 | 95% | 100% | 100% | 100% | — |
| Jun 24, 2026 | 95% | 100% | 100% | 100% | — |
| Jun 25, 2026 | 92% | 100% | 100% | 100% | — |
| Jun 26, 2026 | 91% | 100% | 100% | 100% | — |
| Jun 27, 2026 | 90% | 100% | 100% | 100% | — |
| Jun 28, 2026 | 91% | 100% | 100% | 100% | — |
| Jun 28, 2026 | 94% | 100% | 100% | 100% | 100% |
| Jun 30, 2026 | 92% | 100% | 100% | 100% | 100% |
| Jul 1, 2026 | 93% | 100% | 100% | 100% | 100% |
| Jul 2, 2026 | 92% | 100% | 100% | 100% | 100% |
| Jul 3, 2026 | 93% | 100% | 100% | 100% | 100% |
| Jul 4, 2026 | 94% | 100% | 100% | 100% | 100% |
| Jul 5, 2026 | 94% | 100% | 100% | 100% | 100% |
| Jul 6, 2026 | 93% | 100% | 100% | 100% | 100% |
| Jul 7, 2026 | 92% | 100% | 100% | 100% | 100% |
| Jul 8, 2026 | 93% | 100% | 100% | 100% | 100% |
| Jul 9, 2026 | 96% | 100% | 100% | 100% | 100% |
axe-core results
No violations found (24 rules passed)
HTML validation
45 errors
| Rule | Message | Line |
|---|---|---|
valid-id |
element id "2" must begin with a letter | 31:45 |
valid-id |
element id "3" must begin with a letter | 40:45 |
valid-id |
element id "4" must begin with a letter | 49:45 |
valid-id |
element id "5" must begin with a letter | 58:45 |
valid-id |
element id "6" must begin with a letter | 69:45 |
valid-id |
element id "7" must begin with a letter | 84:45 |
valid-id |
element id "8" must begin with a letter | 99:45 |
valid-id |
element id "9" must begin with a letter | 112:45 |
valid-id |
element id "10" must begin with a letter | 125:45 |
valid-id |
element id "11" must begin with a letter | 137:45 |
valid-id |
element id "12" must begin with a letter | 153:45 |
valid-id |
element id "13" must begin with a letter | 162:45 |
valid-id |
element id "14" must begin with a letter | 172:45 |
valid-id |
element id "15" must begin with a letter | 188:45 |
valid-id |
element id "16" must begin with a letter | 206:45 |
valid-id |
element id "17" must begin with a letter | 244:45 |
valid-id |
element id "18" must begin with a letter | 260:45 |
valid-id |
element id "19" must begin with a letter | 312:45 |
valid-id |
element id "20" must begin with a letter | 364:45 |
valid-id |
element id "21" must begin with a letter | 416:45 |
valid-id |
element id "22" must begin with a letter | 468:45 |
valid-id |
element id "23" must begin with a letter | 478:45 |
valid-id |
element id "24" must begin with a letter | 490:45 |
valid-id |
element id "25" must begin with a letter | 502:45 |
valid-id |
element id "26" must begin with a letter | 514:45 |
valid-id |
element id "27" must begin with a letter | 526:50 |
valid-id |
element id "28" must begin with a letter | 530:51 |
valid-id |
element id "29" must begin with a letter | 534:51 |
valid-id |
element id "30" must begin with a letter | 538:45 |
valid-id |
element id "31" must begin with a letter | 542:45 |
valid-id |
element id "32" must begin with a letter | 550:45 |
valid-id |
element id "33" must begin with a letter | 556:45 |
valid-id |
element id "34" must begin with a letter | 566:45 |
valid-id |
element id "35" must begin with a letter | 574:45 |
valid-id |
element id "36" must begin with a letter | 579:45 |
valid-id |
element id "37" must begin with a letter | 584:51 |
valid-id |
element id "38" must begin with a letter | 597:45 |
valid-id |
element id "39" must begin with a letter | 609:51 |
attribute-allowed-values |
Attribute "height" has invalid value "100%" | 611:44 |
attribute-allowed-values |
Attribute "height" has invalid value "100%" | 612:39 |
attribute-allowed-values |
Attribute "height" has invalid value "100%" | 613:45 |
valid-id |
element id "40" must begin with a letter | 616:45 |
valid-id |
element id "41" must begin with a letter | 632:45 |
valid-id |
element id "42" must begin with a letter | 648:65 |
valid-id |
element id "43" must begin with a letter | 652:45 |
Custom checks
1 warning
warning target-size: 7 targets smaller than 24×24px
| Element | Detail |
|---|---|
a |
88×22px |
a |
55×8px |
a |
5×28px |
a |
119×19px |
a |
37×9px |
a |
21×5px |
a |
151×18px |
IBM Equal Access
44 violations found
| Rule | Message | Snippet |
|---|---|---|
element_tabbable_role_valid |
The tabbable element does not have a valid widget role | <section tabindex="0" id="cover" class="slide"> |
element_tabbable_role_valid |
The tabbable element does not have a valid widget role | <section id="2" tabindex="0" class="slide"> |
element_tabbable_role_valid |
The tabbable element does not have a valid widget role | <section id="3" tabindex="0" class="slide"> |
element_tabbable_role_valid |
The tabbable element does not have a valid widget role | <section id="4" tabindex="0" class="slide"> |
element_tabbable_role_valid |
The tabbable element does not have a valid widget role | <section id="5" tabindex="0" class="slide"> |
element_tabbable_role_valid |
The tabbable element does not have a valid widget role | <section id="6" tabindex="0" class="slide"> |
element_tabbable_role_valid |
The tabbable element does not have a valid widget role | <section id="7" tabindex="0" class="slide"> |
element_tabbable_role_valid |
The tabbable element does not have a valid widget role | <section id="8" tabindex="0" class="slide"> |
element_tabbable_role_valid |
The tabbable element does not have a valid widget role | <section id="9" tabindex="0" class="slide"> |
element_tabbable_role_valid |
The tabbable element does not have a valid widget role | <section id="10" tabindex="0" class="slide"> |
element_tabbable_role_valid |
The tabbable element does not have a valid widget role | <section id="11" tabindex="0" class="slide"> |
element_tabbable_role_valid |
The tabbable element does not have a valid widget role | <section id="12" tabindex="0" class="slide"> |
element_tabbable_role_valid |
The tabbable element does not have a valid widget role | <section id="13" tabindex="0" class="slide"> |
element_tabbable_role_valid |
The tabbable element does not have a valid widget role | <section id="14" tabindex="0" class="slide"> |
element_tabbable_role_valid |
The tabbable element does not have a valid widget role | <section id="15" tabindex="0" class="slide"> |
element_tabbable_role_valid |
The tabbable element does not have a valid widget role | <section id="16" tabindex="0" class="slide"> |
element_tabbable_role_valid |
The tabbable element does not have a valid widget role | <section id="17" tabindex="0" class="slide"> |
element_tabbable_role_valid |
The tabbable element does not have a valid widget role | <section id="18" tabindex="0" class="slide"> |
element_tabbable_role_valid |
The tabbable element does not have a valid widget role | <section id="19" tabindex="0" class="slide"> |
element_tabbable_role_valid |
The tabbable element does not have a valid widget role | <section id="20" tabindex="0" class="slide"> |
element_tabbable_role_valid |
The tabbable element does not have a valid widget role | <section id="21" tabindex="0" class="slide"> |
element_tabbable_role_valid |
The tabbable element does not have a valid widget role | <section id="22" tabindex="0" class="slide"> |
element_tabbable_role_valid |
The tabbable element does not have a valid widget role | <section id="23" tabindex="0" class="slide"> |
element_tabbable_role_valid |
The tabbable element does not have a valid widget role | <section id="24" tabindex="0" class="slide"> |
element_tabbable_role_valid |
The tabbable element does not have a valid widget role | <section id="25" tabindex="0" class="slide"> |
element_tabbable_role_valid |
The tabbable element does not have a valid widget role | <section id="26" tabindex="0" class="slide"> |
element_tabbable_role_valid |
The tabbable element does not have a valid widget role | <section id="27" tabindex="0" class="slide gray"> |
element_tabbable_role_valid |
The tabbable element does not have a valid widget role | <section id="28" tabindex="0" class="slide black"> |
element_tabbable_role_valid |
The tabbable element does not have a valid widget role | <section id="29" tabindex="0" class="slide clear"> |
element_tabbable_role_valid |
The tabbable element does not have a valid widget role | <section id="30" tabindex="0" class="slide"> |
element_tabbable_role_valid |
The tabbable element does not have a valid widget role | <section id="31" tabindex="0" class="slide"> |
element_tabbable_role_valid |
The tabbable element does not have a valid widget role | <section id="32" tabindex="0" class="slide"> |
element_tabbable_role_valid |
The tabbable element does not have a valid widget role | <section id="33" tabindex="0" class="slide"> |
element_tabbable_role_valid |
The tabbable element does not have a valid widget role | <section id="34" tabindex="0" class="slide"> |
text_contrast_sufficient |
Text contrast of 3.87 with its background is less than the WCAG AA minimum requirements for text of size 12px and weight of 400 | <figcaption class="copyright bottom"> |
element_tabbable_role_valid |
The tabbable element does not have a valid widget role | <section id="35" tabindex="0" class="slide"> |
element_tabbable_role_valid |
The tabbable element does not have a valid widget role | <section id="36" tabindex="0" class="slide"> |
element_tabbable_role_valid |
The tabbable element does not have a valid widget role | <section id="37" tabindex="0" class="slide clear"> |
element_tabbable_role_valid |
The tabbable element does not have a valid widget role | <section id="38" tabindex="0" class="slide"> |
element_tabbable_role_valid |
The tabbable element does not have a valid widget role | <section id="39" tabindex="0" class="slide clear"> |
element_tabbable_role_valid |
The tabbable element does not have a valid widget role | <section id="40" tabindex="0" class="slide"> |
element_tabbable_role_valid |
The tabbable element does not have a valid widget role | <section id="41" tabindex="0" class="slide"> |
element_tabbable_role_valid |
The tabbable element does not have a valid widget role | <section id="42" tabindex="0" data-timing="00:03" class="slide"> |
element_tabbable_role_valid |
The tabbable element does not have a valid widget role | <section id="43" tabindex="0" class="slide"> |
Accessibility Insights results
No violations found (17 rules passed)
Link checker
All 15 links valid