Accessability Compliance Report (VPAT)

VPAT Checklist:

aholdengouveia.github.io Accessibility Conformance Report

WCAG Edition

(Based on VPAT® Version 2.5Rev)

Name of Product/Version:
aholdengouveia.github.io — Personal and Educational Website (no version number; content is continuously updated)
Report Date:
May 2026
Product Description:
An educational website created by CS educator Adrianna Holden-Gouveia at Northern Essex Community College. The site contains course materials for IT and computer science courses (Introduction to Linux, Introduction to Data, Introduction to Security, Advanced Security, Advanced Database Management, Linux Administration), how-to guides, smart home project documentation, a CV/about page, and social media links. Built with Jekyll and Bootstrap 4, served as a GitHub Pages static site. The site includes 379 HTML pages across multiple course sections plus standalone pages.
Contact Information:
admin@aholdengouveia.name
Notes:

This report was produced using automated testing with pa11y (April 2026) across all 379 HTML pages, supplemented by manual source code review. Multiple accessibility improvements were implemented following the audit and are documented in the project repository in ACCESSIBILITY_IMPROVEMENTS.md and WCAG_TODO.md.

The site uses the Bootstrap 4 carousel on the homepage, which auto-advances slides. This creates partial compliance issues for criteria 2.2.1 (Timing Adjustable) and 2.2.2 (Pause, Stop, Hide) that are noted in the tables below.

No forms requiring user input are present anywhere on the site; all form-related criteria are therefore Not Applicable.

No audio-only, video-only, or synchronized media content is hosted on the site; YouTube content is embedded via iframe as third-party platform content not under site control.

Evaluation Methods Used:
  • Automated accessibility testing with pa11y (command-line, Puppeteer-based WCAG auditor) across all 379 HTML pages
  • Manual review of HTML, CSS, and Jekyll layout source code
  • Color contrast verification using the WebAIM Contrast Checker
  • Keyboard navigation testing (Tab, Shift+Tab, Enter, Space, Escape)
  • Review of ARIA landmark usage, heading structure, and semantic HTML5 element usage
  • Testing conducted by the site author with full knowledge of product functionality and content

Applicable Standards/Guidelines

This report covers the degree of conformance for the following accessibility standards/guidelines:

Standard/Guideline Included In Report
Web Content Accessibility Guidelines 2.0 Level A: Yes
Level AA: Yes
Level AAA: Yes
Web Content Accessibility Guidelines 2.1 Level A: Yes
Level AA: Yes
Level AAA: Yes
Web Content Accessibility Guidelines 2.2 Level A: Yes
Level AA: Yes
Level AAA: Yes

Terms

The terms used in the Conformance Level column are defined as follows:

WCAG 2.x Report

Note: When reporting on conformance with the WCAG 2.x Success Criteria, they are scoped for full pages, complete processes, and accessibility-supported ways of using technology as documented in the WCAG 2.0 Conformance Requirements.

Table 1: Success Criteria, Level A

Notes: Criteria 2.2.1 and 2.2.2 are Partially Supports due to the homepage carousel lacking a keyboard-accessible pause or stop control.

Criteria Conformance Level Remarks and Explanations
Perceivable — Text Alternatives
1.1.1 Non-text Content (Level A) Supports All images include descriptive alt text. Carousel images have descriptive alt attributes. Icon-only social media links on the CV page use aria-label attributes. Carousel prev/next control icons use aria-hidden="true" with adjacent sr-only text. The favicon is a decorative icon and does not require alt text.
Perceivable — Time-based Media
1.2.1 Audio-only and Video-only (Prerecorded) (Level A) Not Applicable No audio-only or video-only prerecorded content is hosted on this site. YouTube videos are embedded as third-party iframe content managed by the YouTube platform and are not site-produced media.
1.2.2 Captions (Prerecorded) (Level A) Not Applicable No prerecorded synchronized media (video with audio) is hosted on this site. YouTube embeds are third-party platform content; caption availability is outside site control.
1.2.3 Audio Description or Media Alternative (Prerecorded) (Level A) Not Applicable No prerecorded synchronized media is hosted on this site.
Perceivable — Adaptable
1.3.1 Info and Relationships (Level A) Supports Semantic HTML5 elements are used throughout: <header>, <nav>, <main>, <footer>, <section>. Navbar dropdowns use aria-labelledby. After accessibility improvements, heading hierarchy is logically nested across all pages with no skipped levels. Tables in course material pages use th scope="col" for column headers. Lists are properly marked up with ul/ol/li elements.
1.3.2 Meaningful Sequence (Level A) Supports Content reading order in the DOM matches the intended visual presentation order. CSS layout (Bootstrap grid) does not reorder content in a way that would confuse assistive technology users.
1.3.3 Sensory Characteristics (Level A) Supports Instructions do not rely solely on shape, color, size, visual location, or sound. Navigation labels are text-based. No instructions reference sensory characteristics like "the button on the right" without additional descriptors.
Perceivable — Distinguishable
1.4.1 Use of Color (Level A) Supports Links are underlined in addition to being a different color from body text, so color is not the sole visual means of indicating links. No other information is conveyed by color alone.
1.4.2 Audio Control (Level A) Not Applicable No audio plays automatically on the site.
Operable — Keyboard Accessible
2.1.1 Keyboard (Level A) Partially Supports All navigation links, buttons, and interactive controls are keyboard accessible and operable. The homepage Bootstrap 4 carousel can be navigated with Previous/Next buttons via keyboard. However, there is no keyboard-accessible mechanism to pause or stop the carousel auto-advance, meaning the timing and motion control cannot be operated by keyboard alone (related to 2.2.1 and 2.2.2).
2.1.2 No Keyboard Trap (Level A) Supports No keyboard traps are present. Users can navigate freely through all components using Tab/Shift+Tab without becoming trapped in any element or widget.
2.1.4 Character Key Shortcuts (Level A 2.1 and 2.2) Not Applicable No single-character key shortcuts are implemented on the site.
Operable — Enough Time
2.2.1 Timing Adjustable (Level A) Partially Supports The homepage carousel auto-advances slides using Bootstrap's data-ride="carousel" attribute. There is no user control to turn off, adjust, or extend the timing of this animation. The carousel pauses on mouse hover, but this does not satisfy the requirement for users who cannot use a mouse. All other pages have no time limits.
2.2.2 Pause, Stop, Hide (Level A) Partially Supports The homepage carousel moves automatically and does not include a dedicated pause/stop/hide button. The Bootstrap carousel provides Previous/Next navigation buttons but no control to permanently stop the auto-advancement. Keyboard users have no mechanism to pause the carousel. All other site content is static.
Operable — Seizures and Physical Reactions
2.3.1 Three Flashes or Below Threshold (Level A) Supports No content on the site flashes more than three times per second. The carousel slide transitions are smooth CSS transitions, not flashing effects.
Operable — Navigable
2.4.1 Bypass Blocks (Level A) Supports A skip navigation link ("Skip to main content") is implemented in the default layout and becomes visible on keyboard focus. It correctly targets id="main-content" on the <main> element. This was verified and corrected during the accessibility audit (WCAG_TODO item #6).
2.4.2 Page Titled (Level A) Supports All pages have descriptive <title> elements. Jekyll pages receive their title from the page.title front matter variable. Raw HTML lab pages include explicit <title> tags generated by the tex-to-html conversion tool.
2.4.3 Focus Order (Level A) Supports Tab order follows a logical sequence: skip link then navbar brand then navbar links then main content then footer links. The DOM order matches the intended visual reading order.
2.4.4 Link Purpose (In Context) (Level A) Supports Link purposes can be determined from the link text in context. Generic call-to-action buttons (e.g., "View details »") appear immediately after descriptive headings and paragraphs that provide adequate context for screen reader users navigating in reading order. Icon-only social media links use aria-label attributes.
Operable — Input Modalities
2.5.1 Pointer Gestures (Level A 2.1 and 2.2) Not Applicable No content requires multipoint or path-based pointer gestures.
2.5.2 Pointer Cancellation (Level A 2.1 and 2.2) Supports No custom drag operations or down-event actions are used. All interactions use standard browser click events that support pointer cancellation.
2.5.3 Label in Name (Level A 2.1 and 2.2) Supports Visible text labels for interactive controls match or are contained within their accessible names. The navbar toggler button has aria-label="Toggle navigation". Social media icon links have aria-labels that describe the destination.
2.5.4 Motion Actuation (Level A 2.1 and 2.2) Not Applicable No functionality is triggered by device motion or orientation changes.
Understandable — Readable
3.1.1 Language of Page (Level A) Supports The <html> element includes lang="en" on all pages using the default Jekyll layout. Raw HTML lab pages include lang="en-US" generated by the tex-to-html conversion tool. iframes on the CV page include lang="en" attributes.
Understandable — Predictable
3.2.1 On Focus (Level A) Supports No context changes occur when a component receives focus. Dropdown menus open on focus as expected navigation behavior and do not cause page navigation or other unexpected changes.
3.2.2 On Input (Level A) Supports No forms are present on the site that could auto-submit or change context on input.
3.2.6 Consistent Help (Level A 2.2 only) Supports Contact information (admin@aholdengouveia.name) and an "About me" link appear consistently in the footer across all pages using the default layout, always in the same relative position.
Understandable — Input Assistance
3.3.1 Error Identification (Level A) Not Applicable No forms requiring user input are present on the site.
3.3.2 Labels or Instructions (Level A) Not Applicable No forms requiring user input are present on the site.
3.3.7 Redundant Entry (Level A 2.2 only) Not Applicable No forms or multi-step processes requiring data entry are present.
Robust — Compatible
4.1.1 Parsing (Level A) Supports WCAG 2.0 and 2.1: Always Supports per the September 2023 errata update. WCAG 2.2: This criterion is obsolete and removed. For WCAG 2.0/2.1, the September 2023 errata update indicates this criterion is always satisfied. See the WCAG 2.0 Editorial Errata and the WCAG 2.1 Editorial Errata.
4.1.2 Name, Role, Value (Level A) Supports ARIA attributes are properly used throughout: the navbar toggler has aria-label, aria-controls, and aria-expanded; dropdown menus have aria-haspopup and aria-expanded on triggers and aria-labelledby on menu containers; carousel prev/next controls use aria-hidden="true" on decorative icons with adjacent sr-only text; icon-only social media links have aria-label. After the accessibility audit, all three navbar dropdown triggers were given unique IDs (WCAG_TODO item #3).

Table 2: Success Criteria, Level AA

Notes: Criterion 2.4.11 is Partially Supports due to the fixed-position navbar and footer potentially obscuring focused elements near the viewport edges.

Criteria Conformance Level Remarks and Explanations
Perceivable — Time-based Media
1.2.4 Captions (Live) (Level AA) Not Applicable No live streaming audio or video content is present on the site.
1.2.5 Audio Description (Prerecorded) (Level AA) Not Applicable No prerecorded synchronized media is hosted on this site. YouTube embeds are third-party platform content.
Perceivable — Adaptable
1.3.4 Orientation (Level AA 2.1 and 2.2) Supports Content does not restrict display to a single orientation. Bootstrap's responsive CSS adapts to both portrait and landscape orientations on all devices.
1.3.5 Identify Input Purpose (Level AA 2.1 and 2.2) Not Applicable No forms with user input fields collecting personal information are present on the site.
Perceivable — Distinguishable
1.4.3 Contrast (Minimum) (Level AA) Supports All text meets or exceeds the 4.5:1 minimum contrast ratio. Body text (#000000 on #e7e6ef) achieves approximately 15.3:1. Link colors: unvisited #4e4068 = 7.5:1; visited #3d453f = 7.99:1 on #e7e6ef. Navbar text (#ffffff on #2c365e) = 11.7:1. Footer text (#222222 on #aab3aa) = 7.2:1. Sidebar links (#040404 on #b5b0c3) = 9.7:1. All ratios were verified and corrected during the accessibility audit.
1.4.4 Resize text (Level AA) Supports Text can be resized to 200% using browser zoom without loss of content or functionality. No text is embedded in images. Bootstrap's responsive design adapts to text resizing, and the navbar collapses to a hamburger menu at smaller widths.
1.4.5 Images of Text (Level AA) Supports No images containing text for visual styling are used on the site. All text is rendered as HTML with CSS. Logos and headings are HTML text styled with CSS.
1.4.10 Reflow (Level AA 2.1 and 2.2) Supports Content reflows appropriately at narrow viewport widths equivalent to 320 CSS pixels. Bootstrap's responsive grid collapses columns to single-column layout. The navbar collapses to a toggleable menu. Pre-formatted code blocks use white-space: pre-wrap and word-wrap: break-word to prevent horizontal overflow.
1.4.11 Non-text Contrast (Level AA 2.1 and 2.2) Supports Interactive UI components (buttons) have sufficient contrast against their backgrounds. The custom button style (#2c365e background with #e7e6ef text) meets the 3:1 minimum. Focus indicators are visible against their adjacent backgrounds.
1.4.12 Text Spacing (Level AA 2.1 and 2.2) Supports No CSS declarations override text spacing properties (line-height, letter-spacing, word-spacing, paragraph spacing) in a way that would prevent user adjustments. The site uses standard Bootstrap and custom CSS that does not restrict text spacing overrides.
1.4.13 Content on Hover or Focus (Level AA 2.1 and 2.2) Supports Navbar dropdown menus that appear on hover or focus can be dismissed by pressing Escape. The dropdown content remains visible while the pointer is over it. Users can move the pointer to the dropdown content without it disappearing.
Operable — Navigable
2.4.5 Multiple Ways (Level AA) Supports Multiple navigation mechanisms are available: the main navbar with dropdown menus, in-page section links, footer navigation links, and course pages include sidebar navigation. Lab pages include table-of-contents navigation and breadcrumb navigation.
2.4.6 Headings and Labels (Level AA) Supports After accessibility improvements, all pages use logically nested headings that accurately describe their sections. Heading levels do not skip (h1 to h2 to h3) and heading text is descriptive. This was corrected across all course layouts and SmartHome pages during the audit (WCAG_TODO items #2 and #13).
2.4.7 Focus Visible (Level AA) Supports All focusable elements have visible focus indicators. The skip navigation link becomes visible on focus with a black background and white text. Bootstrap provides default browser focus outlines on interactive elements.
2.4.11 Focus Not Obscured (Minimum) (Level AA 2.2 only) Partially Supports The fixed-position top navbar (approximately 56px tall) and fixed-position bottom footer (60px tall) may partially obscure focused elements near the top and bottom of the viewport during keyboard navigation. The body padding-top: 3rem offsets most content below the navbar, but focused elements near the top of the main content area may still be partially obscured. Users relying solely on keyboard navigation may encounter partially covered focus indicators near the viewport edges.
Operable — Input Modalities
2.5.7 Dragging Movements (Level AA 2.2 only) Not Applicable No functionality requires dragging movements.
2.5.8 Target Size (Minimum) (Level AA 2.2 only) Supports Navigation links and action buttons generally meet the 24x24 CSS pixel minimum target size requirement. Bootstrap provides adequate touch target sizes by default. Navbar links and action buttons exceed the minimum dimensions.
Understandable — Readable
3.1.2 Language of Parts (Level AA) Supports All primary content is in English. iframes on the CV page (Ko-Fi widget, PDF embed) include lang="en" attributes. No content in other languages exists without appropriate lang attributes.
Understandable — Predictable
3.2.3 Consistent Navigation (Level AA) Supports The navbar and footer appear consistently and in the same order across all pages using the default Jekyll layout. Navigation order and structure do not change between pages.
3.2.4 Consistent Identification (Level AA) Supports Recurring components use consistent labels and identification across the site. Carousel prev/next controls, dropdown navigation, and action buttons use consistent labeling. After the accessibility audit, all navbar dropdowns have unique IDs that do not conflict.
Understandable — Input Assistance
3.3.3 Error Suggestion (Level AA) Not Applicable No forms are present on the site.
3.3.4 Error Prevention (Legal, Financial, Data) (Level AA) Not Applicable No forms with legal, financial, or personal data transactions are present.
3.3.8 Accessible Authentication (Minimum) (Level AA 2.2 only) Not Applicable No authentication or login functionality is present on the site.
Robust — Compatible
4.1.3 Status Messages (Level AA 2.1 and 2.2) Not Applicable No dynamic status messages are generated by the site that are not already in the focused element's context.

Table 3: Success Criteria, Level AAA

Notes: Criteria 2.2.3 and 2.2.4 are Does Not Support due to the homepage carousel auto-advancement with no mechanism to turn off. Several criteria are Not Evaluated as permitted for AAA criteria. Multiple AAA criteria are Not Applicable due to the static, form-free nature of the site.

Criteria Conformance Level Remarks and Explanations
Perceivable — Time-based Media
1.2.6 Sign Language (Prerecorded) (Level AAA) Not Applicable No prerecorded synchronized media is hosted on this site.
1.2.7 Extended Audio Description (Prerecorded) (Level AAA) Not Applicable No prerecorded synchronized media is hosted on this site.
1.2.8 Media Alternative (Prerecorded) (Level AAA) Not Applicable No prerecorded synchronized media is hosted on this site.
1.2.9 Audio-only (Live) (Level AAA) Not Applicable No live audio streaming content is present on the site.
Perceivable — Adaptable
1.3.6 Identify Purpose (Level AAA 2.1 and 2.2) Partially Supports UI components use ARIA landmarks and standard roles (nav, main, header, footer, button). Not all components have extended purpose identification beyond their semantic roles. Social media links on the CV page identify their purpose via aria-label. The site does not implement autocomplete purpose tokens on inputs since no forms exist.
Perceivable — Distinguishable
1.4.6 Contrast (Enhanced) (Level AAA) Supports Multiple text/background combinations exceed the 7:1 AAA threshold. Body text achieves approximately 15.3:1. Unvisited link color (#4e4068) = 7.5:1. Visited link color (#3d453f) = 7.99:1. Navbar text (#ffffff on #2c365e) = 11.7:1. Footer text (#222222 on #aab3aa) = 7.2:1. All text contrast ratios were updated to AAA levels during accessibility improvements.
1.4.7 Low or No Background Audio (Level AAA) Not Applicable No background audio is present on the site.
1.4.8 Visual Presentation (Level AAA) Partially Supports The site uses a custom background color (#e7e6ef) and black body text with high contrast. The text column width is constrained for readability. However, the site does not provide user controls to select foreground/background color combinations; users must rely on browser or OS settings to override colors.
1.4.9 Images of Text (No Exception) (Level AAA) Supports No images of text are used anywhere on the site, including for logos and headings. All text is rendered as HTML styled with CSS.
Operable — Keyboard Accessible
2.1.3 Keyboard (No Exception) (Level AAA) Partially Supports All content is keyboard accessible except for the carousel timing control (see 2.2.1). The carousel auto-advance cannot be paused or stopped via keyboard. All other functionality is fully keyboard operable.
Operable — Enough Time
2.2.3 No Timing (Level AAA) Does Not Support The homepage carousel auto-advances slides on a timer. There is no mechanism for users to turn off this time limit. All other pages have no timing requirements.
2.2.4 Interruptions (Level AAA) Does Not Support The homepage carousel auto-advances without user initiation and cannot be postponed or suppressed by the user. All other site content is static and does not produce interruptions.
2.2.5 Re-authenticating (Level AAA) Not Applicable No authentication or session management is present on the site.
2.2.6 Timeouts (Level AAA 2.1 and 2.2) Not Applicable No session timeouts or inactivity timeouts exist on the site.
Operable — Seizures and Physical Reactions
2.3.2 Three Flashes (Level AAA) Supports No content flashes at all. The carousel uses smooth CSS slide transitions, not flashing effects.
2.3.3 Animation from Interactions (Level AAA 2.1 and 2.2) Partially Supports The homepage carousel uses CSS slide animation. The lab pages implement @media (prefers-reduced-motion: reduce) in accessible-lab.css to disable animations. However, the main site carousel does not implement a prefers-reduced-motion media query to disable auto-advancing and CSS transitions for users who have requested reduced motion.
Operable — Navigable
2.4.8 Location (Level AAA) Supports Lab pages include breadcrumb navigation (Home to Section to Current Page) with aria-label="Breadcrumb" and aria-current="page" on the current item. The navbar highlights the active page with aria-current where applicable. Users can determine their location within the site structure.
2.4.9 Link Purpose (Link Only) (Level AAA) Partially Supports Some call-to-action buttons use generic text such as "View details »" and "View all classes »" that may not be uniquely identifiable when read in isolation (e.g., by a screen reader presenting a list of all links on the page). Most navigation links and all social media links have descriptive text or aria-labels.
2.4.10 Section Headings (Level AAA) Supports Pages use section headings to organize content. Following accessibility improvements, all pages have logically nested heading hierarchies with descriptive heading text and no skipped levels.
2.4.12 Focus Not Obscured (Enhanced) (Level AAA 2.2 only) Partially Supports The fixed-position top navbar and fixed-position bottom footer may fully obscure focused elements when tabbing reaches content near the viewport edges. This enhanced criterion requires that focused components are not obscured at all, which is not consistently met due to the fixed-position chrome elements.
2.4.13 Focus Appearance (Level AAA 2.2 only) Partially Supports Focus indicators are visible throughout the site. The skip navigation link has a well-defined focus state (black background, white text, white outline). Bootstrap provides default browser focus outlines. However, focus indicators do not consistently meet the enhanced requirements of a minimum 2 CSS pixel focus indicator perimeter and 3:1 contrast change ratio on all interactive components.
Operable — Input Modalities
2.5.5 Target Size (Level AAA 2.1 and 2.2) Partially Supports Most interactive elements exceed 24x24 CSS pixels, but not all consistently meet the 44x44 CSS pixel AAA target size requirement. Navbar dropdown items and some footer links may fall below 44x44 pixels on certain viewport sizes.
2.5.6 Concurrent Input Mechanisms (Level AAA 2.1 and 2.2) Supports No restrictions on input modality. Mouse, keyboard, and touch input are all supported. The site does not detect or restrict the input mechanism used.
Understandable — Readable
3.1.3 Unusual Words (Level AAA) Not Evaluated Technical course content contains IT and cybersecurity terminology (e.g., penetration testing, enumeration, SQL injection, OSINT). A comprehensive glossary or inline definitions for all unusual words and jargon have not been fully evaluated across all 379 pages.
3.1.4 Abbreviations (Level AAA) Not Evaluated Technical abbreviations are used throughout course materials (MFA, SQL, IoT, OSINT, CSIRT, etc.). Consistent inline expansion of abbreviations on first use across all 379 pages has not been fully evaluated.
3.1.5 Reading Level (Level AAA) Partially Supports Course materials are designed for community college students. Introductory courses (Introduction to Linux, Introduction to Data, Introduction to Security) maintain accessible writing aimed at beginners. Advanced courses (Advanced Security, Linux Administration, Advanced Database Management) necessarily include complex technical terminology appropriate to the subject matter. Simplified summaries are not provided for all complex passages.
3.1.6 Pronunciation (Level AAA) Not Applicable No content depends on pronunciation for meaning or disambiguation.
Understandable — Predictable
3.2.5 Change on Request (Level AAA) Supports No context changes occur unless initiated by deliberate user action. All navigation changes are triggered by user clicks or keyboard activation.
Understandable — Input Assistance
3.3.5 Help (Level AAA) Supports Context-sensitive help is provided through course materials (learning objectives, lab instructions, resources pages). Contact information is available on every page via the footer. An "About me" page provides further context about the site author.
3.3.6 Error Prevention (All) (Level AAA) Not Applicable No forms are present on the site.
3.3.9 Accessible Authentication (Enhanced) (Level AAA 2.2 only) Not Applicable No authentication or login functionality is present on the site.

Legal Disclaimer

This Accessibility Conformance Report reflects the accessibility status of aholdengouveia.github.io as evaluated in May 2026. The site is under continuous development and accessibility improvements are ongoing. This report represents a good-faith effort to accurately document conformance and known issues. "Voluntary Product Accessibility Template" and "VPAT" are registered service marks of the Information Technology Industry Council (ITI).