Skip to content

Accessibility Conformance Report

VPAT® 2.5 INT — WCAG 2.2, EN 301 549 and Revised Section 508, from the repository's own evidence

This report is published in English only: the criteria, their names and the four conformance terms are defined in English by the VPAT template, and a procurement reviewer compares it against other vendors' reports in that form. The accessibility statement around it is available in English, Turkish and German.

Download as MarkdownBack to the accessibility statement

Product
InternshipCRM — the web application (public pages, sign-in, mentee, mentor, admin and company areas)
Report date
2026-10-07
Version
The deployed version and commit are printed on /release-notes and returned by GET /api/health; the automated evidence below names the commit the baseline was last changed at.
Contact
The feedback channel (operator e-mail, response target and escalation route) is published on /accessibility; the public issue tracker is the second channel.
Notes
Self-assessment by the maintainers; no third-party audit has been commissioned. Conformance is claimed only for the product's own user interface: files users upload, e-mail as rendered by a mail client and the two embedded third parties (the Jitsi meeting room, the marketing-cookie-gated live chat on the home page) are out of scope and listed as known limitations on /accessibility.

Evaluation methods used

  • Automated: an axe-core scan (`@axe-core/playwright`) with the WCAG 2.0, 2.1 and 2.2 A and AA rule sets over every page state in `e2e/a11y-baseline.json`, each in light and dark mode, in five role contexts (public, mentee, mentor, admin, company). Critical and serious findings fail every pull request (`.github/workflows/e2e.yml`); the per-page result is the appendix generated by `npm run vpat:evidence`.
  • Targeted mechanical checks written against single criteria: contrast of specific components in both themes (`e2e/contrast-*.spec.ts`, `e2e/helpers/hoverContrast.ts`), keyboard operation of the pipeline board, the global search combobox and the calendar (`e2e/board-a11y.spec.ts`, `e2e/global-search-a11y.spec.ts`, `e2e/calendar-a11y-2153.spec.ts`), the skip link (`e2e/a11y.spec.ts`), text resize and 320 px / 400 % reflow (`e2e/font-size.spec.ts`, `e2e/mobile-layout-audit.spec.ts`), and the OS preferences reduced motion, more contrast and forced colours (`e2e/a11y-media-preferences.spec.ts`).
  • Manual: no structured screen-reader or keyboard test programme has been run yet. Every row whose only basis would be the authors' own use is marked Partially Supports and names the tracking issue, so this report does not imply coverage it does not have.
  • Scope of the evaluated URLs: exactly the page states listed in the appendix. The rest of the product follows the same components and conventions but is pending evaluation.

What was evaluated — and what was not

Exactly these 25 URLs, each in light and dark mode (50 page states), at commit f419bba (2026-10-07), with 0 open critical or serious findings frozen in the baseline. Every other URL of the product is pending evaluation; the report never implies whole-product coverage from this set.

  • /
  • /auth/signin
  • /accessibility
  • /apply/:mentorId
  • /portal
  • /portal/journey
  • /portal/goals
  • /portal/calendar
  • /account
  • /portal/requests
  • /portal/profile
  • /portal/projects
  • /portal/interactions
  • /portal/notes
  • /mentor
  • /mentor/mentees
  • /admin
  • /admin/candidates
  • /messages
  • /notifications
  • /mentor/board
  • /admin/board
  • /admin/companies/:id
  • /admin/settings
  • /company

Rule set: wcag2a, wcag2aa, wcag21a, wcag21aa, wcag22aa · Fails the build: critical, serious

Level A and AA at a glance

  • 18 · Supports
  • 32 · Partially Supports
  • 0 · Does Not Support
  • 6 · Not Applicable

Counts over the 56 WCAG 2.2 Level A and AA criteria. "Partially Supports" is used wherever the only basis would be our own use of the product — those rows name the issue a manual test programme or a fix would move.

Terms

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.

WCAG 2.2 report

Table 1: Success criteria, Level A

CriteriaConformance levelRemarks and explanationsEvidence
1.1.1 Non-text ContentPartially SupportsThe axe rules for images, icons, buttons and links (image-alt, svg-img-alt, button-name, link-name) report no violation on any scanned page state. Decorative icons are aria-hidden through the shared UI components; message and announcement images carry the file name as their alternative, which is a label, not a description — and no page outside the scan has been reviewed. manual verification pending (#2864).
1.2.1 Audio-only and Video-only (Prerecorded)SupportsThe product publishes no audio. Its only prerecorded video is the silent screen clip a release note may carry, and the release text next to it is the text alternative (releases/README.md, "media").
1.2.2 Captions (Prerecorded)Not ApplicableNo prerecorded synchronized media with audio: release clips are silent.
1.2.3 Audio Description or Media Alternative (Prerecorded)Not ApplicableNo prerecorded synchronized media with audio.
1.3.1 Info and RelationshipsPartially SupportsForm labels, list and table structure, heading levels and ARIA parent/child requirements are checked by the axe rule set on every scanned page state with no violation. Structure of the pages outside the scan and the correctness of what the automation cannot judge (whether a visual grouping is also a programmatic one) await a screen-reader pass. manual verification pending (#2864).
1.3.2 Meaningful SequencePartially SupportsLayout is CSS over a DOM that reads in visual order; the responsive shells render one DOM for every width (e2e/mobile-layout-audit.spec.ts) rather than reordering. Not verified with a screen reader. manual verification pending (#2864).
1.3.3 Sensory CharacteristicsPartially SupportsPipeline stages, offer states and notification kinds are named in text next to any colour or icon (the Badge component always carries a label). No instruction in the interface refers to a position or shape alone, to the authors' knowledge; manual verification pending (#2864).
1.4.1 Use of ColorPartially SupportsLinks inside running text are underlined (the axe link-in-text-block rule reports no violation), and every status that has a colour also has text. Charts in the analytics screens use colour plus a legend and a value table where one exists; not every chart has been reviewed. manual verification pending (#2864).
1.4.2 Audio ControlNot ApplicableNo audio plays automatically: the product plays no audio of its own, and its one autoplaying element, the release-note clip, is muted and silent.
2.1.1 KeyboardPartially SupportsThe interactions most likely to be pointer-only are covered mechanically: the pipeline board's drag-and-drop has a keyboard stage select on every card, the global search is a keyboard-operable combobox, calendar cells and the view switcher are buttons with names, dialogs manage focus. A whole-product keyboard pass has not been run. manual verification pending (#2864).
2.1.2 No Keyboard TrapSupportsDialogs hold Tab inside only while open and release it on Escape or close, restoring focus to the opener; no other component captures focus. The embedded meeting room is a third-party iframe the person can leave by closing it.
2.1.4 Character Key ShortcutsPartially SupportsOne single-character shortcut exists: "?" opens the shortcut sheet, and it is ignored while focus is in a text field; the others are chords (Mod+K) or non-printing keys. There is no setting to turn the "?" binding off or remap it. Tracked in #2864.
2.2.1 Timing AdjustablePartially SupportsA session is renewed silently while in use and expires 12 hours after the last activity without a warning or an in-page way to extend it; "keep me signed in" removes the limit for 30 days per device. Toasts auto-dismiss, but what they report stays visible on the page. Tracked in #2864.
2.2.2 Pause, Stop, HidePartially SupportsNo carousel, auto-advancing content or blinking. Loading indicators (pulse, spin) stop when the content arrives, and under prefers-reduced-motion every CSS animation and transition is neutralised. Real-time updates (unread counters, a live thread) cannot be paused from the interface. Tracked in #2864.
2.3.1 Three Flashes or Below ThresholdSupportsNothing flashes: the only animations are a skeleton pulse, a spinner, the one-per-second ping ring on the live meeting pill and slide transitions, none of which exceeds three changes per second or repeats a flash.
  • check: `grep -rhoE "animate-[a-z-]+" src | sed "s/^animate-//" | sort -u` lists ping, pulse and spin only
  • src/lib/motion.ts
2.4.1 Bypass BlocksSupportsEvery page — public and signed-in — begins with a skip link that targets the main landmark, and the shells expose header, navigation and main landmarks.
2.4.2 Page TitledSupportsPublic pages declare their own title and description per language through one helper; the root layout appends the product name. The axe document-title rule reports no violation on any scanned page state.
2.4.3 Focus OrderPartially SupportsFocus follows DOM order, which follows visual order; dialogs take initial focus and return it on close. Not verified with a keyboard pass across the product. manual verification pending (#2864).
2.4.4 Link Purpose (In Context)Partially SupportsThe axe link-name rule reports no violation on the scanned page states; "see all" style links are rendered inside the card they refer to. Not reviewed outside the scan. manual verification pending (#2864).
2.5.1 Pointer GesturesSupportsNo multipoint or path-based gesture is required: the board's drag-and-drop has a single-pointer and keyboard alternative (the stage select on each card) and nothing else uses a gesture.
2.5.2 Pointer CancellationPartially SupportsActions fire on click (the up event) through the shared Button; the board's drag library completes a move only on drop. Not systematically verified. manual verification pending (#2864).
2.5.3 Label in NamePartially SupportsVisible labels are the accessible names by construction in the shared components (the label element is the name); icon-only controls carry aria-label. The label-content-name-mismatch rule is not part of the gate's tag set. manual verification pending (#2864).
2.5.4 Motion ActuationSupportsNo function is operated by device motion or user motion.
  • check: `grep -rnE "devicemotion|deviceorientation" src --exclude=vpat.ts` returns nothing
3.1.1 Language of PageSupportsThe document declares the interface language (en, tr or de) from the request; the axe html-has-lang and html-lang-valid rules report no violation.
3.2.1 On FocusPartially SupportsNothing changes context on focus to the authors' knowledge; manual verification pending (#2864).
3.2.2 On InputPartially SupportsThe language, theme and text-size controls apply on change, as settings controls do; they do not navigate. Filter selects on the admin indexes re-query the list in place. No form submits on input. manual verification pending (#2864).
3.2.6 Consistent HelpPartially SupportsOn the public pages the feedback and issue-tracker links sit in the footer and on /accessibility in the same place on every page; inside the signed-in shells the support entry exists only in the admin navigation, not in a consistent place for every role. Tracked in #2864.
3.3.1 Error IdentificationPartially SupportsField errors are rendered as text under the field through the shared Input/Select error prop and form-level errors in an alert box; not every form has been checked for naming the field in error. manual verification pending (#2864).
3.3.2 Labels or InstructionsPartially SupportsEvery input rendered through the shared components has a label (the axe label rules report no violation on the scanned page states); hints are a first-class prop. Instruction sufficiency outside the scan is not reviewed. manual verification pending (#2864).
3.3.7 Redundant EntryPartially SupportsAutocomplete is declared on identity fields and the account form is pre-filled from the profile; multi-step forms (registration, applications, the offer wizard) have not been audited for asking the same thing twice. Tracked in #2864.
4.1.1 ParsingNot ApplicableRemoved from WCAG 2.2 (always satisfied for HTML processed by modern user agents). Reported as Not Applicable per the WCAG 2.2 note; the duplicate-id and aria rules that used to stand in for it are in the scan.
4.1.2 Name, Role, ValuePartially SupportsNative elements are used for native things; the custom widgets that exist (combobox search, calendar grid, board stage select, dialogs) carry roles, names and states and have targeted specs; the axe aria-* and *-name rules report no violation on the scanned page states (the unnamed account selects of #2041 were fixed). Custom components beyond the scanned pages await a screen-reader pass. manual verification pending (#2864).

Table 2: Success criteria, Level AA

CriteriaConformance levelRemarks and explanationsEvidence
1.2.4 Captions (Live)Not ApplicableThe product publishes no live synchronized media. Real-time meetings between people run in the embedded third-party Jitsi room, which is out of scope (see EN 301 549 chapter 6).
1.2.5 Audio Description (Prerecorded)Not ApplicableNo prerecorded synchronized media with audio.
1.3.4 OrientationSupportsNothing locks or assumes an orientation: the web manifest declares `orientation: any`, no code calls `screen.orientation.lock` and no stylesheet gates a layout on the orientation; layouts are fluid from 320 px up and are exercised at phone and tablet widths in both themes.
1.3.5 Identify Input PurposePartially SupportsSign-in, registration and the account form declare autocomplete purposes (email, current-password, one-time-code, name, tel …). The remaining forms that collect personal data have not been audited field by field. manual verification pending (#2864).
1.4.3 Contrast (Minimum)SupportsThe axe color-contrast rule runs over every scanned page state in light AND dark mode with no violation; a hover-contrast check hovers every `hover:text-*` element on each scanned page in both themes and enforces 4.5:1 against the real background; dedicated specs pin the pairs axe cannot see (white text on accent surfaces, the journey tracker, calendar and onboarding targets, the RSVP buttons, the unread badge, the mode switcher). A reflow of the layout can place a text over a new background, which is why the hover check exists; pages outside the scan are covered by the same colour tokens but are not measured.
1.4.4 Resize TextSupportsAn in-app text-size stepper scales the interface and persists; on top of it, 400 % browser zoom is exercised on the board and the calendar without loss of content or function, and no page scrolls sideways at phone width.
1.4.5 Images of TextPartially SupportsThe interface renders text as text; the only image of text is the logo (exempt). User-uploaded images (CVs rendered as previews, message attachments) can contain text and are outside the authors' control. manual verification pending (#2864).
1.4.10 ReflowPartially SupportsVerified at 320 CSS px and 400 % zoom for the pipeline board, the calendar and the role shells, with the page never scrolling sideways; the calendar's view switcher scrolls inside its own strip at 320 px in German, which is the permitted two-dimensional exception for a toolbar but is recorded in the spec rather than assumed. Data tables (admin lists) scroll horizontally inside their container by design. Other screens are not measured at 320 px. manual verification pending (#2864).
1.4.11 Non-text ContrastPartially SupportsThe focus indicator is a 2 px ring in the accent colour, thickened under prefers-contrast: more; input borders and secondary text are strengthened under the same preference (e2e/a11y-media-preferences.spec.ts). Control boundaries and icon-only controls have not been measured against 3:1 systematically. manual verification pending (#2864).
1.4.12 Text SpacingPartially SupportsText containers use flexible heights (Tailwind utilities, no fixed-height text boxes by convention) and the 400 % zoom check passes, but the specific text-spacing override of this criterion has not been applied and checked. manual verification pending (#2864).
1.4.13 Content on Hover or FocusPartially SupportsMenus and dialogs opened by pointer or keyboard are dismissible with Escape and stay open while hovered (useModalFocus); past instants show their absolute reading as a native title tooltip, which the user agent controls. Custom tooltips have not been inventoried. manual verification pending (#2864).
2.4.5 Multiple WaysSupportsSigned-in: the role navigation, a global search (Mod+K) and in-page links. Public: the navigation, the footer and a sitemap built from the single public-route registry.
2.4.6 Headings and LabelsPartially SupportsEvery page has a top-level heading and form controls have labels (axe label rules clean on the scanned page states). Whether each heading and label is also descriptive is a judgement the automation does not make. manual verification pending (#2864).
2.4.7 Focus VisibleSupportsA global :focus-visible ring on links, buttons, role=button, inputs and selects in the accent colour, thickened under prefers-contrast: more and kept under forced colours.
2.4.11 Focus Not Obscured (Minimum)Partially SupportsThe sticky mobile top bar and the messages header can sit over a focused control after a programmatic scroll; whether a focused element is ever entirely hidden has not been checked. Tracked in #2864.
2.5.7 Dragging MovementsSupportsThe one dragging interaction, moving a card between pipeline stages, is also achievable with the stage select on the card (single pointer, no drag).
2.5.8 Target Size (Minimum)SupportsButtons and inputs are at least 44 × 44 CSS px on touch viewports; the axe target-size rule (wcag22aa) runs on every scanned page state with no violation.
3.1.2 Language of PartsPartially SupportsThe whole interface switches language together. Content written by people in another language than the interface (a Turkish note in an English session) is not marked with its own lang. Tracked in #2864.
3.2.3 Consistent NavigationSupportsEvery role's navigation comes from one registry and is rendered by one shell per surface, so order and placement do not vary between pages.
3.2.4 Consistent IdentificationPartially SupportsIcons and labels come from the shared UI components and one dictionary per language, so the same function carries the same label. Not audited as a whole. manual verification pending (#2864).
3.3.3 Error SuggestionPartially SupportsValidation messages say what is expected (format, length, required currency and period for an amount, …) where the rule is known; coverage per form is not audited. manual verification pending (#2864).
3.3.4 Error Prevention (Legal, Financial, Data)SupportsIrreversible actions (withdrawing or sending an offer, removing a device, deleting) require an explicit confirmation dialog, and multi-step submissions show a preview before they are sent.
3.3.8 Accessible Authentication (Minimum)SupportsNo CAPTCHA and no puzzle. Password sign-in accepts paste and password managers (autocomplete current-password); the second factor is an authenticator code with autocomplete one-time-code, with printable recovery codes as the alternative; a remembered device needs no re-entry for 30 days; enterprise tenants can sign in through their identity provider. A passwordless e-mail link (#1959) is in review.
4.1.3 Status MessagesPartially SupportsOne app-wide live region (mounted empty, announced on change), toasts with role=status and loading/error sections with role=status/alert cover saves, errors and loading. Result counts of searches and filtered lists and the character counters are not announced consistently. Tracked in #2864.

Table 3: Success criteria, Level AAA

Level AAA is not a conformance target of this product. Only the criteria above were evaluated; every other Level AAA criterion is Not Evaluated.

CriteriaConformance levelRemarks and explanationsEvidence
2.3.3 Animation from InteractionsSupportsUnder prefers-reduced-motion every CSS transition and animation is neutralised and programmatic smooth scrolling becomes instant; the drawer still opens and closes without its slide.
1.4.6 Contrast (Enhanced)Partially SupportsUnder prefers-contrast: more, borders and secondary text are strengthened; 7:1 is not claimed for the default palette.

Revised Section 508 report

Chapter 3: Functional Performance Criteria (FPC)

Answered from the WCAG rows above; the EN 301 549 clause 4.2 rows give the same answers in more detail.

CriteriaConformance levelRemarks and explanationsEvidence
302.1 Without VisionPartially SupportsMachine-checked semantics; screen-reader programme pending. manual verification pending (#2864).
302.2 With Limited VisionSupportsText resize, 400 % zoom, AA contrast in both themes, more-contrast and forced colours honoured.
302.3 Without Perception of ColorPartially SupportsText accompanies colour; charts not all reviewed. manual verification pending (#2864).
302.4 Without HearingSupportsNo audio of its own; text channels alongside third-party meetings.
  • check: `grep -rln "<audio" src --exclude=vpat.ts` returns nothing
302.5 With Limited HearingSupportsAs 302.4.
  • check: `grep -rln "<audio" src --exclude=vpat.ts` returns nothing
302.6 Without SpeechSupportsNo function requires speech.
  • check: `grep -rnE "SpeechRecognition|webkitSpeechRecognition" src --exclude=vpat.ts` returns nothing
302.7 With Limited ManipulationPartially SupportsKeyboard alternatives and 44 px targets; whole-product keyboard pass pending. manual verification pending (#2864).
302.8 With Limited Reach and StrengthNot ApplicableNot applicable: the product is a web application with no hardware, closed functionality or physical controls.—
302.9 With Limited Language, Cognitive, and Learning AbilitiesPartially SupportsConsistent navigation and plain errors; readability not evaluated. manual verification pending (#2864).

Chapter 4: Hardware

CriteriaConformance levelRemarks and explanationsEvidence
4 HardwareNot ApplicableNot applicable: the product is a web application with no hardware, closed functionality or physical controls.—

Chapter 5: Software

CriteriaConformance levelRemarks and explanationsEvidence
501.1 Scope – Incorporation of WCAG 2.0 AAPartially SupportsSee the WCAG 2.2 section: every WCAG 2.0 Level A and AA criterion is reported there, with the conformance level of each row.
502.2.1 User Control of Accessibility FeaturesNot ApplicableThe product is not platform software.—
502.2.2 No Disruption of Accessibility FeaturesSupportsPlatform preferences are honoured and no assistive-technology input is intercepted (EN 11.6.2).
502.3 Accessibility Services (502.3.1–502.3.14)SupportsA web application: object information, row/column, values, label relationships, hierarchy, text, actions, focus, event notification and modification of states are exposed to the platform accessibility API through standard HTML and WAI-ARIA, which the axe rule set checks for the scanned page states; no custom accessibility service exists.
502.4 Platform Accessibility FeaturesNot ApplicableThe product is not platform software.—
503.2 User PreferencesSupportsColour scheme, contrast, motion and forced colours follow the platform settings.
503.3 Alternative User InterfacesNot ApplicableNo alternative user interface functions as assistive technology.—
503.4 User Controls for Captions and Audio DescriptionNot ApplicableNo media player (EN 7.x).
504.2 Content Creation or EditingPartially SupportsAuthored text is accessible by construction; attached images take no alternative text (EN 11.8.2). Tracked in #2864.
504.2.1 Preservation of Information Provided for Accessibility in Format ConversionPartially SupportsThe certificate PDF conversion has not been evaluated (EN 5.4). Tracked in #2864.
504.2.2 PDF ExportPartially SupportsAs 504.2.1.
504.3 PromptsDoes Not SupportNo prompt or check guides authors towards accessible content (EN 11.8.4). Tracked in #2864.
504.4 TemplatesPartially SupportsAdministrator-provided document templates are the authors' own (EN 11.8.5). Tracked in #2864.

Chapter 6: Support Documentation and Services

CriteriaConformance levelRemarks and explanationsEvidence
602.2 Accessibility and Compatibility FeaturesSupportsDocumented on the public accessibility statement and in the repository (EN 12.1.1).
602.3 Electronic Support DocumentationSupportsWeb pages and Markdown — text with structure (EN 12.1.2).
602.4 Alternate Formats for Non-Electronic Support DocumentationNot ApplicableNo non-electronic documentation exists.—
603.2 Information on Accessibility and Compatibility FeaturesSupportsThe statement names the channel, the response target and the escalation route (EN 12.2.2).
603.3 Accommodation of Communication NeedsPartially SupportsText channels only (EN 12.2.3). Tracked in #2864.

EN 301 549 report

Chapter 4: Functional Performance

Clause 4.2 — the functional performance statements, answered from the WCAG rows above.

CriteriaConformance levelRemarks and explanationsEvidence
4.2.1 Usage without visionPartially SupportsSemantics, names and live regions are in place and machine-checked; a screen-reader test programme has not been run (see 1.3.1, 4.1.2, 4.1.3). manual verification pending (#2864).
4.2.2 Usage with limited visionSupportsText resize, 400 % zoom reflow, AA contrast in both themes, prefers-contrast: more and forced colours honoured (1.4.3, 1.4.4, 1.4.10, 1.4.11).
4.2.3 Usage without perception of colourPartially SupportsEvery coloured state carries text; charts are not all reviewed (1.4.1). manual verification pending (#2864).
4.2.4 Usage without hearingSupportsThe product itself has no audio; meetings run in a third-party room and messaging is the non-voice channel.
  • check: `grep -rln "<audio" src --exclude=vpat.ts` returns nothing
4.2.5 Usage with limited hearingSupportsAs 4.2.4.
  • check: `grep -rln "<audio" src --exclude=vpat.ts` returns nothing
4.2.6 Usage with no or limited vocal capabilitySupportsNo function requires speech.
  • check: `grep -rnE "SpeechRecognition|webkitSpeechRecognition" src --exclude=vpat.ts` returns nothing
4.2.7 Usage with limited manipulation or strengthPartially SupportsKeyboard alternatives to dragging, 44 px targets, no gesture or motion input (2.1.1, 2.5.x); whole-product keyboard pass pending. manual verification pending (#2864).
4.2.8 Usage with limited reachNot ApplicableNot applicable: the product is a web application with no hardware, closed functionality or physical controls.—
4.2.9 Minimize photosensitive seizure triggersSupportsNothing flashes (2.3.1).
  • check: `grep -rhoE "animate-[a-z-]+" src | sed "s/^animate-//" | sort -u` lists ping, pulse and spin only
4.2.10 Usage with limited cognition, language or learningPartially SupportsConsistent navigation, plain-language errors, no time pressure beyond the 12-hour session, no CAPTCHA (3.2.x, 3.3.x, 2.2.1). Readability has not been evaluated. manual verification pending (#2864).
4.2.11 PrivacySupportsAccessibility features (text size, theme, OS preferences) are ordinary settings that disclose nothing about the person; the activity tracker is opt-in.

Chapter 5: Generic Requirements

CriteriaConformance levelRemarks and explanationsEvidence
5.1 Closed functionalityNot ApplicableNo closed functionality: the product runs in the user's own browser with their own assistive technology.—
5.2 Activation of accessibility featuresSupportsThe documented features (text size, theme) are ordinary visible controls; the OS preferences are honoured without any activation step.
5.3 BiometricsNot ApplicableNo biometric is used or required; passkeys are not offered.—
5.4 Preservation of accessibility information during conversionPartially SupportsThe only conversion the product performs is generating a certificate PDF from structured data; the PDF's tagging has not been evaluated. Tracked in #2864.
5.5 Operable partsNot ApplicableNot applicable: the product is a web application with no hardware, closed functionality or physical controls.—
5.6 Locking or toggle controlsNot ApplicableNot applicable: the product is a web application with no hardware, closed functionality or physical controls.—
5.7 Key repeatNot ApplicableNot applicable: the product is a web application with no hardware, closed functionality or physical controls.—
5.8 Double-strike key acceptanceNot ApplicableNot applicable: the product is a web application with no hardware, closed functionality or physical controls.—
5.9 Simultaneous user actionsSupportsNo function requires two simultaneous actions; the one chord (Mod+K) has a menu equivalent.

Chapter 6: ICT with Two-Way Voice Communication

Video meetings are provided by the embedded third-party Jitsi room, which is outside this evaluation and named as a known limitation on /accessibility. The product's own channels are text.

CriteriaConformance levelRemarks and explanationsEvidence
6.1 Audio bandwidth for speechNot ApplicableVoice is carried by the third-party room, not by the product.
6.2 Real-time text (RTT) functionalityNot ApplicableAs 6.1. The product offers asynchronous messaging alongside every meeting.
6.3 Caller IDNot ApplicableNo telephony.—
6.4 Alternatives to voice-based servicesSupportsEverything a meeting is used for (scheduling, notes, follow-ups) is also available through the product's text channels: messaging, meeting notes and to-dos.
6.5 Video communicationNot ApplicableAs 6.1.
6.6 Alternatives to video-based servicesSupportsAs 6.4.

Chapter 7: ICT with Video Capabilities

CriteriaConformance levelRemarks and explanationsEvidence
7.1 Caption processing technologyNot ApplicableThe product has no video player; release-note clips are silent and play through the browser's own controls.
7.2 Audio description technologyNot ApplicableAs 7.1.
7.3 User controls for captions and audio descriptionNot ApplicableAs 7.1.

Chapter 8: Hardware

CriteriaConformance levelRemarks and explanationsEvidence
8 HardwareNot ApplicableNot applicable: the product is a web application with no hardware, closed functionality or physical controls.—

Chapter 9: Web

Clauses 9.1 to 9.4 are WCAG 2.1 Level A and AA by reference; each row below carries the conformance of the WCAG row with the same number (9.x.y.z ⇔ x.y.z) and is generated from it. The WCAG 2.2-only criteria (2.4.11, 2.5.7, 2.5.8, 3.2.6, 3.3.7, 3.3.8) are not part of clause 9 and are reported in the WCAG section only.

CriteriaConformance levelRemarks and explanationsEvidence
9.1.1.1 Non-text ContentPartially SupportsSee WCAG 1.1.1 Non-text Content.
9.1.2.1 Audio-only and Video-only (Prerecorded)SupportsSee WCAG 1.2.1 Audio-only and Video-only (Prerecorded).
9.1.2.2 Captions (Prerecorded)Not ApplicableSee WCAG 1.2.2 Captions (Prerecorded).
9.1.2.3 Audio Description or Media Alternative (Prerecorded)Not ApplicableSee WCAG 1.2.3 Audio Description or Media Alternative (Prerecorded).
9.1.2.4 Captions (Live)Not ApplicableSee WCAG 1.2.4 Captions (Live).
9.1.2.5 Audio Description (Prerecorded)Not ApplicableSee WCAG 1.2.5 Audio Description (Prerecorded).
9.1.3.1 Info and RelationshipsPartially SupportsSee WCAG 1.3.1 Info and Relationships.
9.1.3.2 Meaningful SequencePartially SupportsSee WCAG 1.3.2 Meaningful Sequence.
9.1.3.3 Sensory CharacteristicsPartially SupportsSee WCAG 1.3.3 Sensory Characteristics.
9.1.3.4 OrientationSupportsSee WCAG 1.3.4 Orientation.
9.1.3.5 Identify Input PurposePartially SupportsSee WCAG 1.3.5 Identify Input Purpose.
9.1.4.1 Use of ColorPartially SupportsSee WCAG 1.4.1 Use of Color.
9.1.4.2 Audio ControlNot ApplicableSee WCAG 1.4.2 Audio Control.
9.1.4.3 Contrast (Minimum)SupportsSee WCAG 1.4.3 Contrast (Minimum).
9.1.4.4 Resize TextSupportsSee WCAG 1.4.4 Resize Text.
9.1.4.5 Images of TextPartially SupportsSee WCAG 1.4.5 Images of Text.
9.1.4.10 ReflowPartially SupportsSee WCAG 1.4.10 Reflow.
9.1.4.11 Non-text ContrastPartially SupportsSee WCAG 1.4.11 Non-text Contrast.
9.1.4.12 Text SpacingPartially SupportsSee WCAG 1.4.12 Text Spacing.
9.1.4.13 Content on Hover or FocusPartially SupportsSee WCAG 1.4.13 Content on Hover or Focus.
9.2.1.1 KeyboardPartially SupportsSee WCAG 2.1.1 Keyboard.
9.2.1.2 No Keyboard TrapSupportsSee WCAG 2.1.2 No Keyboard Trap.
9.2.1.4 Character Key ShortcutsPartially SupportsSee WCAG 2.1.4 Character Key Shortcuts.
9.2.2.1 Timing AdjustablePartially SupportsSee WCAG 2.2.1 Timing Adjustable.
9.2.2.2 Pause, Stop, HidePartially SupportsSee WCAG 2.2.2 Pause, Stop, Hide.
9.2.3.1 Three Flashes or Below ThresholdSupportsSee WCAG 2.3.1 Three Flashes or Below Threshold.
  • check: `grep -rhoE "animate-[a-z-]+" src | sed "s/^animate-//" | sort -u` lists ping, pulse and spin only
  • src/lib/motion.ts
9.2.4.1 Bypass BlocksSupportsSee WCAG 2.4.1 Bypass Blocks.
9.2.4.2 Page TitledSupportsSee WCAG 2.4.2 Page Titled.
9.2.4.3 Focus OrderPartially SupportsSee WCAG 2.4.3 Focus Order.
9.2.4.4 Link Purpose (In Context)Partially SupportsSee WCAG 2.4.4 Link Purpose (In Context).
9.2.4.5 Multiple WaysSupportsSee WCAG 2.4.5 Multiple Ways.
9.2.4.6 Headings and LabelsPartially SupportsSee WCAG 2.4.6 Headings and Labels.
9.2.4.7 Focus VisibleSupportsSee WCAG 2.4.7 Focus Visible.
9.2.5.1 Pointer GesturesSupportsSee WCAG 2.5.1 Pointer Gestures.
9.2.5.2 Pointer CancellationPartially SupportsSee WCAG 2.5.2 Pointer Cancellation.
9.2.5.3 Label in NamePartially SupportsSee WCAG 2.5.3 Label in Name.
9.2.5.4 Motion ActuationSupportsSee WCAG 2.5.4 Motion Actuation.
  • check: `grep -rnE "devicemotion|deviceorientation" src --exclude=vpat.ts` returns nothing
9.3.1.1 Language of PageSupportsSee WCAG 3.1.1 Language of Page.
9.3.1.2 Language of PartsPartially SupportsSee WCAG 3.1.2 Language of Parts.
9.3.2.1 On FocusPartially SupportsSee WCAG 3.2.1 On Focus.
9.3.2.2 On InputPartially SupportsSee WCAG 3.2.2 On Input.
9.3.2.3 Consistent NavigationSupportsSee WCAG 3.2.3 Consistent Navigation.
9.3.2.4 Consistent IdentificationPartially SupportsSee WCAG 3.2.4 Consistent Identification.
9.3.3.1 Error IdentificationPartially SupportsSee WCAG 3.3.1 Error Identification.
9.3.3.2 Labels or InstructionsPartially SupportsSee WCAG 3.3.2 Labels or Instructions.
9.3.3.3 Error SuggestionPartially SupportsSee WCAG 3.3.3 Error Suggestion.
9.3.3.4 Error Prevention (Legal, Financial, Data)SupportsSee WCAG 3.3.4 Error Prevention (Legal, Financial, Data).
9.4.1.1 ParsingNot ApplicableSee WCAG 4.1.1 Parsing.
9.4.1.2 Name, Role, ValuePartially SupportsSee WCAG 4.1.2 Name, Role, Value.
9.4.1.3 Status MessagesPartially SupportsSee WCAG 4.1.3 Status Messages.
9.5 WCAG conformance requirementsPartially SupportsConformance level AA is targeted; full pages and complete processes are claimed only for the evaluated page states (appendix) — the remainder of the product is pending, so the conformance requirements are met partially.
9.6 WCAG conformance requirements (continued)Partially SupportsAs 9.5.

Chapter 10: Non-web Documents

The product's interface is web content (chapter 9). The documents it produces itself are the certificate PDF and CSV/ICS exports; documents people upload (CVs, attachments) are their own.

CriteriaConformance levelRemarks and explanationsEvidence
10 Non-web documents produced by the productPartially SupportsCSV and ICS exports are plain structured text. The certificate PDF is generated from structured data but its tagging, reading order and language metadata have not been evaluated. Tracked in #2864.

Chapter 11: Software

A web application: clauses 11.1 to 11.4 are covered by chapter 9 and are not repeated. The clauses that apply to the application as software are below.

CriteriaConformance levelRemarks and explanationsEvidence
11.5.2 Interoperability with assistive technology (accessibility services)SupportsThe product exposes semantics through HTML and WAI-ARIA to the browser's platform accessibility API; it ships no custom accessibility service and bypasses none.
11.6.1 User control of accessibility featuresSupportsText size and theme are ordinary settings; OS preferences are applied automatically (5.2).
11.6.2 No disruption of accessibility featuresSupportsReduced motion, more contrast and forced colours from the platform are honoured, not overridden; no key or gesture of the assistive technology is intercepted.
11.7 User preferencesSupportsColour scheme, contrast, motion and forced colours follow the platform settings; the in-app text size adds to the browser's own zoom.
11.8.1 Authoring tool — content technologySupportsWhat people author (messages, notes, announcements, goals) is stored as text and rendered as HTML; images are attached as files.
11.8.2 Authoring tool — accessible content creationPartially SupportsText content is accessible by construction; an attached image takes no alternative text and the composer gives no prompt for one. Tracked in #2864.
11.8.3 Authoring tool — preservation of accessibility information in transformationsNot ApplicableNo transformation of authored content between formats, other than the PDF covered in 5.4.—
11.8.4 Authoring tool — repair assistanceDoes Not SupportNo accessibility checking or repair assistance is offered to authors. Tracked in #2864.
11.8.5 Authoring tool — templatesPartially SupportsDocument templates an administrator provides are rendered through the same accessible interface; their own accessibility is the author's. Tracked in #2864.

Chapter 12: Documentation and Support Services

CriteriaConformance levelRemarks and explanationsEvidence
12.1.1 Accessibility and compatibility featuresSupportsThe public accessibility statement documents the features, the standard, the scope, the known limitations and this report.
12.1.2 Accessible documentationSupportsProduct documentation is web pages in the product and Markdown in the public repository — text, with headings and alternatives, in EN/TR/DE where it is user-facing.
12.2.2 Information on accessibility and compatibility featuresSupportsThe statement names a feedback channel with a response target and an escalation route.
12.2.3 Effective communicationPartially SupportsSupport is by e-mail and the public issue tracker (text); no alternative mode such as video relay is offered. Tracked in #2864.
12.2.4 Accessible documentation (support)SupportsAs 12.1.2.

Appendix: automated evidence

What the accessibility gate scans on every change and what it found — regenerated from the baseline file by npm run vpat:evidence, never written by hand.

PageThemeFrozen critical/serious findings
/lightclean
/darkclean
/auth/signinlightclean
/auth/signindarkclean
/accessibilitylightclean
/accessibilitydarkclean
/apply/:mentorIdlightclean
/apply/:mentorIddarkclean
/portallightclean
/portaldarkclean
/portal/journeylightclean
/portal/journeydarkclean
/portal/goalslightclean
/portal/goalsdarkclean
/portal/calendarlightclean
/portal/calendardarkclean
/accountlightclean
/accountdarkclean
/portal/requestslightclean
/portal/requestsdarkclean
/portal/profilelightclean
/portal/profiledarkclean
/portal/projectslightclean
/portal/projectsdarkclean
/portal/interactionslightclean
/portal/interactionsdarkclean
/portal/noteslightclean
/portal/notesdarkclean
/mentorlightclean
/mentordarkclean
/mentor/menteeslightclean
/mentor/menteesdarkclean
/adminlightclean
/admindarkclean
/admin/candidateslightclean
/admin/candidatesdarkclean
/messageslightclean
/messagesdarkclean
/notificationslightclean
/notificationsdarkclean
/mentor/boardlightclean
/mentor/boarddarkclean
/admin/boardlightclean
/admin/boarddarkclean
/admin/companies/:idlightclean
/admin/companies/:iddarkclean
/admin/settingslightclean
/admin/settingsdarkclean
/companylightclean
/companydarkclean

Baseline last changed at commit: f419bba · 2026-10-07 · docs/legal/vpat-evidence.md

Self-assessment by the maintainers from the evidence linked above; provided for information, not as a warranty. The software is published under AGPL-3.0-or-later and run by independent operators, each publishing their own statement and contact.