Voluntary Product Accessibility Template (VPAT)
WCAG 2.1 Level AA Accessibility Conformance Report
Report Date: July 23, 2026 | Version 1.0
Product Information
- Product Name
- EatPal - Meal Planning Platform
- Product Version
- Web Application v2.0
- Vendor
- EatPal, Inc.
- Contact
- [email protected]
- Evaluation Methods
- Automated testing (axe-core, Lighthouse), Manual testing, Screen reader testing (NVDA, VoiceOver)
- Applicable Standards
- WCAG 2.1 Level AA, Section 508, ADA Title III
Conformance Summary
EatPal substantially conforms to WCAG 2.1 Level AA. This conformance report documents the accessibility status of all applicable success criteria. The evaluation was conducted using a combination of automated testing tools, manual inspection, and assistive technology testing.
Conformance Level Definitions
- Supports:
- The functionality of the product has at least one method that meets the criterion without known defects.
- Partially Supports:
- Some functionality of the product does not meet the criterion.
- Does Not Support:
- The majority of product functionality does not meet the criterion.
- Not Applicable:
- The criterion is not relevant to the product.
WCAG 2.1 Level A Success Criteria
| Criterion | Success Criterion | Conformance | Remarks and Explanations |
|---|---|---|---|
| 1.1.1 | Non-text Content | Supports | All images have alt text. Decorative images use aria-hidden or empty alt. |
| 1.2.1 | Audio-only and Video-only (Prerecorded) | Not Applicable | No audio-only or video-only content. |
| 1.2.2 | Captions (Prerecorded) | Not Applicable | No prerecorded video content with audio. |
| 1.2.3 | Audio Description or Media Alternative | Not Applicable | No prerecorded video content. |
| 1.3.1 | Info and Relationships | Supports | Semantic HTML, ARIA landmarks and table headers throughout. Every prerendered page carries exactly one h1 and skips no heading level; five pages jumped h1 to h3 until September 2026 and a gate now checks the built output. |
| 1.3.2 | Meaningful Sequence | Supports | Reading order matches visual order. Tab sequence is logical. |
| 1.3.3 | Sensory Characteristics | Supports | Instructions don't rely solely on shape, size, or location. Color is not the only indicator. |
| 1.4.1 | Use of Color | Supports | Color is never the sole indicator. Icons, text, and patterns supplement color coding. |
| 1.4.2 | Audio Control | Supports | No auto-playing audio. All media requires user interaction. |
| 2.1.1 | Keyboard | Supports | All functionality accessible via keyboard. Custom components support standard keyboard patterns. |
| 2.1.2 | No Keyboard Trap | Supports | Radix-based modal dialogs trap and release focus correctly. The custom accessibility-settings panel cycles focus within itself while open and returns focus to the trigger on Escape, on the close button and on a backdrop click. |
| 2.1.4 | Character Key Shortcuts | Supports | Keyboard shortcuts use modifier keys (Ctrl/Cmd+K). Can be disabled in settings. |
| 2.2.1 | Timing Adjustable | Supports | Extended timeout option available in accessibility settings. |
| 2.2.2 | Pause, Stop, Hide | Supports | Motion can be reduced by the operating system or by the toggle in the accessibility panel, and each switch reaches both engines: framer-motion through a single MotionConfig at the app root, and CSS through a universal rule under both the media query and an html.reduce-motion class. Every looping animation stops under either. |
| 2.3.1 | Three Flashes or Below Threshold | Supports | No content flashes more than 3 times per second. |
| 2.4.1 | Bypass Blocks | Supports | Skip to main content link on every page. Activating it moves keyboard focus into the main landmark rather than only scrolling to it. |
| 2.4.2 | Page Titled | Supports | All pages have unique, descriptive titles via react-helmet-async. |
| 2.4.3 | Focus Order | Supports | Focus order follows logical reading sequence. Tab index properly managed. |
| 2.4.4 | Link Purpose (In Context) | Supports | Link text describes destination. Generic links have aria-label. |
| 2.5.1 | Pointer Gestures | Supports | No multipoint or path-based gestures required. Single pointer alternatives available. |
| 2.5.2 | Pointer Cancellation | Supports | Actions trigger on up-event. Abort mechanism available for drag operations. |
| 2.5.3 | Label in Name | Partially Supports | Text controls include their visible label in the accessible name. Icon-only buttons all expose an accessible name; icon-only controls built on other elements are still being reviewed. |
| 2.5.4 | Motion Actuation | Supports | No motion-activated functionality. All features have standard input alternatives. |
| 3.1.1 | Language of Page | Supports | HTML lang="en" attribute set on root element. |
| 3.2.1 | On Focus | Supports | Focus does not trigger unexpected context changes. |
| 3.2.2 | On Input | Supports | Form inputs do not auto-submit. Changes announced to screen readers. |
| 3.3.1 | Error Identification | Supports | Form errors clearly identified with text and ARIA. Error messages linked to fields. |
| 3.3.2 | Labels or Instructions | Supports | All form fields have visible labels. Instructions provided for complex inputs. |
| 4.1.1 | Parsing | Supports | Valid HTML5. No duplicate IDs. Proper nesting maintained. |
| 4.1.2 | Name, Role, Value | Partially Supports | Custom components use appropriate ARIA roles, states, and properties. The 38 icon-only buttons that announced as just "button" were named in September 2026 and a gate keeps them named. |
WCAG 2.1 Level AA Success Criteria
| Criterion | Success Criterion | Conformance | Remarks and Explanations |
|---|---|---|---|
| 1.2.4 | Captions (Live) | Not Applicable | No live audio content. |
| 1.2.5 | Audio Description (Prerecorded) | Not Applicable | No prerecorded video content. |
| 1.3.4 | Orientation | Supports | Content adapts to portrait and landscape. No orientation lock. |
| 1.3.5 | Identify Input Purpose | Supports | Form inputs use appropriate autocomplete attributes. |
| 1.4.3 | Contrast (Minimum) | Partially Supports | The primary brand colour was darkened in September 2026 so that body text and white-on-primary both meet 4.5:1 in the light theme, and the dark theme uses a dark foreground on primary for the same reason; both were previously below 3:1. A high-contrast mode is available. Some components still use hardcoded colours that do not remap under high-contrast mode, and an automated axe scan of the signed-in pages runs in CI against a per-page budget; migration to semantic tokens is in progress. |
| 1.4.4 | Resize Text | Supports | Text resizes up to 200% without loss of functionality. Font size settings available. |
| 1.4.5 | Images of Text | Supports | No images of text used for content. Logo is exception per WCAG. |
| 1.4.10 | Reflow | Supports | Content reflows at 320px width. Every public route is measured in a real browser at that width; the billing toggle and the contact address on this site were fixed in September 2026 after failing it. |
| 1.4.11 | Non-text Contrast | Supports | UI components and graphics meet 3:1 contrast ratio. |
| 1.4.12 | Text Spacing | Supports | Content adapts to user-adjusted text spacing without loss of functionality. |
| 1.4.13 | Content on Hover or Focus | Supports | Tooltips are dismissible, hoverable, and persistent until dismissed. |
| 2.4.5 | Multiple Ways | Supports | Navigation menu, search, sitemap, and command palette provide multiple paths. |
| 2.4.6 | Headings and Labels | Supports | Headings and labels describe topic or purpose clearly. |
| 2.4.7 | Focus Visible | Supports | Focus indicators visible on all interactive elements. Enhanced focus mode available. |
| 3.1.2 | Language of Parts | Supports | Single language (English) used throughout. lang attribute updated if content language changes. |
| 3.2.3 | Consistent Navigation | Supports | Navigation components appear consistently across pages. |
| 3.2.4 | Consistent Identification | Supports | Components with same function have consistent labels and appearance. |
| 3.3.3 | Error Suggestion | Supports | Error messages provide suggestions for correction when possible. |
| 3.3.4 | Error Prevention (Legal, Financial, Data) | Supports | Confirmation dialogs for destructive actions. Undo available for data changes. |
| 4.1.3 | Status Messages | Supports | Status updates announced via ARIA live regions without focus change. |
Legal Disclaimer
This Voluntary Product Accessibility Template (VPAT) is provided for informational purposes only. The information contained herein is subject to change without notice. EatPal makes no warranties, express or implied, in this document.
This document was prepared based on the product version available at the date of publication. Accessibility features may vary in different versions or configurations of the product. For the most current accessibility information, please contact [email protected].
Contact Information
For questions about this VPAT or to report accessibility issues, please contact:
- Email: [email protected]
- Phone: 1-800-EATPAL1 (1-800-328-7251)
- Accessibility Statement: https://tryeatpal.com/accessibility

