AI Decision System
Replayable, offline-verifiable records for AI-assisted go/no-go decisions: experiment promotions, typed model answers and human-approved actions.
翻译准备中
Free website accessibility checker. Scan any page against WCAG 2.2, ADA and Section 508 to see how many issues it has, then get code-level fixes with Pro.
翻译准备中
开发工具JavaScript · AstroGitHub @mindfulmarketingad-cmd在线运营者未确认
试用过了吗? 点一下就好,无需登录。
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证制作者的介绍仅有上面的一句话。 更多详情请阅读仓库 README。 仓库 README ↗
正在加载完整 README。
查看完整 README ↗Marketing site and free website accessibility checker for accessbell.co.
api/ (/api/scan, /api/contact)/app pages (static HTML + bundled scripts) backed by /api/app/*, Supabase (Auth + Postgres), Stripe Payment Link billing and Inngest background monitoringvercel.json holds headers, redirects and function config)| Command | What it does |
|---|---|
npm install | Install dependencies (Node 22.12+) |
npm run dev | Astro dev server at localhost:4321 (pages only, no /api) |
npm run preview | Production build plus a local server that mirrors vercel.json (headers, clean URLs, redirects) and runs the /api functions |
npm test | Unit tests. Set TEST_DATABASE_URL to a disposable Postgres to also run the dashboard integration tests |
npm run assets | Regenerate favicon, icons, logo.png, logo.svg and og-default.png from public/favicon.svg (needs Playwright) |
api/ Vercel functions (thin handlers): scan, contact, app, stripe-webhook, inngest
server/app/ Dashboard backend: auth, accounts and roles, billing, domains, scanning, team, monitoring
server/inngest/ Scheduled monitoring functions
supabase/migrations/ Database schema (run once in the Supabase SQL editor)
server/ Checker engine and security helpers
browser-audit.js axe-core in a real browser (Browserless), used when BROWSER_WS_ENDPOINT is set
audit.js WCAG rules over parsed HTML (parse5), the fallback engine
fetch-page.js Size/time-limited page fetcher, manual redirects
net-guard.js SSRF protection (private IP ranges, connect-time DNS check)
rate-limit.js Per-instance rate limiter
contact.js Contact form validation and delivery (Resend)
http.js JSON responses, origin check, body limits
src/
config/site.ts Name, URL, nav, footer, social links
data/pricing.ts Plans, prices, comparison table
content/blog/ Blog posts (Markdown)
lib/routes.ts Single list of URLs feeding /sitemap and /sitemap.xml
pages/ Routes
public/js/ Client scripts (external files so CSP can block inline JS)
tests/ node:test suites
www.accessbell.co (primary) and accessbell.co (redirects to www in the Vercel domain settings). Do not also redirect www to the apex in vercel.json, or assets loop between the two..env.example):
RESEND_API_KEY, CONTACT_TO_EMAIL, CONTACT_FROM_EMAIL (verify the sending domain in Resend)BROWSER_WS_ENDPOINT to your Browserless URL (wss://production-sfo.browserless.io?token=...) so scans run axe-core in a real browser. If it is missing or the browser is down, scans fall back to the HTML checker automatically./api/* (for example 20 requests per minute per IP). The built-in limiter is per instance only.supabase/migrations/0001_app_schema.sql -> Run. It creates a private app schema that Supabase's public API cannot reach. Then run each later migration in order (0002_onboarding.sql, ...). Only 0001 is destructive: never re-run it on a live database; the later ones are additive and safe to run again.https://www.accessbell.co; add Redirect URLs https://www.accessbell.co/app/auth/callback and your Vercel preview domain's /app/auth/callback.smtp.resend.com, port 465, user resend, password = your Resend API key).https://www.accessbell.co/app/billing, and allow customers to adjust quantity (quantity = number of domains). Create a webhook to https://www.accessbell.co/api/stripe-webhook for checkout.session.completed and customer.subscription.created/updated/deleted. Activate the Customer Portal and allow quantity changes, card updates and cancellation.https://<your-domain>/api/inngest on every deploy. Monitoring runs daily at 06:00 UTC..env.example to Vercel, then redeploy.How it fits together: a user signs up (Supabase Auth, session kept in httpOnly cookies scoped to /api), an account is created with them as owner, "Start 3-day free trial" sends them to the Stripe Payment Link with client_reference_id = account id, and the webhook activates the account with a domain quota equal to the subscription quantity. Roles: owner (billing), admin (domains, settings, team), member (pages, scans), viewer (read only).
unsafe-inline: every script and stylesheet is an external same-origin file. JSON-LD is a data block and is not executed.X-Frame-Options: DENY, frame-ancestors 'none', nosniff, strict referrer policy, locked-down Permissions-Policy, COOP.textContent only, so hostile pages cannot inject markup.Origin check, per-IP rate limits, Cache-Control: no-store, generic error messages./.well-known/security.txt for vulnerability reports. npm audit reports 0 vulnerabilities./Blog 308-redirects to /blog).@graph): Organization, WebSite, WebPage and BreadcrumbList on every page, plus SoftwareApplication with offers (home, pricing), FAQPage (home, pricing), Blog, BlogPosting, AboutPage and ContactPage./sitemap.xml with lastmod, /robots.txt, /rss.xml, HTML sitemap at /sitemap, Open Graph and Twitter cards with a 1200x630 image, web manifest and full favicon set.Home (/)
├── Pricing (/pricing) hub: plans, FAQ, links to disclaimer and contact
├── Blog (/blog) hub: lists every post
│ └── /blog/[slug] each post links up to Blog and Home (breadcrumbs),
│ to Home with "website accessibility checker" anchor text,
│ to Pricing, and sideways to 2 related posts
├── Solutions (/solutions) hub: continuous monitoring, automated fixes, compliance vault
├── About (/about) links to Home, Pricing, Blog and two cornerstone posts
└── Contact, Disclaimer, Privacy, Terms, Sitemap (footer on every page)
Every page links back up through breadcrumbs and the header. The homepage links down to the three newest posts and to every hub. Recommended next step: add a Standards hub (/standards with /standards/wcag-2-2, /standards/ada, /standards/section-508, /standards/en-301-549). The homepage legislation tabs and blog posts would link into it, giving each regulation keyword its own ranking page instead of competing blog posts.
Create src/content/blog/my-post-slug.md:
---
title: 'Post title (max 70 characters)'
seoTitle: 'Optional shorter <title> (max 60)'
description: '110-165 character meta description.'
pubDate: 2026-10-01
category: 'Guides'
related: ['wcag-2-2-checklist', 'ada-website-compliance-guide']
---
It appears automatically on /blog, the homepage (if among the newest three), /sitemap, /sitemap.xml and /rss.xml. Link to / with the anchor text "website accessibility checker" at least once.
src/config/site.ts with your real accounts./contact?topic=trial&plan=...; point them at your signup flow when it exists./privacy, /terms and /disclaimer, and set the governing-law jurisdiction.https://www.accessbell.co/sitemap.xml.