A private, browser-based spreadsheet toolkit for CSV, XLS, XLSX, and ODS files. It includes a rule builder, file difference checker, health profiler, duplicate cleaner, lookup/merge tool, and batch processor. Workbook data stays in the browser and heavy processing runs in Web Workers.
Workbook data is processed locally in a Web Worker. It is not uploaded to an API or stored on a server.
Open /difference, choose a baseline file and an updated file, then configure:
- One to five matching-column pairs, allowing composite unique keys
- One or more column pairs whose values should be compared
- Normalized text matching, which ignores capitalization and extra spaces, or exact value matching
- Optional per-column exact or normalized comparison, numeric tolerance, date tolerance, and ignored comparison pairs
Same-name columns are paired automatically and likely identifier columns such as
Claim ID are suggested as the matching key. Every output row is classified as
CHANGED, ADDED, REMOVED, UNCHANGED, or KEY ISSUE. Blank and duplicated
keys are isolated as key issues instead of being matched ambiguously.
The preview shows baseline and updated values side by side and identifies the specific columns that changed. Export differences only, all compared records, or one status. Reports use the updated file's extension and include all selected rows even though the browser preview is limited to 50.
Download the two included workbooks from the difference checker to exercise a known result: 20 changed, 10 added, 10 removed, and 470 unchanged records.
Valid rule dockets can be named and saved in browser local storage. Recipes map conditions by column heading, so they remain usable when columns move. The saved-recipe drawer supports JSON import, JSON export, updating, applying, and deleting recipes. Recipe JSON contains headings, conditions, comparison values, and optional remarks, but no workbook rows.
After ordered rules run, the rule tester reports raw matches, assigned matches, priority-shadowed matches, overlaps, rules with no matches, and sample source row numbers.
Rules run from top to bottom and the first match wins. Each rule can require all or any of its conditions. Individual rules can be marked Active or Skipped without deleting their setup. At least one rule must remain active, and every saved rule must contain a complete condition. Supported operators include:
- Text equality, inequality, contains, does not contain, starts with, and ends with
- Blank and non-blank checks
- Numeric greater-than, at-least, less-than, and at-most comparisons
- Date before, on-or-before, after, and on-or-after comparisons
Each rule and the fallback can write a custom remark. Leaving a remark blank still classifies the row but does not overwrite an existing source remark. Text comparisons ignore capitalization, surrounding whitespace, and repeated spaces.
This recipe compares rows across the sheet using configurable entity, category, and date columns. The window can use days or calendar months and can be strict or inclusive. It produces four outcomes with optional, editable remarks in priority order:
- Same entity and category inside the date window
- Same entity and category outside the date window
- Same entity with a different category
- No duplicate condition
The original assistance checker is preserved as the default preset when the headers look like client name, assistance type, and date received.
Open /health to scan every row for completeness and value consistency. The
health ledger reports inferred types, blank rates, repeated values in a sample
of up to 50,000 rows, unreadable date-like values, four-standard-deviation
numeric outliers, examples, and a likely unique key. The report exports using
the source extension.
Open /duplicates and choose one to five key columns. Exact or normalized keys
can keep either the first or last row in each group. An optional merge fills
blank survivor cells from other rows in the group. The tool downloads the clean
same-format workbook and a separate same-format duplicate audit.
Open /lookup to join a primary and reference file using one to five paired
keys. Choose reference columns, exact or normalized matching, a left or inner
join, and whether same-name columns are appended, filled only when blank, or
replaced. Duplicated reference keys remain visible as ambiguous and are never
matched arbitrarily. The result uses the primary file extension.
Open /batch to run one saved recipe across up to 25 files or 500 MB at a time.
Files are processed sequentially in a Web Worker. The downloaded ZIP contains
each completed output in its own source extension plus batch-report.csv with
completed and skipped-file details.
/toolsis the full tool registry./guidesincludes tool selection, key, large-file, review, and FAQ guidance./about,/privacy, and/termsdocument the product, local-processing boundary, advertising disclosure, and responsible use.
- Export all classified rows or a single remark category.
- Preserve the input extension:
.csv,.xls,.xlsx, or.ods. - Write only non-empty configured remarks. Blank rule actions preserve an
existing
RemarkorRemarksvalue. - Append
Remarksonly when at least one rule writes a remark; otherwise leave a source file without that column unchanged. - Preserve source values from the selected sheet. Styling, formulas, macros, and unselected sheets are not copied.
The legacy XLS format allows at most 65,535 data rows per sheet. Larger XLS outputs are rejected with a message recommending XLSX.
Parsing, rule evaluation or file comparison, previews, and exports run in dedicated Web Workers. Only the selected worksheet from each source is retained, classification codes use typed arrays, and the interface receives at most 50 preview rows per output category. This keeps the main screen responsive during checks with hundreds of thousands of rows.
Use the production server for normal spreadsheet processing. Unlike the development server, it does not open a hot-reload WebSocket.
npm install
npm run previewOpen http://localhost:3000.
For development:
npm run devnpm test
npm run lint
npm run build