Changelog

What we've shipped.

2026-09-06

Second bug hunt: the demo is back, and every "Try free" button works

A production-first sweep three days after the last one. Live checks found two things a visitor could hit: the demo access code had quietly expired in July, and four old marketing pages sent every sign-up click to a page that does not exist. Both are fixed. The rest is housekeeping listed below.

Highlights
  • The demo account signs in again
  • Sign-up links from the old feature and use-case pages now land on the sign-up form; those pages redirect to their maintained equivalents
  • Uploading a folder of interviews is now all-or-nothing: if one file would exceed your plan, nothing is half-imported and the message says why
  • The analysis-node rate limit applies on both API prefixes
  • Dependency advisories in the query-string and XML parsers resolved
  • Excel workbooks (.xlsx) import directly: the first sheet is read like a CSV, so survey exports with one response per row no longer need saving as CSV first
— The team · 1 min read
2026-09-05

Import transcripts from PDF

PDF is the format transcription services, ethics committees and supervisors hand people, and until now the only route in was copy and paste. Drop a PDF on the upload dialog and its text layer is extracted for coding, one line per line on the page, with speakers and quotation marks intact. The reader loads only when you open a PDF, so nothing changes for anyone else.

Highlights
  • A scanned or photographed PDF has no text layer; the import refuses it and explains that it needs OCR first rather than creating an empty transcript
  • Dropping several files at once now reads each one independently: one bad file no longer rejects the whole batch
— The team · 1 min read
2026-09-03

Reliability release: 43 verified defects fixed

A full-app bug hunt run by execution, not inspection: every finding was reproduced with a failing test before it was fixed, and the tests now live in the suite. Most of the work is invisible when it works, which is the point. The notable behaviour changes are below.

Highlights
  • Sticky notes, theme groups and code weights merge with the server copy instead of overwriting it when a load is slow or fails
  • Opening a canvas while another is still loading can no longer show the wrong canvas
  • Collaborators see the limits of the canvas owner’s plan, which is what the server enforces
  • Text Search rejects unsafe or malformed patterns with a reason instead of silently returning nothing, and caps very large result sets with a count
  • CSV survey import accepts Excel and Qualtrics files (byte-order mark plus quoted header); caption import keeps lines that start with Note, Style or Region
  • QDPX export keeps every code even when the hierarchy contains a cycle, and the code tree shows cycle members so they can be repaired
  • Backspace on a selected node or edge no longer hides it without deleting anything; deletion always goes through the confirm dialog
Fixes
  • Concurrent hierarchy edits could create a cycle that blocked every later edit
  • A canvas restored from Trash during the 30-day purge could still be deleted
  • Admin usage and activation figures included test accounts and missed collaborator codings
— The team · 2 min read
2026-08-27

Academic pricing for Irish institutions

Student pricing and the 40% academic discount on Pro and Team were previously limited to .edu addresses. They now apply to verified addresses at Irish universities and institutes of technology as well (atu.ie, dcu.ie, iadt.ie, mic.ul.ie, mtu.ie, mu.ie, ncad.ie, rcsi.ie, setu.ie, tcd.ie, tus.ie, ucc.ie, ucd.ie, universityofgalway.ie, ul.ie), alongside the international .ac and .edu country domains. Verification is by email; the address must be deliverable.

— The team · 1 min read
2026-05-15

Methodology field guide — six chapters live

Full set of methodology chapters at /methodology, written in target voice with real citations and visible draft-state disclaimers ahead of external peer review. ~11,000 words across the six chapters, lazy-loaded on chapter pages so the main bundle stays unchanged.

Highlights
  • 1.0 Foundations — inductive vs deductive vs abductive, codes/categories/themes, saturation honestly
  • 2.0 Thematic analysis — Braun & Clarke as practised, reflexive vs codebook TA
  • 3.0 Grounded theory — Charmaz constructivist GT, the Glaser–Strauss–Charmaz lineage
  • 4.0 IPA — the double hermeneutic in practical terms, four-step procedure
  • 5.0 Intercoder reliability — Cohen's κ, Krippendorff's α, a pragmatic position
  • 6.0 Ethics in practice — anonymisation properly, retention, the AI-assistance question
— The team · 3 min read
2026-05-14

Marketing site refresh — Tier 2 brand activated

The marketing surface (landing, pricing, methodology index, customers, /for-teams, /for-institutions, /trust/ai, /cite, /colophon, /accessibility-statement, /press) is now on the Ink + Ochre palette with Fraunces display headings. Visible via the override URL today; default-on flip during Phase 5 launch.

Highlights
  • Hero rebuilt with type-as-hero Fraunces display, no gradient blob mesh
  • Pricing now four tiers — Free / Pro / Team / Institutions — with sourced competitor comparison
  • /cite ships with copy-to-clipboard BibTeX, APA, Chicago, RIS
  • Footer "Built by JMS Dev Lab →" attribution + three-state theme toggle
Fixes
  • OG image now self-hosted at /og-image.png (was a broken reference for months)
  • Inter + Fraunces self-hosted, no more Google Fonts request
— The team · 4 min read
2026-05-13

Onboarding, command palette, and the AI code suggester

A batch of surface work: the new two-screen onboarding flow with methodology templates and an activation checklist, an activity bar that surfaces Cmd-K coverage across the canvas, and an inline AI code suggester that triggers when you highlight a span. The activity bar and AI suggester are flag-gated for new users until the rollout completes.

Highlights
  • Two-screen onboarding replaces the long setup wizard; methodology templates pre-fill the codebook
  • Activation checklist tracks first-transcript, first-code, first-AI-use, first-export events
  • Cmd-K command palette now covers every toolbar action with telemetry on search queries
  • Inline AI code suggester: highlight text → suggested codes appear in-line; accept, reject, or refine without leaving the transcript
— The team · 4 min read
2026-05-13

Krippendorff's α, Fleiss' κ, and the reliability batch

Statistics for the multi-coder workflow plus a wave of reliability fixes. The intercoder reliability panel now computes Krippendorff's α and Fleiss' κ alongside Cohen's κ, with per-code breakdowns and a confusion-matrix export. Behind the scenes: LLM retries with exponential backoff, Stripe webhook reconciliation, a service-worker update toast when a new build is available, and weekly Postgres backups to R2.

Highlights
  • Krippendorff's α for 3+ coders; Fleiss' κ for nominal multi-rater agreement
  • Per-code agreement breakdown + confusion-matrix export (Team plan)
  • AI prompt upgrades across thematic-analysis, code-naming, and code-suggestion flows
Fixes
  • LLM provider calls now retry with exponential backoff on transient errors
  • Stripe webhook reconciliation job catches dropped subscription updates
  • Service-worker update toast prompts a reload when a new build is deployed
  • Weekly prod Postgres backup to Cloudflare R2
— The team · 3 min read
2026-04-25

14-day Pro trial + countdown banner

New email and Google signups start on a 14-day Pro trial — full feature set, no card required, automatic downgrade to Free if the trial expires unconverted. A countdown banner shifts tone across the trial: neutral on days 1–6, ochre on day 7, amber on the last 48 hours, red after expiry.

Highlights
  • 14-day Pro trial for new email + Google signups
  • Day-7 / last-day / expired countdown banner with distinct visual tones
  • Invoice.payment_succeeded webhook handler closes a long-standing reconciliation gap
— The team · 2 min read
2026-04-24

Security audit — high, medium, and low findings resolved

A pass through the internal security audit closing eight findings. Stored integration tokens now live encrypted at rest. Prod source maps no longer ship to the public bundle. Two IDOR routes on nested resources are patched. Sessions invalidate across the cluster on credential change. Operations on trashed canvases are blocked at the route layer instead of relying on UI gating.

Highlights
  • Encrypt stored integration tokens at rest
  • Strip prod sourcemaps; bundle no longer leaks structured logging
  • IDOR fixes on nested resources + session invalidation propagation
  • Pagination clamp, request-ID propagation, deep-readiness endpoint
  • Structured logger with query-performance telemetry
Fixes
  • Block share-clone of soft-deleted canvases
  • Bound computed query result size to prevent runaway responses
  • SameSite=None cookies in prod so cross-site XHR auth works
— The team · 4 min read
2026-04-23

JWT → httpOnly cookies migration

Authentication tokens move from localStorage into httpOnly cookies, closing the XSS-exfiltration attack surface that comes with any localStorage-resident credential. Session invalidation propagates on password change, email link, and explicit logout. Plan-aware onboarding lands at the same time: PlanWelcome cards, feature tooltips gated by plan, an AI-feature explainer banner, and a guided team-setup flow for Team-plan signups.

Highlights
  • JWT migration to httpOnly cookies (phase 1 of credential-hardening plan)
  • Plan-aware onboarding: PlanWelcome card + FeatureTooltip + AI explainer banner
  • Guided team-setup flow for Team-plan signups
— The team · 3 min read
2026-04-10

Sibling-app cross-linking + activation telemetry

The marketing footer now cross-links sibling JMS Dev Lab products. Marketing landing pages prerender into static HTML so crawlers, AI agents, and first-paint visitors see real content immediately rather than the React loading state. Server-side activation telemetry begins firing for sign_up and first_canvas_created events.

Highlights
  • Sibling-app cross-links in marketing footer
  • Marketing prerender for crawler + first-paint visibility
  • Activation telemetry: sign_up + first_canvas_created events
  • Customer-service chat widget embedded (responsive; hidden on /canvas)
— The team · 2 min read

Entries from April 2026 onward are listed above. Pre-April history is still being backfilled — the full commit log lives on GitHub until then.