Access Report: quietshift.dev (https://quietshift.dev)
Summary
1 issue type, 1 instance across 10 pages, plus 2 agent-assisted barriers (below; the score is the automated score only). The score is a weighted barrier count (100 = none found), not a percentage of WCAG and not a legal status.
| Page | Score | Issue types | Instances |
|---|---|---|---|
/Quiet Shift | 100 | 0 | 0 |
/reviewRepo Review: a security review of your AI-built app · Quiet Shift | 100 | 0 | 0 |
/review/sampleRepo Review: qs-fixture-demo | 100 | 0 | 0 |
/review/checklistThe Repo Review checklist · Quiet Shift | 98 | 1 | 1 |
/tabsTabkeeper: a local-first tab and session manager for Chrome · Quiet Shift | 100 | 0 | 0 |
/tabs/privacyTabkeeper privacy policy · Quiet Shift | 100 | 0 | 0 |
/tabs/vs/onetabTabkeeper vs OneTab: a local-only OneTab alternative · Quiet Shift | 100 | 0 | 0 |
/tabs/vs/session-buddyTabkeeper vs Session Buddy: a local-only Session Buddy alternative · Quiet Shift | 100 | 0 | 0 |
/tabs/vs/tobyTabkeeper vs Toby: a local-only Toby alternative · Quiet Shift | 100 | 0 | 0 |
/tabs/vs/workonaTabkeeper vs Workona: a local-only Workona alternative · Quiet Shift | 100 | 0 | 0 |
By category
Ordered by how often the category appears in accessibility lawsuits, then by user impact.
| Category | Instances |
|---|---|
| Page structure and language | 1 |
Fix these first
- Heading levels should only increase by one Moderate · 1 instance on 1 page · fix effort: hours
Barriers found
Ranked by litigation frequency of the category, then user impact, then instance count. Every item is an automated finding; the evidence shows where it was seen.
Heading levels should only increase by one
heading-orderEnsure the order of headings is semantically correct
- WCAG
- best practice, not a WCAG criterion
- Evidence (up to three)
- /review/checklist
h3:nth-child(1)<h3>1. Authorization</h3>
- Fix
<!-- one h1, then h2 for sections, h3 inside them; do not skip levels for styling -->
- Reference
- https://dequeuniversity.com/rules/axe/4.13/heading-order?application=axeAPI
Needs a human look
axe-core could not decide these on its own (usually contrast over images or gradients, or elements it could not see). They are not counted in the score.
| Rule | Check | Elements | Pages |
|---|---|---|---|
color-contrast | Elements must meet minimum color contrast ratio thresholds | 1 | 1 |
Agent-assisted checks
Reviewed by the agent-assisted pass reading each page's captured focus order, images, forms, dialogs, motion facts, accessibility tree and screenshot; nothing was clicked or submitted. Model: sonnet. The Tab walk is a client-side keyboard probe: only Tab was pressed, so it shows what is reachable and how focus looks, not whether every control activates.
This site is small, mostly static content with plain text links, and it holds up well in this pass: every link on every page could be reached and used with the keyboard, the focus highlight was visible at each step, and nothing found used motion, images, forms, or pop-up dialogs that needed checking. The one real structural issue is on the free checklist page, where the heading levels skip from the page title straight to '1. Authorization' without a mid-level heading, which can confuse anyone navigating by headings with a screen reader — a quick markup fix. We also noted there is no 'skip to content' link on any page, a minor gap worth adding as the site grows. This pass did not look at the external checkout pages, the extension itself, mobile layout, or anything that only appears after clicking, and it is not a certification of accessibility compliance.
| SC | Check | Result | Notes |
|---|---|---|---|
| 2.1.1 | Keyboard Every control reachable and usable with Tab, Enter and Space, in a sensible order. | No barrier found | Every page's focus walk reached 100% of its focusable_candidates (focusable_not_reached: 0 on all 10 pages, matching the 'focusable' count in each scan.json). All controls are plain links; no custom widgets, buttons or inputs were present to test Enter/Space activation. pages /, /review, /review/sample, /review/checklist, /tabs, /tabs/privacy, /tabs/vs/onetab, /tabs/vs/session-buddy, /tabs/vs/toby, /tabs/vs/workona |
| 2.4.3 | Focus Order Focus order follows the visual order, including menus, carousels and dialogs. | No barrier found | On every page the Tab order matches the top-to-bottom reading order recorded in the accessibility snapshot (header link, then body links in document order, then footer links), including pages with tables and ordered/unordered lists such as the review and checklist pages. pages /, /review, /review/sample, /review/checklist, /tabs, /tabs/privacy |
| 2.4.7 | Focus Visible The focused element is visibly highlighted at every step. | No barrier found | Every recorded focus-walk step on all 10 pages has focus_indicator: "outline" and visible: true; no page's CSS appears to suppress the native focus outline. pages /, /review, /review/sample, /review/checklist, /tabs, /tabs/privacy, /tabs/vs/onetab, /tabs/vs/session-buddy, /tabs/vs/toby, /tabs/vs/workona |
| 1.1.1 | Non-text Content Alt text describes the image's purpose (a product photo says what the product is, a decorative image says nothing). | Not applicable | All 10 pages report images: 0 and an empty images array; there is no non-text content on this site's captured pages to check alt text against. pages /, /review, /review/sample, /review/checklist, /tabs, /tabs/privacy, /tabs/vs/onetab, /tabs/vs/session-buddy, /tabs/vs/toby, /tabs/vs/workona |
| 3.3.1 | Error Identification Form errors are announced, name the field, and say how to recover. | Not applicable | forms: [] and facts.forms = 0 / inputs = 0 on every one of the 10 captured pages; purchasing happens off-site on Gumroad, which this pass did not capture. pages /, /review, /review/sample, /review/checklist, /tabs, /tabs/privacy, /tabs/vs/onetab, /tabs/vs/session-buddy, /tabs/vs/toby, /tabs/vs/workona |
| 2.1.2 | No Keyboard Trap Dialogs and overlays keep focus inside and return it on close; nothing traps the keyboard. | No barrier found | dialogs: [] and trap_suspected: null on every page, and every focus walk ends with "focus returned to the document body" after all candidates were reached, so nothing observed trapped focus. No modal or overlay exists anywhere in the capture to test that focus is contained and returned on close. pages /, /review, /review/sample, /review/checklist, /tabs, /tabs/privacy, /tabs/vs/onetab, /tabs/vs/session-buddy, /tabs/vs/toby, /tabs/vs/workona |
| 2.2.2 | Pause, Stop, Hide Moving, blinking or auto-updating content can be paused. | No barrier found | motion.autoplay_video, autoplay_audio, marquee, animations and infinite_animations are all 0 on every page; there is nothing moving, blinking or auto-updating that would need a pause control. pages /, /review, /review/sample, /review/checklist, /tabs, /tabs/privacy, /tabs/vs/onetab, /tabs/vs/session-buddy, /tabs/vs/toby, /tabs/vs/workona |
| 1.3.2 | Meaningful Sequence A screen reader can complete the main task: find a product, add it to the cart, start checkout. | Barrier found | The accessibility-tree reading order matches the visual order on every page (confirmed on the home, review and checklist pages), so the main content can be followed in sequence. One structural issue found: /review/checklist jumps from its single H1 straight to H3 for '1. Authorization', skipping H2, which can mislead heading-based screen-reader navigation. pages /, /review, /review/checklist |
Findings from this pass
These are not counted in the score above, which stays the automated score.
A1. Heading level skips from H1 straight to H3 on the checklist page
/review/checklistfix effort: minutesconfidence: high- Evidence
headings: [{"level":1,"text":"The Repo Review checklist"}, {"level":3,"text":"1. Authorization"}, {"level":3,"text":"2. Secrets"}, ...]; scan.json issue "heading-order", example selector h3:nth-child(1), html "<h3>1. Authorization</h3>"- Why it matters
- Screen-reader users frequently jump between headings to get a sense of a page's structure. Going from an H1 straight to H3 with no H2 in between hides that these seven items are the page's main sections, and can make them read as sub-points of an unannounced heading.
- Fix
Change the seven section headings ('1. Authorization' through '7. Dependencies') from <h3> to <h2>, since they sit directly under the page's only <h1> with nothing at level 2 between them: <h2>1. Authorization</h2>
A2. No skip-to-content link on any of the 10 pages
/fix effort: minutesconfidence: high- Evidence
scan.json facts.has_skip_link: false on every page, e.g. page 0 (https://quietshift.dev/): "has_skip_link": false
- Why it matters
- Keyboard and screen-reader users have to tab past the header before reaching the main content on every page. The cost is small today (one header link), but it is a missing piece of baseline navigation support that would matter more as the header grows.
- Fix
Add a visually-hidden-until-focused skip link as the first element inside <body>: <a href="#main" class="skip-link">Skip to content</a>, give the <main> element id="main", and add CSS so .skip-link is off-screen by default and becomes visible on :focus.
Still not covered by this pass:
- The Gumroad checkout/purchase pages (external to quietshift.dev) were not captured or reviewed.
- The Tabkeeper Chrome extension's own interface is not yet listed and was not captured; only its marketing pages were reviewed.
- Actual screen-reader announcement order and phrasing (only the accessibility-tree snapshot and structure were inspected, not audio output).
- Mobile or narrow-viewport layout; capture was a single 1280×800 desktop viewport.
- Colour contrast needing visual confirmation: axe marked one rule 'incomplete' (needs manual check) on the /tabs/vs/toby page.
- Anything that only appears after a click, submit, or Enter/Space activation, since the capture only pressed Tab and never activated a control.
Suggested order of work
Then: the items that need design or template changes.
- Heading levels should only increase by one (1× · hours)
After the fixes, a re-check of the same pages shows what changed; ask at support@quietshift.dev.
What was checked
axe-core rules for WCAG 2.0/2.1/2.2 A and AA plus best practices, on the page as loaded in a desktop viewport after the load event.
Not covered by this report:
- pages behind login, mobile viewport, states that need a click
- The Gumroad checkout/purchase pages (external to quietshift.dev) were not captured or reviewed.
- The Tabkeeper Chrome extension's own interface is not yet listed and was not captured; only its marketing pages were reviewed.
- Actual screen-reader announcement order and phrasing (only the accessibility-tree snapshot and structure were inspected, not audio output).
- Mobile or narrow-viewport layout; capture was a single 1280×800 desktop viewport.
- Colour contrast needing visual confirmation: axe marked one rule 'incomplete' (needs manual check) on the /tabs/vs/toby page.
- Anything that only appears after a click, submit, or Enter/Space activation, since the capture only pressed Tab and never activated a control.
Checks a person or the agent-assisted pass does (these are what the paid report adds; the automated pass cannot judge them):
- 2.1.1 Keyboard: Every control reachable and usable with Tab, Enter and Space, in a sensible order.
- 2.4.3 Focus Order: Focus order follows the visual order, including menus, carousels and dialogs.
- 2.4.7 Focus Visible: The focused element is visibly highlighted at every step.
- 1.1.1 Non-text Content: Alt text describes the image's purpose (a product photo says what the product is, a decorative image says nothing).
- 3.3.1 Error Identification: Form errors are announced, name the field, and say how to recover.
- 2.1.2 No Keyboard Trap: Dialogs and overlays keep focus inside and return it on close; nothing traps the keyboard.
- 2.2.2 Pause, Stop, Hide: Moving, blinking or auto-updating content can be paused.
- 1.3.2 Meaningful Sequence: A screen reader can complete the main task: find a product, add it to the cart, start checkout.
WCAG 2.2 A/AA criteria and EN 301 549 V3.2.1 (2021-03) clauses
"No barrier found" means the automated rules that touch the criterion passed on the scanned pages; it does not mean the criterion is met. Criteria added in WCAG 2.2 have no clause in EN 301 549 V3.2.1 (2021-03).
| SC | Name | Level | EN 301 549 | How it is checked | Result |
|---|---|---|---|---|---|
| 1.1.1 | Non-text Content | A | 9.1.1.1 | Agent-assisted (paid report) | Not applicable |
| 1.2.1 | Audio-only and Video-only (Prerecorded) | A | 9.1.2.1 | Needs a human | Not checked here |
| 1.2.2 | Captions (Prerecorded) | A | 9.1.2.2 | Automated | No barrier found |
| 1.2.3 | Audio Description or Media Alternative (Prerecorded) | A | 9.1.2.3 | Needs a human | Not checked here |
| 1.2.4 | Captions (Live) | AA | 9.1.2.4 | Needs a human | Not checked here |
| 1.2.5 | Audio Description (Prerecorded) | AA | 9.1.2.5 | Needs a human | Not checked here |
| 1.3.1 | Info and Relationships | A | 9.1.3.1 | Automated | No barrier found |
| 1.3.2 | Meaningful Sequence | A | 9.1.3.2 | Agent-assisted (paid report) | Barrier found |
| 1.3.3 | Sensory Characteristics | A | 9.1.3.3 | Needs a human | Not checked here |
| 1.3.4 | Orientation | AA | 9.1.3.4 | Needs a human | Not checked here |
| 1.3.5 | Identify Input Purpose | AA | 9.1.3.5 | Automated | No barrier found |
| 1.4.1 | Use of Color | A | 9.1.4.1 | Needs a human | Not checked here |
| 1.4.2 | Audio Control | A | 9.1.4.2 | Automated | No barrier found |
| 1.4.3 | Contrast (Minimum) | AA | 9.1.4.3 | Automated | No barrier found |
| 1.4.4 | Resize Text | AA | 9.1.4.4 | Automated | No barrier found |
| 1.4.5 | Images of Text | AA | 9.1.4.5 | Needs a human | Not checked here |
| 1.4.10 | Reflow | AA | 9.1.4.10 | Needs a human | Not checked here |
| 1.4.11 | Non-text Contrast | AA | 9.1.4.11 | Needs a human | Not checked here |
| 1.4.12 | Text Spacing | AA | 9.1.4.12 | Automated | No barrier found |
| 1.4.13 | Content on Hover or Focus | AA | 9.1.4.13 | Needs a human | Not checked here |
| 2.1.1 | Keyboard | A | 9.2.1.1 | Agent-assisted (paid report) | No barrier found |
| 2.1.2 | No Keyboard Trap | A | 9.2.1.2 | Agent-assisted (paid report) | No barrier found |
| 2.1.4 | Character Key Shortcuts | A | 9.2.1.4 | Needs a human | Not checked here |
| 2.2.1 | Timing Adjustable | A | 9.2.2.1 | Automated | No barrier found |
| 2.2.2 | Pause, Stop, Hide | A | 9.2.2.2 | Agent-assisted (paid report) | No barrier found |
| 2.3.1 | Three Flashes or Below Threshold | A | 9.2.3.1 | Needs a human | Not checked here |
| 2.4.1 | Bypass Blocks | A | 9.2.4.1 | Automated | No barrier found |
| 2.4.2 | Page Titled | A | 9.2.4.2 | Automated | No barrier found |
| 2.4.3 | Focus Order | A | 9.2.4.3 | Agent-assisted (paid report) | No barrier found |
| 2.4.4 | Link Purpose (In Context) | A | 9.2.4.4 | Automated | No barrier found |
| 2.4.5 | Multiple Ways | AA | 9.2.4.5 | Needs a human | Not checked here |
| 2.4.6 | Headings and Labels | AA | 9.2.4.6 | Needs a human | Not checked here |
| 2.4.7 | Focus Visible | AA | 9.2.4.7 | Agent-assisted (paid report) | No barrier found |
| 2.4.11 | Focus Not Obscured (Minimum) | AA | added in WCAG 2.2; not in EN 301 549 V3.2.1 (2021-03) | Needs a human | Not checked here |
| 2.5.1 | Pointer Gestures | A | 9.2.5.1 | Needs a human | Not checked here |
| 2.5.2 | Pointer Cancellation | A | 9.2.5.2 | Needs a human | Not checked here |
| 2.5.3 | Label in Name | A | 9.2.5.3 | Needs a human | Not checked here |
| 2.5.4 | Motion Actuation | A | 9.2.5.4 | Needs a human | Not checked here |
| 2.5.7 | Dragging Movements | AA | added in WCAG 2.2; not in EN 301 549 V3.2.1 (2021-03) | Needs a human | Not checked here |
| 2.5.8 | Target Size (Minimum) | AA | added in WCAG 2.2; not in EN 301 549 V3.2.1 (2021-03) | Needs a human | Not checked here |
| 3.1.1 | Language of Page | A | 9.3.1.1 | Automated | No barrier found |
| 3.1.2 | Language of Parts | AA | 9.3.1.2 | Automated | No barrier found |
| 3.2.1 | On Focus | A | 9.3.2.1 | Needs a human | Not checked here |
| 3.2.2 | On Input | A | 9.3.2.2 | Needs a human | Not checked here |
| 3.2.3 | Consistent Navigation | AA | 9.3.2.3 | Needs a human | Not checked here |
| 3.2.4 | Consistent Identification | AA | 9.3.2.4 | Needs a human | Not checked here |
| 3.2.6 | Consistent Help | A | added in WCAG 2.2; not in EN 301 549 V3.2.1 (2021-03) | Needs a human | Not checked here |
| 3.3.1 | Error Identification | A | 9.3.3.1 | Agent-assisted (paid report) | Not applicable |
| 3.3.2 | Labels or Instructions | A | 9.3.3.2 | Automated | No barrier found |
| 3.3.3 | Error Suggestion | AA | 9.3.3.3 | Needs a human | Not checked here |
| 3.3.4 | Error Prevention (Legal, Financial, Data) | AA | 9.3.3.4 | Needs a human | Not checked here |
| 3.3.7 | Redundant Entry | A | added in WCAG 2.2; not in EN 301 549 V3.2.1 (2021-03) | Needs a human | Not checked here |
| 3.3.8 | Accessible Authentication (Minimum) | AA | added in WCAG 2.2; not in EN 301 549 V3.2.1 (2021-03) | Needs a human | Not checked here |
| 4.1.1 | Parsing | A | 9.4.1.1 | Automated | No barrier found |
| 4.1.2 | Name, Role, Value | A | 9.4.1.2 | Automated | No barrier found |
| 4.1.3 | Status Messages | AA | 9.4.1.3 | Needs a human | Not checked here |
Draft accessibility statement
For the site owner to adapt and publish. Text in [brackets] needs your input. It describes intent and known barriers; it makes no legal claim.
Accessibility statement for https://quietshift.dev quietshift.dev wants everyone to be able to use this website. We aim to meet the Web Content Accessibility Guidelines (WCAG) 2.2 at level AA, which is also the basis of the European standard EN 301 549. Known barriers As of 2026-09-16 we know about the following barriers and are working on them: - Heading levels should only increase by one (WCAG best practice). [Add a target date for each fix, or remove the item once it is fixed.] How this was assessed This statement is based on a review by Quiet Shift on 2026-09-16 combining automated checks (axe-core) with agent-assisted checks of keyboard use, text alternatives, forms and the main task flow. It is not a full manual audit with assistive-technology users. Feedback and contact If you find a barrier on this site, or need any content in another format, contact us at [email address] or [phone]. We aim to reply within [number] working days. Enforcement [EU: if you are not satisfied with our reply, you can contact the market surveillance authority for your country under the European Accessibility Act. US: [state applicable process or remove].] Last updated: 2026-09-16.
Appendix: method and page facts
Engine access-scan 0.1.0, axe-core 4.13.0, renderer 0.1.0. User agent QuietShiftAccessBot/0.1 (+https://quietshift.dev/access; ops@quietshift.dev). Desktop viewport 1280×800, page loaded once, no clicks, no typing, no form submission; robots.txt honoured. 249 rule checks passed in total. Standards: WCAG 2.2, level AA; EN 301 549 V3.2.1 (2021-03).
| Page | HTTP | lang | h1 | img/no alt | forms | main | skip link | Scanned |
|---|---|---|---|---|---|---|---|---|
https://quietshift.dev/ | 200 | en | 1 | 0/0 | 0 | 1 | no | 2026-09-16 02:17 UTC |
https://quietshift.dev/review | 200 | en | 1 | 0/0 | 0 | 1 | no | 2026-09-16 02:17 UTC |
https://quietshift.dev/review/sample | 200 | en | 1 | 0/0 | 0 | 1 | no | 2026-09-16 02:17 UTC |
https://quietshift.dev/review/checklist | 200 | en | 1 | 0/0 | 0 | 1 | no | 2026-09-16 02:17 UTC |
https://quietshift.dev/tabs | 200 | en | 1 | 0/0 | 0 | 1 | no | 2026-09-16 02:17 UTC |
https://quietshift.dev/tabs/privacy | 200 | en | 1 | 0/0 | 0 | 1 | no | 2026-09-16 02:17 UTC |
https://quietshift.dev/tabs/vs/onetab | 200 | en | 1 | 0/0 | 0 | 1 | no | 2026-09-16 02:17 UTC |
https://quietshift.dev/tabs/vs/session-buddy | 200 | en | 1 | 0/0 | 0 | 1 | no | 2026-09-16 02:17 UTC |
https://quietshift.dev/tabs/vs/toby | 200 | en | 1 | 0/0 | 0 | 1 | no | 2026-09-16 02:17 UTC |
https://quietshift.dev/tabs/vs/workona | 200 | en | 1 | 0/0 | 0 | 1 | no | 2026-09-16 02:17 UTC |