From 8862231656e8a648b96f866cd65dbcfc1ccbca40 Mon Sep 17 00:00:00 2001 From: Simon Phumin Schweikert Date: Sun, 22 Jun 2025 19:23:36 +0900 Subject: [PATCH 1/2] fixed lighthouse warnings and errors --- apps/blog/src/routes/+layout.server.ts | 5 ++- apps/blog/svelte.config.js | 7 +--- packages/data/src/default/metaDefault.data.ts | 35 +++++++++++++++---- packages/ui/src/styles/typography.css | 6 ++-- 4 files changed, 35 insertions(+), 18 deletions(-) diff --git a/apps/blog/src/routes/+layout.server.ts b/apps/blog/src/routes/+layout.server.ts index be54d40..e56a402 100644 --- a/apps/blog/src/routes/+layout.server.ts +++ b/apps/blog/src/routes/+layout.server.ts @@ -9,7 +9,10 @@ export const load: LayoutServerLoad = (async (event) => { 'Referrer-Policy': 'no-referrer-when-downgrade', 'Strict-Transport-Security': 'max-age=31536000; includeSubDomains; preload', 'Cross-Origin-Opener-Policy': 'same-origin', - 'Permissions-Policy': 'camera=(), microphone=(), geolocation=()' + 'Permissions-Policy': + 'camera=(), microphone=(), geolocation=(), payment=(), usb=(), magnetometer=(), gyroscope=(), accelerometer=()', + 'Content-Security-Policy': + "default-src 'self'; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline'; img-src 'self' data: https:; font-src 'self' data:; connect-src 'self'; object-src 'none'; base-uri 'none';" }); const home = await getHome(); diff --git a/apps/blog/svelte.config.js b/apps/blog/svelte.config.js index 906f42a..5607ee9 100644 --- a/apps/blog/svelte.config.js +++ b/apps/blog/svelte.config.js @@ -10,12 +10,7 @@ const config = { // adapter-auto only supports some environments, see https://kit.svelte.dev/docs/adapter-auto for a list. // If your environment is not supported or you settled on a specific environment, switch out the adapter. // See https://kit.svelte.dev/docs/adapters for more information about adapters. - adapter: adapter(), - csp: { - directives: { - 'script-src': ['self'] - } - } + adapter: adapter() } }; diff --git a/packages/data/src/default/metaDefault.data.ts b/packages/data/src/default/metaDefault.data.ts index eae7eb6..cdf2d39 100644 --- a/packages/data/src/default/metaDefault.data.ts +++ b/packages/data/src/default/metaDefault.data.ts @@ -4,19 +4,38 @@ export const defaultMetaTags = (url: { pathname: string; origin: string }) => Object.freeze({ title: '', titleTemplate: '%s — Accessibility.cool', - description: 'Digital Accessibility Resources, Tips and Guidance.', + description: + 'Expert digital accessibility guidance, WCAG compliance tips, and inclusive design resources. Learn web accessibility best practices, testing tools, and how to create accessible websites for all users.', canonical: new URL(url.pathname, url.origin).href, + keywords: [ + 'digital accessibility', + 'web accessibility', + 'inclusive design', + 'WCAG compliance', + 'accessibility testing', + 'screen reader accessibility', + 'keyboard navigation', + 'ARIA labels', + 'semantic HTML', + 'accessibility guidelines', + 'universal design', + 'accessible websites', + 'UX accessibility', + 'disability-friendly design', + 'assistive technology' + ], openGraph: { type: 'website', url: new URL(url.pathname, url.origin).href, locale: 'en_US', - title: 'Accessibility.cool', - description: 'Digital Accessibility Resources, Tips and Guidance.', + title: 'Accessibility.cool - Digital Accessibility & Inclusive Design Resources', + description: + 'Expert digital accessibility guidance, WCAG compliance tips, and inclusive design resources. Learn web accessibility best practices, testing tools, and how to create accessible websites for all users.', siteName: 'Accessibility.cool', images: [ { url: 'https://accessibility.cool/accessibility-cool-meta.jpg', - alt: 'Accessibility.cool Logo', + alt: 'Accessibility.cool Logo - Digital Accessibility and Inclusive Design Resources', width: 1200, height: 630, secureUrl: 'https://accessibility.cool/accessibility-cool-meta.jpg', @@ -26,9 +45,11 @@ export const defaultMetaTags = (url: { pathname: string; origin: string }) => }, twitter: { cardType: 'summary_large_image' as const, - title: 'Accessibility.cool', - description: 'Digital Accessibility Resources, Tips and Guidance.', + title: 'Accessibility.cool - Digital Accessibility & Inclusive Design Resources', + description: + 'Expert digital accessibility guidance, WCAG compliance tips, and inclusive design resources. Learn web accessibility best practices, testing tools, and how to create accessible websites for all users.', image: 'https://accessibility.cool/accessibility-cool-meta.jpg', - imageAlt: 'Accessibility.cool Logo' + imageAlt: + 'Accessibility.cool Logo - Digital Accessibility and Inclusive Design Resources' } }) satisfies MetaTagsProps; diff --git a/packages/ui/src/styles/typography.css b/packages/ui/src/styles/typography.css index bc3d761..82d1e7b 100644 --- a/packages/ui/src/styles/typography.css +++ b/packages/ui/src/styles/typography.css @@ -3,6 +3,8 @@ :where(h1) { @apply font-highlight; @apply text-2xl md:text-3xl lg:text-4xl tracking-wide text-foreground; + margin-block: 0.67em; + font-size: 2em; } h2, h3, @@ -11,10 +13,6 @@ @apply font-sans font-medium; } - h1 { - @apply text-2xl md:text-3xl lg:text-4xl tracking-tight text-foreground; - } - h2 { @apply text-xl md:text-2xl lg:text-3xl tracking-tight text-foreground; } From 3083759e6486f2e287e19342aebb6ea5a62ba44e Mon Sep 17 00:00:00 2001 From: Simon Phumin Schweikert Date: Sun, 22 Jun 2025 19:29:52 +0900 Subject: [PATCH 2/2] added sitemap and robots.txt --- apps/blog/src/routes/sitemap.xml/+server.ts | 52 +++++++++++++++++++++ apps/blog/static/.well-known/security.txt | 4 ++ apps/blog/static/humans.txt | 13 ++++++ apps/blog/static/robots.txt | 42 +++++++++++++++++ 4 files changed, 111 insertions(+) create mode 100644 apps/blog/src/routes/sitemap.xml/+server.ts create mode 100644 apps/blog/static/.well-known/security.txt create mode 100644 apps/blog/static/humans.txt create mode 100644 apps/blog/static/robots.txt diff --git a/apps/blog/src/routes/sitemap.xml/+server.ts b/apps/blog/src/routes/sitemap.xml/+server.ts new file mode 100644 index 0000000..9a49611 --- /dev/null +++ b/apps/blog/src/routes/sitemap.xml/+server.ts @@ -0,0 +1,52 @@ +import { getPosts } from '@a11y.cool/data'; + +type SitemapPage = { + url: string; + priority: string; + changefreq: string; + lastmod?: string; +}; + +export const GET = async ({ url }: { url: URL }) => { + const posts = await getPosts(); + const baseUrl = url.origin; + + // Static pages (excluding sensitive pages with personal information) + const staticPages: SitemapPage[] = [ + { url: '/', priority: '1.0', changefreq: 'weekly' }, + { url: '/about', priority: '0.8', changefreq: 'monthly' }, + { url: '/blog', priority: '0.9', changefreq: 'weekly' } + ]; + + // Blog posts + const blogPages: SitemapPage[] = posts.map((post) => ({ + url: `/blog/${post.slug}`, + priority: '0.7', + changefreq: 'monthly', + lastmod: post.publishedAt ? new Date(post.publishedAt).toISOString() : undefined + })); + + // Combine all pages + const allPages = [...staticPages, ...blogPages]; + + // Generate XML sitemap + const sitemap = ` + +${allPages + .map( + (page) => ` + ${baseUrl}${page.url} + ${page.changefreq} + ${page.priority}${page.lastmod ? `\n ${page.lastmod}` : ''} + ` + ) + .join('\n')} +`; + + return new Response(sitemap, { + headers: { + 'Content-Type': 'application/xml', + 'Cache-Control': 'public, max-age=3600' // Cache for 1 hour + } + }); +}; diff --git a/apps/blog/static/.well-known/security.txt b/apps/blog/static/.well-known/security.txt new file mode 100644 index 0000000..448c131 --- /dev/null +++ b/apps/blog/static/.well-known/security.txt @@ -0,0 +1,4 @@ +Contact: mailto:privacy@accessibility.cool +Expires: 2025-12-31T23:59:59.000Z +Preferred-Languages: en +Canonical: https://accessibility.cool/.well-known/security.txt \ No newline at end of file diff --git a/apps/blog/static/humans.txt b/apps/blog/static/humans.txt new file mode 100644 index 0000000..f8aa50d --- /dev/null +++ b/apps/blog/static/humans.txt @@ -0,0 +1,13 @@ +/* TEAM */ + Developer: Simon Phumin Schweikert & Oliver Schwamb + Contact: accessibility.cool + From: Germany + +/* SITE */ + Last update: 2025 + Language: English + Doctype: HTML5 + IDE: Cursor + Standards: HTML5, CSS3, JavaScript ES6+ + Components: SvelteKit 5, TypeScript, Tailwind CSS + Software: Vite, Turbo, pnpm \ No newline at end of file diff --git a/apps/blog/static/robots.txt b/apps/blog/static/robots.txt new file mode 100644 index 0000000..65f1a4d --- /dev/null +++ b/apps/blog/static/robots.txt @@ -0,0 +1,42 @@ +User-agent: * +Allow: / + +Disallow: /privacy-policy/ +Disallow: /imprint/ + +# Sitemap location +Sitemap: https://accessibility.cool/sitemap.xml + +# Crawl delay (optional - helps with server load) +Crawl-delay: 1 + +# Allow all major search engines +User-agent: Googlebot +Allow: / +Disallow: /privacy-policy/ +Disallow: /imprint/ + +User-agent: Bingbot +Allow: / +Disallow: /privacy-policy/ +Disallow: /imprint/ + +User-agent: Slurp +Allow: / +Disallow: /privacy-policy/ +Disallow: /imprint/ + +User-agent: DuckDuckBot +Allow: / +Disallow: /privacy-policy/ +Disallow: /imprint/ + +User-agent: Baiduspider +Allow: / +Disallow: /privacy-policy/ +Disallow: /imprint/ + +User-agent: YandexBot +Allow: / +Disallow: /privacy-policy/ +Disallow: /imprint/ \ No newline at end of file