Skip to content

Repository files navigation

QuAlly

Thematic analysis, made accessible. An offline, single-file qualitative coding tool for interview & session transcripts — built so that low vision doesn't get in the way.

Qualitative coding means reading a transcript closely, line by line, for hours. The established tools assume you can do that at 11px, find a 10px colour swatch, and hit a small target with a mouse. QuAlly assumes you might not.

Load a transcript, assign codes to lines with the keyboard, and browse everything by code — all in one self-contained HTML file that runs in your browser with no server, no install, and nothing leaving your machine unless you turn the optional AI on and approve a request.

Open QuAlly · Or download docs/index.html and open it locally.

Built for low vision

  • Scale the text, not the app. The transcript scales to 48px and the sidebar to 36px, independently — so the words grow without the chrome eating your reading column. Browser zoom works as well, and Ctrl+0 still resets it.
  • Choose a clearer typeface. Set the transcript in Atkinson Hyperlegible — letterforms drawn so easily-confused characters (b/d, I/l/1, O/0) stay distinct — from Settings → Appearance, alongside system and serif. It ships inside the app, so it works offline.
  • Code without a mouse.Tab into the transcript, to select a line, 19 to apply a code, 0 for the searchable palette. Every control has a visible focus ring.
  • Don't depend on colour. A selected line gets a rail, not just a tint; AI observations differ by underline style; rejected segments are striped and outlined. And if similar code colours are hard to tell apart, switch on code patterns (Settings → Codes) to give every code a texture as well as a hue — the sidebar swatch shows the same one, so it stays learnable.
  • Contrast meets WCAG AA for text in both themes, on every primary colour, and the app honours your system's increase contrast and reduce motion settings.
  • Less to look at when you need it: zen mode strips the chrome down to the transcript; "merge lines" joins fragments into fewer, longer reading units.

Known gaps are tracked honestly in ACCESSIBILITY.md — screen-reader support in particular is not there yet.

What it does

  • Fast keyboard coding — number keys apply codes to the selected line(s); a hotbar and command palette keep your codebook a keystroke away.
  • Codebook view — filter and read every excerpt for a code across all transcripts.
  • AI that proposes, never decides(optional, off by default) — with your own OpenAI key, it can flag likely mis-transcriptions (each dismissable, often with a suggested fix you can apply in one click), mark observations for your review (emotions, likes/dislikes, desires…, each mapped to a first-cycle coding method), ground your codes (which words carry each one), propose candidate codings from your own codebook, propose near-duplicate codes to merge, and mark up the shape of a session — which stretch is the warm-up, which the second task — against labels you declare yourself. Every one is a proposal — it applies nothing without your decision. Two of those runs work from a CLOSED vocabulary and cannot step outside it: candidate codings use only codes already in your codebook, and sections use only the labels you declared in your brief. (The codebook consolidation pass is the exception, and says so: asked to merge or rename, it may propose a clearer name — which is still a proposal you accept or reject.)
  • Merge partial lines, line numbers, full/short speaker names, a resizable transcript minimap, and "near-balance" speaker warnings on mixed excerpts.
  • Save & continue — export a .qually.json project (transcripts + codebook + corrections) and reopen it later, or export everything as CSVs in a zip.
  • Private by default — everything lives in your browser (project autosave uses IndexedDB when available). Nothing is uploaded unless you add your own OpenAI key and approve a request, and each gate shows you what is being sent before it goes.

Input format

qually reads a simple CSV (line_id, timestamp, speaker, text, codes). The in-app File format dialog explains it and includes a ready-to-paste prompt that turns your own transcript format into that CSV with an AI assistant. See DATA-FORMAT.md.

Develop

npm install
npm run dev # local dev server (Vite)
npm run test# vitest
npm run release # build the single file -> docs/index.html (what GitHub Pages serves)

Stack: React 19 + TypeScript + zustand, bundled by Vite into one inlined HTML via vite-plugin-singlefile. No CDN, no runtime backend. Design notes live in DEV.md and FUTURE.md.

License

Copyright (C) 2026 Yotam Sechayk. GNU AGPL v3 — see LICENSE.

About

Accessible qualitative coding tool for interview and session transcripts.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages