TreeMap
무료 오픈소스 디스크 사용량 시각화 도구로, 사각형 트리맵·중복 파일 탐색·디스크 가득 예측·정리 시 파일을 휴지통으로만 이동한다
문서를 작성하면서 WCAG 2.1 AA 기준을 확인하고 워드 파일을 업로드 없이 가져와 태그된 PDF/UA‑1 또는 HTML로 내보냅니다
Check documents against WCAG 2.1 AA as you write, import Word files without uploading them, and export tagged PDF/UA-1 or HTML. Free during early access.
생산성TypeScript · JavaScriptGitHub @Ruckus000온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Check documents against WCAG 2.1 AA as you write, import Word files without uploading them, and export tagged PDF/UA-1 or HTML.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
A browser-based document editor that checks your writing against WCAG 2.1 AA
and Section 508 as you type — and never tells you a document is "compliant".
Stack: Next.js 15 · React 19 · TypeScript · ProseMirror · Tailwind CSS 4 ·
Supabase (Auth, Postgres + row-level security, Storage) · pdfkit · veraPDF and
axe-core in CIREADME 전문 보기 ↗A browser-based document editor that checks your writing against WCAG 2.1 AA and Section 508 as you type — and never tells you a document is "compliant".
Live site: https://www.adaedit.com
Stack: Next.js 15 · React 19 · TypeScript · ProseMirror · Tailwind CSS 4 · Supabase (Auth, Postgres + row-level security, Storage) · pdfkit · veraPDF and axe-core in CI
.docx tables (header rows,
merged cells) and image alt text come across; anything the editor can't hold
is listed on the document instead of dropped.Write documents checked against WCAG 2.1 AA.
A writing tool that checks documents for accessibility problems as you write — and is honest about the limits of what a checker can know.
Conformance targets. The ADA specifies no document technical standard, so "ADA compliant" is a marketing claim rather than something a tool can check against. Ada Editor checks against the standards that regulators and procurement actually cite:
| Standard | Applies to | Why it is here |
|---|---|---|
| WCAG 2.1 AA | Web and digital documents | The DOJ Title II rule (April 2024) adopts it; the de facto global baseline |
| Section 508 | US federal procurement | Incorporates WCAG 2.0 AA by reference; required to sell to federal agencies |
| PDF/UA (ISO 14289) | Tagged PDF output | The only standard that covers PDF structure. Export PDF writes PDF/UA-1, and CI validates it with veraPDF: clean sample documents pass, flagged ones fail on exactly the clauses their findings name. Documents don't list it as a target, because what is validated is the exporter, not each document |
Every finding cites the specific success criterion it comes from. Nothing in the product reports "ADA compliance" as a status.
Captured from a local production build in local mode (no account), using the sample documents the app seeds on first visit.
The desk — every document, ranked by what stops it being published.
The editor — findings sit beside the document, each citing its WCAG criterion, with "Go to text" as the primary action.
Working prototype. The homepage and editor screens are built from the design system, and every finding is computed by the real checking engine: 22 WCAG rules running against the live ProseMirror document — structural rules as you type, prose heuristics on blur/Recheck. Export HTML downloads the document as a standalone page (the document's language, landmarks, headings and links intact, and its images embedded in the page with their alt text; whatever the checker flags is still wrong in the export, so an image without alt text is exported without it). Insert image takes a PNG, JPEG, GIF or WebP file (up to 10 MB), checked by its contents, not its name. Upload .docx imports an existing Word file in the browser (the file itself is never uploaded) and checks it like any other document. Tables come across as real tables, header rows and merged cells included, and a table with no header cells is a blocking finding. Pictures come across with their alt text, and the first picture in the header and footer becomes that band's image. What the editor can't hold yet (footnotes, decorative images, tables nested inside table cells, pictures in formats a browser can't draw such as EMF/WMF, or linked from outside the file) is listed on the document instead of dropped silently. Export PDF builds a tagged PDF (PDF/UA-1) in the browser, with the same promise as the HTML export: headings, lists, links, language changes, alt text and tables (header cells with their scope, merged cells with their spans) are tagged from the document's own structure, and a figure the checker flags as missing alt text is exported without it. A table's header rows repeat on each page it runs onto; a single table row taller than a page is stacked cell by cell instead of drawn as a grid. CI runs veraPDF on exports of the sample documents: clean ones pass PDF/UA-1, and a flagged one fails on exactly the clauses its findings name. The PDF embeds one font, Atkinson Hyperlegible Next, which covers Latin scripts only; a document with Greek, Cyrillic, Hebrew, Arabic or CJK text is refused with the characters listed, never drawn as empty boxes. There is no PDF upload yet.
Accounts and storage. People sign in with an emailed one-time code
(Supabase Auth), and documents are saved to their account in Supabase
(supabase/migrations/; row-level security keeps each account's documents to
itself — supabase/tests/rls.sql checks it). The hosted project's migration
history uses the files' own versions: a migration applied another way (the
Supabase MCP, the SQL editor) is recorded under the time it ran, so set its
row in supabase_migrations.schema_migrations to the file's version
afterwards (or supabase migration repair), or the CLI will try to run it
again. Sign-in and creating an account are separate doors (/sign-in, /sign-up)
on the same emailed code: sign-in never creates an account. The emails are
supabase/templates/sign-in-code.html, pasted into Supabase's Magic link
template (subject: Your Ada Editor sign-in code), and
supabase/templates/welcome-code.html, pasted into Confirm signup
(subject: Welcome to Ada Editor); Supabase fills in {{ .Token }} and
{{ .Email }}. The browser keeps a working copy,
so typing never waits on the network and edits made offline sync when the
connection returns. Each document carries a server-stamped revision: a save
only lands while the server still has the revision it was edited from, so
edits made on two devices are never silently overwritten; the person is asked
to keep theirs, mine or both (app/_data/sync.ts, app/_auth/ConflictDialog.tsx).
Coming back to a tab fetches what changed elsewhere. Images live outside the document: a figure stores the
SHA-256 of its bytes, and the bytes go to the account's private images
bucket at <user id>/<key> (storage policies limit each account to its own
folder; supabase/migrations/20260930120000_images.sql), cached in the
browser's IndexedDB. A picture larger than 2400 px on its longer side is
shrunk to that as it's added, dropped, pasted or imported
(app/_editor/prepareImage.ts). Deleting a document removes the images no other document
uses; an image edited out of every document stays (undo can bring it back)
until a once-a-day sweep after sign-in removes it, a week or more after its
upload (sweepImages in app/_data/sync.ts). Local mode keeps them in IndexedDB only.
Messages from the privacy page's form are read, and answered, in the Table
Editor (contact_messages). Each one emails the owner through Resend that a
message is waiting, without its text or sender, at most 10 times a day; it's
off until the Vault holds contact_alert_resend_key (a send-only key) and
contact_alert_to, so locally it never sends
(). Without and a publishable key
set — CI, or a plain — the app runs in : no sign-in,
documents in this browser's localStorage only, exactly as before accounts.
Everything that reads the document runs in the browser; the server only stores it.
flowchart LR
subgraph Browser
IM[".docx import<br/>app/_import"] --> ED["ProseMirror editor<br/>app/_editor"]
ED -- "document tree" --> EN["Checking engine<br/>app/_engine · 22 rules"]
EN -- "findings" --> ED
ED --> EX["HTML and PDF/UA-1 export<br/>exportHtml.ts · exportPdf.ts"]
ED <--> ST["Working copy<br/>localStorage + IndexedDB"]
end
ST <-- "revisioned sync<br/>app/_data/sync.ts" --> SB[("Supabase<br/>Auth · Postgres + RLS · Storage")]
EX -. "checked in CI" .-> VP["veraPDF"]
supabase/tests/rls.sql tests it), and storage policies do the same for
its images.Node 22 (.nvmrc). No environment variables are needed: without them the app
runs in local mode with eight sample documents.
npm install
npm run dev # the app, in local mode: the landing page at http://localhost:3000, the desk at /desk
npm run verify # typecheck, verifier tests, analytics gate, engine gate, PDF gate, token gate, accessibility gates, search gate
npm run seo # the public pages as a crawler that runs no JavaScript sees them (titles, canonicals, sitemap, noindex)
npm run analytics # what counting may send: /editor/[docId] for documents, no fragments, nothing under Global Privacy Control
npm run indexnow -- /about # once a new or changed page is live: tells Bing (and so Copilot) to recrawl it
npm run preview # the design-system preview at http://127.0.0.1:8080
npm run e2e (needs Docker) runs the account path end to end against a local
Supabase stack (supabase/config.toml, started and stopped for you): sign-in by
emailed code read from the stack's mail catcher, sync, offline and back, sign-out
from another tab, a signed-in PDF export through veraPDF, the message form,
account deletion, and supabase/tests/rls.sql. It never touches the hosted
project. CI runs it on every PR.
node scripts/verify-tokens.mjs --verbose and node scripts/palette-ceiling.mjs
run with no dependencies at all. The PDF gate's conformance half needs Java 11+
and Maven (it fetches veraPDF from Maven Central on first run); without them it
checks the PDF's structure only and says so. npm run pdf -- --out pdfs keeps
the exported PDFs for a look in a real reader.
npm run check-posted -- --original <file|url> --posted <file|url> compares an
exported PDF with the copy a town's agenda system published: whether its tags,
language, title and PDF/UA identifier survived, and (with Java) which PDF/UA
rules veraPDF newly fails. Why it exists:
Agenda platforms and tagged PDFs.
Tested, not assumed. The rule-set spike ran 13 WCAG rules over 28 real documents against criteria registered before the run. Three of four assumptions held: findings are mostly machine-decidable (18% manual), anchor to text ranges (95%), and are plentiful (median 12 per document). One failed: only 4.8% carry an automatic fix, which moved the card's primary action from "Apply fix" to "Go to text".
blocker vs violation,
the most consequential distinction) collapses to dE 4.1, right on the axis
red-green deficiency removes. A CVD-safe palette is achievable; it costs the
conventional red/amber ramp, so we keep the ramp and carry meaning in shape,
glyph and text instead. Re-test with node scripts/palette-ceiling.mjs.manual — and the empty state says so.On the name: "Ada" here is the Americans with Disabilities Act, not the programming language. The Act is what motivates the product; the standards in the table above are what it actually checks.
supabase/migrations/20261012120000_contact_alert.sqlNEXT_PUBLIC_SUPABASE_URLnpm run dev