Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
58 commits
Select commit Hold shift + click to select a range
db1b833
Split src/template.html into styles.css and ordered src/js modules
claude Oct 22, 2026
512cb38
Harden PDF.js against eval-based font compilation and fix CSP drift
claude Oct 22, 2026
bdd167d
Add tag-triggered release workflow that attaches DocDiff.html
claude Oct 22, 2026
aed8ac7
CI: rebuild before Pages deploy and tighten the storage API check
claude Oct 22, 2026
33561d0
Rebuild exports: real .docx redline, accessible HTML report, safe Mar…
claude Oct 22, 2026
bc21eb7
Merge branch 'worktree-agent-adfc2303226795f5c' into claude/focused-m…
claude Oct 22, 2026
6937cf6
Fix diff correctness and file intake for legal documents
claude Oct 22, 2026
1dff845
Merge diff correctness and file intake fixes
claude Oct 22, 2026
3514062
Turn the empty state into a landing page and rework comparison UI and…
claude Oct 22, 2026
38946ee
Move diffing into a Blob Web Worker and make navigation, search and v…
claude Oct 22, 2026
476ee54
Merge exports and diff-correctness work into the UI/UX rework
claude Oct 22, 2026
7a291b4
Merge diff-correctness work into the worker pipeline
claude Oct 22, 2026
298c4a0
Shorter landing headline that shows a word diff; rewrite README plainly
claude Oct 22, 2026
12d00bd
Add unsaved-changes guard and .docdiff session files (WIP before merge)
claude Oct 22, 2026
ed55d36
Regenerate the link preview image with the new headline
claude Oct 22, 2026
beca6e2
Merge UI/UX, exports and diff-correctness work; adapt session files t…
claude Oct 22, 2026
4970c93
Merge branch 'claude/focused-mayer-3stkgw' into worktree-agent-afeece…
claude Oct 22, 2026
61bfb6f
Merge UI/accessibility rework; faster view switches and large searches
claude Oct 22, 2026
edd9acd
Merge commit '4970c93' into worktree-agent-a5095e0e56b7ab992
claude Oct 22, 2026
639c276
Merge session files; verify incremental updates with a full comparison
claude Oct 22, 2026
c928142
Never build an edit or export from rows that are still being re-compared
claude Oct 22, 2026
0f23da0
Harden diff core against hangs, hidden changes and invisible-characte…
claude Oct 22, 2026
63c4608
Improve search and assistant discoverability; add English page at /en/
claude Oct 22, 2026
aff6153
Keep keyboard focus on the row after edit, revert, undo and export
claude Oct 22, 2026
810683c
Fix DOCX intake fidelity and stale file reads
claude Oct 22, 2026
ba20475
Pin the hosted root page to German and point other-language visitors …
claude Oct 22, 2026
d8bd08e
Give clear errors for protected or damaged files; read legacy text en…
claude Oct 22, 2026
8d8a005
Merge claude/focused-mayer-3stkgw into QA core branch
claude Oct 22, 2026
6f9b0bd
Rebuild site/en/index.html after merge
claude Oct 22, 2026
8c71860
Reduce PDF/DOCX cross-format noise; never hide a bare "2/3" PDF body …
claude Oct 22, 2026
fada252
Make the header/footer filter change-preserving; clear all cancels pe…
claude Oct 22, 2026
c77f1e8
Clear a stale selected row and keep focus when an edit empties a docu…
claude Oct 22, 2026
5e104e2
Merge branch 'claude/focused-mayer-3stkgw' into worktree-agent-a22435…
claude Oct 22, 2026
a79cbe4
Draft release notes for v1.5.0
claude Oct 22, 2026
6d273d3
Report failed clipboard copies and stop treating copy/print as saved
claude Oct 22, 2026
0a504c7
Add app-state guard tests to check.mjs
claude Oct 22, 2026
904c121
Merge branch 'claude/focused-mayer-3stkgw' into worktree-agent-a22435…
claude Oct 22, 2026
ddf52c9
Keep header/footer lines and page order when editing one paragraph
claude Oct 22, 2026
6c3a922
Keep alignment stable when an edit changes a block's kind; no sentenc…
claude Oct 22, 2026
0afef35
Redesign the comparison view: one top bar, review workflow, overview …
claude Oct 22, 2026
2526bdd
Review workflow tests, roving focus for action groups, dialog focus f…
claude Oct 22, 2026
40d74a0
Let top bar menus stack above phone sheet backdrops
claude Oct 22, 2026
b7f0b83
Return focus to the file button after actions in the file popover
claude Oct 22, 2026
edb9058
Merge claude/focused-mayer-3stkgw into the redesign
claude Oct 22, 2026
1e6cf68
Fix focus and state edge cases found by fuzzing
claude Oct 22, 2026
d192818
Review actions in one place: compact icon group at the current paragraph
claude Oct 22, 2026
7b05b29
Review follow-up: advance after review, merged header/footer changes,…
claude Oct 22, 2026
cbcca42
Update README performance section and v1.5.0 release notes
claude Oct 22, 2026
cf8ed3f
Shorter file names on tablets and phones keep the distinguishing part…
claude Oct 22, 2026
e137642
Merge branch 'worktree-agent-a1a28c0f0cd5c49da' into claude/focused-m…
claude Oct 22, 2026
fb9b17e
Refresh README screenshots for the review workflow
claude Oct 22, 2026
0dd2a66
Add handoff notes for the UI polish round before v1.5.0
claude Oct 22, 2026
5dbd77e
Design tokens and one calm surface per pane
claude Oct 22, 2026
423eced
Calmer change list and review marks that never move text
claude Oct 22, 2026
e7ce0c8
Overview ruler between the two versions in the side-by-side view
claude Oct 22, 2026
83874b7
Polish menus, popover, help text, tablet and phone details
claude Oct 22, 2026
da2876f
View menu: segmented layout and colour scheme choices with icons
claude Oct 23, 2026
4bd4cf8
Refresh README screenshots and v1.5.0 release notes for the polished UI
claude Oct 23, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,4 +24,5 @@ jobs:
run: |
python3 scripts/build.py
node scripts/check.mjs
git diff --exit-code site/index.html DocDiff.html
git diff --exit-code site DocDiff.html
test -z "$(git status --porcelain -- site DocDiff.html)" || { git status --short -- site DocDiff.html; echo "Commit the rebuilt files"; exit 1; }
11 changes: 9 additions & 2 deletions .github/workflows/pages.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,18 @@ jobs:
timeout-minutes: 5
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: '3.12'
- uses: actions/setup-node@v4
with:
node-version: '22'
- name: Verify security and standalone invariants
run: node scripts/check.mjs
- name: Build and verify that the committed bundle is current
run: |
python3 scripts/build.py
node scripts/check.mjs
git diff --exit-code site DocDiff.html
test -z "$(git status --porcelain -- site DocDiff.html)" || { git status --short -- site DocDiff.html; echo "Commit the rebuilt files"; exit 1; }

deploy:
if: github.event_name != 'pull_request' && github.ref == 'refs/heads/main'
Expand Down
40 changes: 40 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
name: Release

# Pushing a tag like v1.5.0 builds the bundle, verifies it, and publishes a
# GitHub release with DocDiff.html attached. Release notes are read from
# docs/releases/<tag>.md (title on the first line as "# <title>").
on:
push:
tags: ['v*']

permissions:
contents: write

jobs:
release:
runs-on: ubuntu-latest
timeout-minutes: 5
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: '3.12'
- uses: actions/setup-node@v4
with:
node-version: '22'
- name: Build and verify standalone bundle
run: |
python3 scripts/build.py
node scripts/check.mjs
git diff --exit-code site DocDiff.html
test -z "$(git status --porcelain -- site DocDiff.html)" || { git status --short -- site DocDiff.html; echo "Commit the rebuilt files"; exit 1; }
- name: Publish release
env:
GH_TOKEN: ${{ github.token }}
TAG: ${{ github.ref_name }}
run: |
notes="docs/releases/${TAG}.md"
test -f "$notes" || { echo "Missing $notes"; exit 1; }
title="$(head -n 1 "$notes" | sed 's/^# *//')"
tail -n +2 "$notes" > /tmp/notes.md
gh release create "$TAG" DocDiff.html --title "$title" --notes-file /tmp/notes.md --verify-tag
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
.DS_Store
node_modules/
*.log
.claude/worktrees/
11 changes: 9 additions & 2 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,18 @@

Everything that appears on GitHub is in English: `README.md` and docs, the repository description, release titles and release notes, commit messages, pull request titles and descriptions, issue and review comments, and code comments. Write English even when the request came in German.

The UI itself is bilingual (`de` and `en` in `src/template.html`), auto-detecting the browser language with a one-click `DE` / `EN` toggle in the header bar. Domain-specific German legal and construction terms (`Urkalkulation`, `Zuschlag`, `Pauschalfestpreis`) stay in German inside the German sample fixtures.
The UI itself is bilingual (`de` and `en` in `src/js/01-i18n.js`), auto-detecting the browser language with a one-click `DE` / `EN` toggle in the header bar. Domain-specific German legal and construction terms (`Urkalkulation`, `Zuschlag`, `Pauschalfestpreis`) stay in German inside the German sample fixtures.

## Build & Verification

Always edit `src/template.html` and run:
Always edit the sources and run the build plus checks:

- `src/template.html`: page shell, `<head>`, and static markup
- `src/styles.css`: all app styles
- `src/js/*.js`: app code, concatenated in file-name order into one classic `<script>` (shared scope, no modules)

Never hand-edit `DocDiff.html`, `site/index.html` or `site/en/index.html`; they are generated. The hosted pages are pinned to German (`/`) and English (`/en/`); the offline `DocDiff.html` follows the browser language.


```sh
python3 scripts/build.py
Expand Down
4 changes: 2 additions & 2 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,12 @@
Thanks for helping improve Doc Diff. Every change is judged by two questions: does it keep the comparison fast and clear, and does it preserve the strict zero-network, single-file privacy guarantee?

- **Open an issue first** for anything larger than a bug fix so we can align on the approach before you write code.
- **Edit `src/template.html`, then rebuild.** Never hand-edit `DocDiff.html` or `site/index.html` directly; both are generated by `python3 scripts/build.py`.
- **Edit the sources (`src/template.html`, `src/styles.css`, `src/js/*.js`), then rebuild.** Never hand-edit `DocDiff.html`, `site/index.html` or `site/en/index.html` directly; they are generated by `python3 scripts/build.py`.
- **Keep the privacy & standalone invariants intact:**
- `Content-Security-Policy` must keep `connect-src 'none'` and `form-action 'none'`.
- Zero external CDN scripts, external stylesheets, or remote font URLs.
- Zero persistence of user documents (`localStorage`, `sessionStorage`, `indexedDB`, or `document.cookie` are forbidden).
- **Every UI string exists in both German (`de`) and English (`en`).** Update both dictionaries in `src/template.html`.
- **Every UI string exists in both German (`de`) and English (`en`).** Update both dictionaries in `src/js/01-i18n.js`.
- **Everything on GitHub is in English:** commits, pull requests, issues, docs, and release notes (see [CLAUDE.md](CLAUDE.md)).
- **Run the build and verification checks before opening a pull request:**

Expand Down
20,424 changes: 13,563 additions & 6,861 deletions DocDiff.html

Large diffs are not rendered by default.

Loading
Loading