# Intake Check

An original, free CSV review tool. All parsing and cleanup happens in your browser. The utility contains no external scripts, analytics, storage, or network requests. Loading a hosted page still requests its ordinary HTML/CSS/JS files from the host; your pasted CSV is never included in those requests.

## Use it

1. Open `index.html`, or visit the hosted tool. For offline use, download the ZIP, extract all files into one folder, and open `index.html`. Keep the files together. The download link itself is useful on the hosted page; the extracted tool already is your offline copy.
2. Choose **Try synthetic example**, or paste a comma-separated CSV with a header named `email`. Other column names can be anything nonempty and unique.
3. Select **Check records**. Review duplicate and missing-field notes.
4. Select **Download cleaned CSV**. Inspect the import preview in your destination before importing. Keep your original as a backup.

## Exact rules

- Leading/trailing spaces in email values are removed and emails are lowercased. Header spaces are removed. Other field values are preserved.
- The first record for each nonempty normalized email is retained. Later records with the same email are excluded from the cleaned export, even if their names or other values differ. There is no field merging.
- Empty emails are never used as a duplicate key. Those rows remain separate and are flagged. Any empty or whitespace-only field is flagged; rows with such fields remain unless independently identified as duplicates.
- Suspicious email syntax is flagged using a simple check for an address with one `@`, no spaces, and a dot in its domain. This is not a comprehensive email validator and does not check whether an address exists or receives mail.
- Lowercasing is a practical matching heuristic. It can merge theoretically distinct case-sensitive addresses. Plus aliases and dots are not removed, so they remain distinct.
- Completely blank records are skipped. Quoted commas, doubled quote characters, UTF-8 BOMs, CRLF line endings, and quoted multiline cells are supported. Malformed row widths or quoting produce an error rather than silent data loss.
- Formula-like cells beginning with `=`, `+`, `-`, or `@` after optional whitespace/control characters, or beginning with tab/newline characters, receive a leading apostrophe in the CSV export. This also applies to headers. The protection deliberately changes those values; review how the destination interprets them. A phone number starting with `+` will also be protected. Do not remove the prefix blindly.
- Limit: 10,000 data rows, 100 columns, and 1 million input characters. The table previews the first 200 records; the export includes all retained rows. Only comma-separated CSV is supported.
- Editing the input clears old results, preventing an export that silently refers to an earlier version. **Clear data** clears input and results. Nothing is saved by this utility across page reloads.

## Synthetic example

The six fictional records include one repeated email, one missing email, one missing company, and a harmless formula-shaped note (`=1+1`) that illustrates export protection. Expected result: six records checked, one duplicate, two rows with blank fields, five exported records. Example email domains are reserved documentation domains.

## Files and license

`intake-core.js` contains the shared parsing, analysis, and export functions. `app.js` connects them to the interface using safe text nodes. `styles.css` is local CSS; no font or other third-party resource is fetched. This tool was created specifically for the content pipeline; the original source is included under the MIT license in `LICENSE.txt`. There is no connected affiliate offer, email capture, checkout, or paid product.
