Skip to main content

Accessibility Conformance Report

VPAT 2.5 (WCAG Edition) self-assessed conformance report for the KeepTheScore web application — sport scoreboard overlays, public board displays, signup, board creation, and control panels.

Based on VPAT® Version 2.5 (WCAG Edition) — Voluntary Product Accessibility Template® published by the Information Technology Industry Council (ITI).

Product information

Field Value
Name of product / version KeepTheScore — web application (rolling release, version dated by report date)
Product description Web-based platform for creating, displaying, and live-scoring scoreboards and leaderboards. Includes sport-specific control panels and OBS Studio broadcast overlays for soccer, football, and baseball.
Date 2026-05-20
Contact information [email protected]
Notes Self-attested by the vendor. Evaluation focused on the product surfaces most relevant to higher-education procurement: the OBS scoreboard overlay (primary), public scoreboard display pages, account signup and login, board creation, and the in-product control panel. Marketing pages were reviewed at a high level. See Scope below.
Evaluation methods used Manual code review, manual keyboard-only testing in Chrome and Firefox, automated scanning with axe DevTools, and screen-reader spot checks (NVDA on Windows, VoiceOver on macOS) on the OBS soccer overlay and the signup → create board → score-a-game flow.

Applicable standards / guidelines

This report covers the following standards:

Standard / guideline Included in report
WCAG 2.1 Level A (30 success criteria) Yes
WCAG 2.1 Level AA (20 success criteria) Yes
WCAG 2.2 Level A — new criteria only Yes
WCAG 2.2 Level AA — new criteria only Yes
WCAG 2.x Level AAA No
Section 508 (Revised, 36 CFR Part 1194) Not in this revision (largely overlaps WCAG 2.1 AA; can be added on request)
EN 301 549 Not in this revision

Terms

The terms used in the conformance level information are defined as follows:

  • Supports — The functionality of the product has at least one method that meets the criterion without known defects, or meets with equivalent facilitation.
  • 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.
  • Not Evaluated — The product has not been evaluated against the criterion. (Used only for WCAG 2.x Level AAA criteria, which are out of scope for this report.)

Scope

In-scope surfaces:

  • OBS scoreboard overlays — soccer (SoccerOverlay), football (FootballOverlay), baseball (BaseballOverlay), etc. These are the broadcast-graphic overlays customers add as a browser source in OBS Studio.
  • Public scoreboard display pages (/board/<token>/) for all sport and leaderboard types.
  • Account signup, login, password reset.
  • Board creation flow (/new/<board_type>/).
  • Sport scoreboard control panel (the live-scoring UI used by the operator).
  • Marketing pages (homepage, pricing, documentation) — reviewed at high level.

Out of scope:

  • Third-party Stripe checkout pages (covered by Stripe's own accessibility statements).
  • Embedded third-party widgets (YouTube, Hyvor Talk comments, social embeds).
  • User-generated content (board names, team names, custom logos uploaded by operators) — the platform provides the tools; content accessibility is the operator's responsibility.
  • Internal admin console (not customer-facing).

WCAG 2.1 Report

Table 1: Success Criteria, Level A

Criterion Conformance level Remarks and explanations
1.1.1 Non-text Content Partially Supports Most <img> elements carry meaningful alt text (e.g. team logos, QR codes, overlay background PNGs). Decorative icons use empty alt="". Gap: team logos rendered via CSS background-image have no text alternative.
1.2.1 Audio-only and Video-only (Prerecorded) Not Applicable The product does not provide audio-only or video-only media.
1.2.2 Captions (Prerecorded) Not Applicable The product does not provide prerecorded synchronized media.
1.2.3 Audio Description or Media Alternative (Prerecorded) Not Applicable The product does not provide prerecorded synchronized media.
1.3.1 Info and Relationships Supports Forms use <label for="..."> associations consistently (e.g. setup panels for each sport). Semantic elements (<button>, <input>, <select>, <nav>, <table>) are used in scoreboard and leaderboard markup.
1.3.2 Meaningful Sequence Supports Reading order follows DOM order. CSS positioning of the OBS overlay (absolute positioning over a broadcast graphic) is visual only and does not affect programmatic order.
1.3.3 Sensory Characteristics Supports Instructions and controls do not rely solely on shape, color, size, visual location, orientation, or sound.
1.4.1 Use of Color Partially Supports Score color (home/away) is configurable and serves as a visual cue, but team identity is also conveyed by text labels. Gap: some inline error states in forms are conveyed by color alone without a redundant text or icon cue.
1.4.2 Audio Control Supports Sport scoreboards include short event sounds (timer-expiry buzzer; hockey goal horn). Audio on the public display is opt-in via an "Enable Audio on Public View" setting that defaults to disabled; operators can re-disable at any time. Browser autoplay policy requires a user-interaction unlock before any sound plays. Individual clips are well under three seconds.
2.1.1 Keyboard Partially Supports Primary controls are real <button> and <input> elements and are keyboard-operable. Gap: three card-header toggles in the overlay control panels (SoccerOverlay, FootballOverlay, BaseballOverlay) are implemented as <div> with @click and are not reachable via the keyboard. Tracked for remediation.
2.1.2 No Keyboard Trap Supports No keyboard traps detected. Modal dialogs (Bootstrap) trap focus only while open and release on dismiss.
2.1.4 Character Key Shortcuts Supports Where single-character shortcuts exist (e.g. score increment) they are scoped to the control panel and are not active when the user is typing into a form field.
2.2.1 Timing Adjustable Supports Game clocks in sport scoreboards are operator-controlled (start/stop/adjust) and not session-time-out triggers. The product itself does not enforce time limits on user actions.
2.2.2 Pause, Stop, Hide Supports Game clocks and animated celebrations can be paused or disabled via the control panel. A global prefers-reduced-motion: reduce media query collapses animation and transition durations across the marketing site and scoreboard, so users who request reduced motion at the OS level no longer see celebration animations or non-essential motion.
2.3.1 Three Flashes or Below Threshold Supports No content flashes more than three times per second.
2.4.1 Bypass Blocks Partially Supports A "Skip to main content" link is rendered as the first focusable element of every page that uses the shared application layout (base_app.html). It is visually hidden until focused (Bootstrap visually-hidden-focusable) and moves focus to the page's <main id="main-content"> landmark. Gap: the signup, login, and password-reset templates extend base.html / page_only_back_button.html and do not currently include a skip link. Tracked for remediation.
2.4.2 Page Titled Supports All pages have descriptive <title> elements set via the templating layer.
2.4.3 Focus Order Supports Tab order follows the visual reading order of forms and control panels.
2.4.4 Link Purpose (In Context) Supports Link text is descriptive in context. The few "click here"-style links have surrounding context that makes the destination clear.
2.5.1 Pointer Gestures Supports All operations use single-pointer gestures. No multi-point or path-based gestures are required.
2.5.2 Pointer Cancellation Supports Activation occurs on the up event for buttons; users can abort by moving away before release.
2.5.3 Label in Name Supports Visible button labels match the accessible name. Where icons are used without text, aria-label matches the icon's purpose.
2.5.4 Motion Actuation Not Applicable No motion-actuated functionality.
3.1.1 Language of Page Supports Templates set <html lang="..."> based on the user's selected language.
3.2.1 On Focus Supports Focus alone does not trigger context changes.
3.2.2 On Input Supports Form field changes do not trigger unexpected context changes; submissions are explicit.
3.3.1 Error Identification Partially Supports Form validation errors are shown visually adjacent to the offending field. Inputs in the login and signup forms set aria-invalid="true" when an error is present and reference the error message via aria-describedby, so screen readers announce the problem. Gap: forms beyond login and signup (board creation, profile, payment) do not yet consistently set these attributes. Tracked for remediation.
3.3.2 Labels or Instructions Supports All form inputs have visible labels and, where helpful, inline instructional text.
4.1.1 Parsing Supports (Note: this criterion is obsolete in WCAG 2.2.) Templates produce valid HTML5; no duplicate id attributes detected in evaluated pages.
4.1.2 Name, Role, Value Supports Native HTML elements are used for interactive controls, providing role and accessible-name semantics. Custom Vue components use semantic underlying elements.

Table 2: Success Criteria, Level AA

Criterion Conformance level Remarks and explanations
1.2.4 Captions (Live) Not Applicable The product does not provide live synchronized media.
1.2.5 Audio Description (Prerecorded) Not Applicable The product does not provide prerecorded synchronized media.
1.3.4 Orientation Supports Layout adapts to both portrait and landscape; no orientation lock is imposed. The OBS overlay is rendered in OBS, which controls orientation independently.
1.3.5 Identify Input Purpose Partially Supports Signup and login fields use appropriate type attributes (email, password). Gap: not all relevant fields use the autocomplete attribute to identify their purpose (e.g. name, given-name).
1.4.3 Contrast (Minimum) Supports The dark-themed control panel uses high-contrast palettes defined in scoreboard.scss. Button text and form controls meet 4.5:1 minimum against their backgrounds. The OBS overlay color is operator-configurable; defaults meet 4.5:1 against the supplied background graphic. Operators choosing custom colors are responsible for contrast against their chosen background.
1.4.4 Resize Text Supports Text resizes up to 200% via browser zoom without loss of content or functionality. The OBS overlay is rendered at a fixed broadcast resolution (typically 1920×1080) by design; this does not impair user-facing text resizing on the rest of the product.
1.4.5 Images of Text Supports Text is rendered as real text, not images, with the exception of customer-uploaded logos (out of scope per Scope above).
1.4.10 Reflow Supports Content reflows at 320 CSS pixels wide without two-dimensional scrolling, with the same OBS-overlay exception as 1.4.4.
1.4.11 Non-text Contrast Partially Supports Form control borders and focus indicators generally meet 3:1. Gap: some icon-only buttons in sport control panels may fall below 3:1 against their backgrounds; under review.
1.4.12 Text Spacing Supports No content is lost or clipped when users override text spacing within the WCAG 2.1 limits.
1.4.13 Content on Hover or Focus Supports Hover- and focus-triggered tooltips are dismissible (by Esc or by moving away) and remain visible while the pointer is over them.
2.4.5 Multiple Ways Supports Site navigation, search (via search engines indexing public board pages), and a sitemap provide multiple ways to locate pages.
2.4.6 Headings and Labels Supports Headings describe topic or purpose; form labels describe their fields.
2.4.7 Focus Visible Partially Supports Native form controls and Bootstrap buttons show a visible focus indicator (:focus box-shadow defined in scoreboard.scss). Gap: a small number of custom interactive elements either suppress the outline or rely on browser defaults that may be hard to see against the dark theme. Tracked.
3.1.2 Language of Parts Not Applicable Pages do not contain runs of text in languages different from the page-level lang.
3.2.3 Consistent Navigation Supports Top-level navigation is consistent across the product.
3.2.4 Consistent Identification Supports Components with the same function are identified consistently (e.g. the "+1" scoring button has the same name across all sport controls).
3.3.3 Error Suggestion Partially Supports Where the user supplies an invalid input the error message describes the problem. Gap: messages do not always suggest a specific correction (e.g. password rules are stated in the help text but not echoed in the error).
3.3.4 Error Prevention (Legal, Financial, Data) Supports Payment and subscription actions are confirmed before submission. Account deletion requires explicit confirmation.
4.1.3 Status Messages Supports Every public scoreboard display includes a visually-hidden aria-live="polite" region that announces the current score whenever it changes. Coverage includes soccer, football (full board and the broadcast bug variant), basketball, baseball, hockey, lacrosse, wrestling, futsal, esports, universal scoreboard, multi-team scoreboards, and all set-based sports (tennis, pickleball, badminton, table tennis, etc.). Softball boards render through the baseball scoreboard component and therefore inherit the same score announcement. For two-team boards the announcement reads "Home name and score, Away name and score"; multi-team boards announce every team's name and score in order. Sport-specific extensions to the announcement (set, period, clock) are planned.

WCAG 2.2 Report (new criteria only)

Only criteria newly introduced in WCAG 2.2 are listed here. Criteria carried over from WCAG 2.1 are evaluated above; their conformance status applies equally to WCAG 2.2 except for SC 4.1.1 Parsing, which is obsolete in WCAG 2.2.

Table 3: WCAG 2.2 Level A

Criterion Conformance level Remarks and explanations
3.2.6 Consistent Help Supports Help links and contact methods (support email, documentation link) appear consistently across pages where they are present.
3.3.7 Redundant Entry Supports Information the user has already entered is either auto-filled or not asked for again within a single process (signup, board creation, checkout).

Table 4: WCAG 2.2 Level AA

Criterion Conformance level Remarks and explanations
2.4.11 Focus Not Obscured (Minimum) Partially Supports In most cases focused elements are not obscured by sticky headers or footers. Gap: in the control panel, the bottom sticky action bar can briefly cover focused inputs in narrow viewports.
2.5.7 Dragging Movements Supports Two drag interactions exist: (1) repositioning elements on the OBS broadcast PNG overlays (admin only) — each draggable element exposes paired numeric X/Y inputs for keyboard control; (2) the ScoreJudge ranked-voting interface (public) — entries can also be added to and removed from the ranking via dedicated buttons. File uploads use a file picker (no drag). All drag interactions have a non-drag alternative.
2.5.8 Target Size (Minimum) Partially Supports Primary touch targets in mobile control panels meet the 24×24 CSS pixel minimum. Gap: a small number of icon-only buttons in dense control toolbars may be below 24×24; under review.
3.3.8 Accessible Authentication (Minimum) Supports Authentication uses email + password with no cognitive-function test (no CAPTCHA, puzzle, or memorization step). Password fields support paste; "show password" toggle available. Email-based password reset is available as an alternative.

This Accessibility Conformance Report is provided by KeepTheScore (operated by Caspar von Wrede) for informational purposes only. It reflects our good-faith self-assessment of the product as of the report date and does not constitute a warranty of accessibility or fitness for a particular purpose. The product is under active development; conformance may change with subsequent releases. Customers requiring guaranteed conformance levels for procurement should request a re-dated report at the time of purchase.

KeepTheScore is committed to ongoing accessibility improvement. Feedback and accessibility-issue reports are welcome at [email protected] and will be acknowledged within five business days.

Appendix: Remediation roadmap

The following gaps, surfaced by this evaluation, are tracked for remediation. Items are ordered by impact.

Priority Gap Related criteria Target
1 Convert the three <div>+@click card-header toggles in SoccerOverlay.vue, FootballOverlay.vue, and BaseballOverlay.vue to real <button> elements (or add role="button", tabindex="0", and @keydown.enter/@keydown.space). 2.1.1 Next minor release
2 Extend the skip-to-content link to base.html and page_only_back_button.html so signup, login, and password-reset pages also expose a "Skip to main content" link. 2.4.1 Next minor release
3 Extend live-region announcements to include sport-specific context (set / period / quarter, game clock state) without re-announcing on every clock tick. 4.1.3 Next minor release
4 Audit icon-only buttons in dense control toolbars for ≥24×24 CSS pixel target size and ≥3:1 non-text contrast; widen padding or add contrast where needed. 2.5.8, 1.4.11 Next minor release
5 Add autocomplete attributes to remaining profile and board-creation form fields. 1.3.5 Next minor release
6 Extend aria-describedby / aria-invalid pattern to remaining forms beyond signup and login (board creation, profile, payment forms). 3.3.1, 3.3.3 Next minor release
7 Provide text alternatives (or aria-label on the containing element) for team logos rendered via CSS background-image. 1.1.1 Future release
8 Audit custom Vue components for suppressed focus outlines; add :focus-visible styles. 2.4.7 Future release
9 Re-evaluate the control panel sticky action bar to ensure it does not obscure focused inputs at narrow viewports. 2.4.11 Future release

Completed since the previous revision: skip-to-content link added to the shared application layout base_app.html (2.4.1), score-change announcements via aria-live across all public sport scoreboards (4.1.3), prefers-reduced-motion support across marketing and scoreboard CSS (2.2.2), and aria-describedby / aria-invalid on the login and signup forms (3.3.1). Remaining sub-gaps on 2.4.1 and 3.3.1 are tracked in the roadmap above.

This roadmap is provided for transparency. It is not a contractual commitment but reflects our current intent. Customers may request status updates at any time.