Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion astro.config.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@ if (isLinked) {
// https://astro.build/config
export default defineConfig({
compressHTML: true,
site: 'https://accessible-astro-starter.incluud.dev',
site: 'https://stokoe.app',
integrations: [compress(), icon(), mdx(), sitemap()],
vite: viteConfig,
})
5 changes: 5 additions & 0 deletions public/_redirects
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# Redirects for Cloudflare Pages
# Format: from to status

/privacy /security 301
/trust /security 301
68 changes: 14 additions & 54 deletions src/components/Footer.astro
Original file line number Diff line number Diff line change
Expand Up @@ -17,83 +17,43 @@ const currentYear = new Date().getFullYear()
<Heading level="h2" class="sr-only">Footer</Heading>
<div class="container grid grid-cols-1 gap-8 md:grid-cols-2 lg:grid-cols-4">
<div class="flex flex-col gap-4">
<Heading level="h3" size="h6">Theme features</Heading>
<Heading level="h3" size="h6">Product</Heading>
<ul class="flex flex-col gap-2">
<li><Link href="/accessibility-statement">Accessibility statement</Link></li>
<li><Link href="/accessible-components">Accessible components</Link></li>
<li><Link href="/color-contrast-checker">Color contrast checker</Link></li>
<li><Link href="/markdown-page">Markdown page</Link></li>
<li><Link href="/mdx-page">MDX page</Link></li>
<li><Link href="/404-page">404 page</Link></li>
<li><Link href="/sitemap">Sitemap</Link></li>
<li><Link href="/">Home</Link></li>
<li><Link href="/how-it-works/">How it works</Link></li>
<li><Link href="/docs/">Documentation</Link></li>
</ul>
</div>
<div class="flex flex-col gap-4">
<Heading level="h3" size="h6">Incluud projects</Heading>
<Heading level="h3" size="h6">Trust</Heading>
<ul class="flex flex-col gap-2">
<li>
<Link isExternal href="https://accessible-astro-starter.incluud.dev">Accessible Astro Starter</Link>
</li>
<li>
<Link isExternal href="https://accessible-astro-dashboard.incluud.dev">Accessible Astro Dashboard</Link>
</li>
<li>
<Link isExternal href="https://accessible-astro-starter.incluud.dev/accessible-components"
>Accessible Astro Components</Link
>
</li>
<li>
<Link isExternal href="https://accessible-astro-docs.incluud.dev">Accessible Astro Docs</Link>
</li>
<li>
<Link isExternal href="https://color-contrast.incluud.dev">Color Contrast Checker</Link>
</li>
<li><Link href="/security/">Security & Privacy</Link></li>
<li><Link href="/accessibility/">Accessibility</Link></li>
</ul>
</div>
<div class="flex flex-col gap-4">
<Heading level="h3" size="h6">Developer tools</Heading>
<Heading level="h3" size="h6">Contact</Heading>
<ul class="flex flex-col gap-2">
<li>
<Link isExternal href="https://chrispederick.com/work/web-developer/">Web Developer Extension</Link>
</li>
<li>
<Link isExternal href="https://accessibilityinsights.io/">Accessibility Insights</Link>
</li>
<li>
<Link isExternal href="https://www.deque.com/axe/devtools/">axe DevTools</Link>
</li>
<li>
<Link isExternal href="https://wave.webaim.org/extension/">WAVE Web Accessibility</Link>
</li>
<li>
<Link isExternal href="https://www.w3.org/WAI/ARIA/apg/patterns/">ARIA Design Patterns</Link>
</li>
<li>
<Link isExternal href="https://aaardvarkaccessibility.com/wcag-plain-english/">WCAG Plain English</Link>
</li>
<li><Link href="mailto:hello@stokoe.app">hello@stokoe.app</Link></li>
<li><Link href="mailto:security@stokoe.app">security@stokoe.app</Link></li>
<li><Link href="mailto:accessibility@stokoe.app">accessibility@stokoe.app</Link></li>
</ul>
</div>
<div class="flex flex-col gap-4">
<Logo loading="lazy" />
<p class="leading-[1.75]">
Tip: always test for screen reader support. Press <kbd>⌘</kbd> + <kbd>F5</kbd> to start VoiceOver or <kbd
>Win</kbd
>
+ <kbd>Ctrl</kbd> + <kbd>Enter</kbd> for Narrator.
Built with accessibility and security as core principles.
</p>
<p>Cute astronaut image by <Link href="https://unsplash.com/@kobbymendez">Kobby Mendez</Link> on Unsplash.</p>
</div>
</div>
</section>
<section class="py-8">
<div class="container flex flex-col gap-4 md:flex-row md:justify-between">
<p>
&copy; {currentYear} - Starter Theme for <Link href="https://astro.build/">Astro</Link>.
&copy; {currentYear} Stokoe. All rights reserved.
</p>
<p>
Made with ❤️ by <Link href="https://github.com/markteekman">Mark Teekman</Link>. Part of <Link
href="https://www.incluud.dev">Incluud</Link
>.
Built on <Link isExternal href="https://github.com/incluud/accessible-astro-starter">Accessible Astro</Link> by <Link isExternal href="https://www.incluud.dev">Incluud</Link>.
</p>
</div>
</section>
Expand Down
44 changes: 4 additions & 40 deletions src/components/Header.astro
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
---
import Navigation from '../components/Navigation.astro'
import { DarkMode, Link, SkipLink } from 'accessible-astro-components'
import { Icon } from 'astro-icon/components'

/**
* Header Component
Expand All @@ -17,51 +16,16 @@ import { Icon } from 'astro-icon/components'
<Link href="/">Home</Link>
</li>
<li class="menu-item">
<Link href="/blog/">Blog</Link>
<Link href="/how-it-works/">How it works</Link>
</li>
<li class="menu-item">
<Link href="/portfolio/">Portfolio</Link>
</li>
<li class="menu-item has-dropdown">
<button aria-haspopup="true" aria-expanded="false">
Theme features
<Icon aria-hidden="true" name="lucide:chevron-down" size="32" />
</button>
<ul class="dropdown-menu">
<li class="submenu-item">
<Link href="/accessibility-statement">Accessibility statement</Link>
</li>
<li class="submenu-item">
<Link href="/accessible-components">Accessible components</Link>
</li>
<li class="submenu-item">
<Link href="/color-contrast-checker">Color contrast checker</Link>
</li>
<li class="submenu-item">
<Link href="/markdown-page/">Markdown page</Link>
</li>
<li class="submenu-item">
<Link href="/mdx-page/">MDX page</Link>
</li>
<li class="submenu-item">
<Link href="/404-page">404 page</Link>
</li>
<li class="submenu-item">
<Link href="/sitemap">Sitemap</Link>
</li>
</ul>
<Link href="/security/">Security</Link>
</li>
<li class="menu-item">
<Link href="/contact/">Contact</Link>
<Link href="/accessibility/">Accessibility</Link>
</li>
<li class="menu-item highlight">
<Link href="https://accessible-astro.incluud.dev/">Docs </Link>
</li>
<li class="menu-item type-icon animate-rotate">
<Link href="https://github.com/incluud/accessible-astro-starter">
<Icon aria-hidden="true" name="lucide:github" />
<span class="sr-only">Go to the GitHub page</span>
</Link>
<Link href="/docs/">Docs</Link>
</li>
<li class="menu-item type-icon animate-rotate">
<DarkMode>
Expand Down
27 changes: 19 additions & 8 deletions src/components/SiteMeta.astro
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ interface Props {
/**
* The URL of the page
*/
url: string
url: URL | string
/**
* The image path for social sharing
*/
Expand All @@ -27,24 +27,35 @@ interface Props {
author?: string
}

const { title, description, url, image, author = 'Mark Teekman' } = Astro.props
const { title, description, url, image, author = 'Stokoe' } = Astro.props

let subtitle = 'Accessible Astro Starter'
const siteName = 'Stokoe'
const pageTitle = title === siteName ? siteName : `${title} | ${siteName}`
const canonicalUrl = url instanceof URL ? url.href : url
const ogImageUrl = `${Astro.site}${image}`
---

<!-- general meta -->
<meta name="title" content={`${title} - ${subtitle}`} />
<meta name="title" content={pageTitle} />
<meta name="description" content={description} />
<meta name="author" content={author} />

<!-- canonical -->
<link rel="canonical" href={canonicalUrl} />

<!-- open graph -->
<meta property="og:title" content={`${title} - ${subtitle}`} />
<meta property="og:site_name" content={siteName} />
<meta property="og:title" content={pageTitle} />
<meta property="og:description" content={description} />
<meta property="og:type" content="website" />
<meta property="og:url" content={url} />
<meta property="og:image" content={`${Astro.site}${image}`} />
<meta property="og:url" content={canonicalUrl} />
<meta property="og:image" content={ogImageUrl} />

<!-- twitter card -->
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:title" content={pageTitle} />
<meta name="twitter:description" content={description} />
<meta name="twitter:image" content={ogImageUrl} />

<!-- page title -->
<title>{title} - {subtitle}</title>
<title>{pageTitle}</title>
8 changes: 4 additions & 4 deletions src/layouts/DefaultLayout.astro
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,11 @@ import Footer from '@components/Footer.astro'
import { ClientRouter } from 'astro:transitions'

const {
title = 'Accessible Astro',
description = 'A starter project with accessibility features using Astro static site builder. Contains accessible landmarks, skip links, a dark mode color scheme, better focus outline and keyboard menu navigation.',
url = Astro.site,
title = 'Stokoe',
description = 'Stokoe is a secure, accessible application built with privacy and usability as core principles.',
url = Astro.url,
image = 'social-preview-image.png',
author = 'Incluud',
author = 'Stokoe',
} = Astro.props
---

Expand Down
79 changes: 79 additions & 0 deletions src/pages/accessibility.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
---
layout: ../layouts/MarkdownLayout.astro
title: Accessibility
---

import { Heading, Link } from 'accessible-astro-components'

# Accessibility

Stokoe is committed to providing an accessible experience for all users. Accessibility is not an afterthought—it is a core design principle.

<Heading level="h2">Our commitment</Heading>

We aim to conform to the Web Content Accessibility Guidelines (WCAG) 2.2 at Level AA. This means:

- Content is perceivable, operable, understandable, and robust
- Users with disabilities can navigate, understand, and interact with our interface
- We test with real assistive technologies, not just automated tools

<Heading level="h2">Tested behaviors</Heading>

The following accessibility features are implemented and tested:

**Keyboard navigation**
- All interactive elements are reachable via keyboard
- Focus order follows a logical reading sequence
- No keyboard traps—you can always navigate away

**Focus visibility**
- Focus indicators are visible and meet contrast requirements
- Custom focus styles ensure clarity across components
- Focus is managed appropriately during dynamic interactions

**Reduced motion**
- Animations respect the `prefers-reduced-motion` media query
- Essential motion is minimized; decorative motion is eliminated
- No content relies solely on animation to convey meaning

**Semantic landmarks**
- Pages use proper HTML5 landmarks (`main`, `nav`, `header`, `footer`)
- Skip links allow bypassing repetitive navigation
- Heading hierarchy is logical and sequential

<Heading level="h2">Assistive technology</Heading>

We test with:

- **Screen readers**: VoiceOver (macOS/iOS), NVDA (Windows)
- **Zoom**: Browser zoom up to 400% maintains usability
- **High contrast**: Interfaces remain usable in high-contrast modes
- **Voice control**: Basic navigation works with voice input software

<Heading level="h2">Known limitations</Heading>

We are transparent about current limitations:

- Some third-party embeds may not meet our accessibility standards
- Complex data visualizations may require alternative text descriptions
- Legacy content is being progressively improved

We track known issues and prioritize fixes based on user impact.

<Heading level="h2">Feedback</Heading>

If you encounter a barrier or have suggestions for improvement, please let us know:

- **Email**: accessibility@stokoe.app
- Include the URL where you experienced the issue
- Describe what happened and what you expected

We respond to accessibility feedback within 5 business days.

<Heading level="h2">Accessibility and trust</Heading>

Accessibility is part of our broader commitment to trustworthy software. An accessible product is one that respects its users. For more about how we protect your data, see our <Link href="/security">Security & Privacy</Link> page.

---

*Last updated: January 2025*
Loading