DII Operator is a client-only web app for UID2-oriented email and phone normalization and hashing. It runs in the browser, uses the Web Crypto API for SHA-256, and can process a one-column CSV batch. There is no application backend.
The Vite + React app lives in apps/web inside a pnpm workspace. GitHub Pages
serves the build under /dii-operator/.
| Section | Path | Purpose |
|---|---|---|
| Overview | / |
Product summary |
/email |
Normalize and hash one email address | |
| Phone | /phone |
Normalize and hash one phone number |
| Batch | /csv |
Normalize and hash a CSV column (up to 10,000 rows) |
For each accepted value the UI shows:
- The normalized string
- The SHA-256 digest as lowercase hex
- The same digest as standard Base64
You can copy each field to the clipboard.
All normalize and hash work runs in the browser. Digests use
crypto.subtle.digest("SHA-256", …) on UTF-8 bytes of the normalized
string. Hex and Base64 share one digest.
- Strip all whitespace.
- Convert to lowercase.
- For
gmail.comlocal parts: remove.characters and strip a+tag and everything after it. - Keep the domain unchanged.
Example: Jane.Doe+Work@gmail.com → janedoe@gmail.com.
- Remove spaces, dashes, and parentheses.
- Keep digits (and a leading
+if present). - Emit E.164-like form:
+followed by digits. - For Australian numbers starting with
61and a trunk0, drop that trunk zero (for example6104…→+614…).
The app does not invent a default country code such as +1.
| Form | Meaning |
|---|---|
| Hex | Lowercase hexadecimal encoding of the 32-byte SHA-256 digest |
| Base64 | Standard Base64 encoding of the same 32 bytes |
- Node.js 22 or later
- pnpm 11.8.0 (use Corepack)
git clone https://github.com/deangrant/dii-operator.git
cd dii-operator
corepack enable
corepack prepare pnpm@11.8.0 --activate
pnpm install
pnpm devOpen http://localhost:5173/dii-operator/.
The app uses basename /dii-operator to match GitHub Pages.
Root scripts forward to apps/web:
| Script | Action |
|---|---|
pnpm dev |
Vite development server |
pnpm build |
Typecheck and production build → apps/web/dist |
pnpm start |
Preview the production build |
- Open Email or Phone.
- Enter a value and submit.
- Review normalized, hex, and Base64 outputs. Use the copy control on each field.
- Open Batch.
- Upload or drop a CSV with one column of emails and/or phones (at most 10,000 non-empty lines).
- Download
processed_data.csvwith columns Input, Normalized, SHA256, and Base64. Skipped rows are counted in the UI.
CI builds with pnpm build and publishes apps/web/dist to GitHub Pages. The
Vite base is /dii-operator/. The build also writes 404.html so deep links
work on Pages.
- Architecture — system shape and module map
- AGENTS.md — agent and contributor conventions
- DeepWiki — indexed project wiki
This project is licensed under the MIT License.