Release Contact Tools 0.1.0
This commit is contained in:
@@ -0,0 +1,3 @@
|
||||
# Accessibility
|
||||
|
||||
The workbench uses semantic landmarks, headings and labelled native controls, supports keyboard operation, visible focus, reduced-width layouts, and system/light/dark themes through the Toolbox shell. Results do not rely on colour alone.
|
||||
@@ -0,0 +1,9 @@
|
||||
# Architecture
|
||||
|
||||
Contact Tools is a static React/Vite application wrapped in the shared Toolbox shell. `contact/model.ts` owns bounded vCard unfolding/parsing, canonical serialization, RFC 4180-style CSV conversion, exact duplicate indexing and deterministic merge previews. The workbench only replaces its active records after a complete successful parse.
|
||||
|
||||
Imported properties are projected into a typed contact model and rendered through React text nodes and native controls. Unknown properties are diagnosed and omitted from canonical output instead of being injected back into markup. QR SVG is generated from UTF-8 bytes of the canonical vCard by the pinned `qrcode-generator` runtime, checked for active SVG constructs, then displayed as an encoded image URL rather than inserted as markup.
|
||||
|
||||
Version 0.1 operations are synchronous and bounded, so the app creates no worker and has no persistence or server API. Relative entry and asset URLs keep the build relocatable below a nested portal path.
|
||||
|
||||
Duplicate analysis is capped at 10,000 materialized candidates and 25,000 evaluated pair relationships; the UI reports when the result is truncated. Email, phone, and URL values use distinct equality keys during merge so punctuation meaningful to an address or URL is not discarded by generic name normalization.
|
||||
@@ -0,0 +1,9 @@
|
||||
# Privacy and security
|
||||
|
||||
Source vCards, CSV, parsed contacts and QR output stay in page memory. There is no telemetry, analytics, account, persistence or runtime network path. Imported values are rendered through text nodes and native form controls, not as executable HTML. Generated QR SVG is checked for active constructs and used as an encoded image source.
|
||||
|
||||
Files and pasted sources are rejected above 2 MiB; parsing is additionally limited to 50,000 physical lines, 2,000 cards and 64 KiB per property. QR payloads use a conservative 2,400-byte cap. These limits reduce accidental resource exhaustion but do not validate contact claims or make an imported URL, address or note trustworthy.
|
||||
|
||||
Email/phone/name normalization is used only to produce explainable duplicate candidates. Merge is deliberately left-biased and lists scalar conflicts before the user applies it. Overview screens mask emails and phones until explicitly revealed; source and edit views necessarily contain the full values. “Clear workspace” drops app references but cannot erase browser or operating-system memory forensic traces.
|
||||
|
||||
CSV export prefixes cell values beginning with `=`, `+`, `-`, or `@` with an apostrophe so common spreadsheet applications do not execute imported contact values as formulas. That defensive prefix intentionally changes such exported cells and should be reviewed when round-tripping into a non-spreadsheet system.
|
||||
Reference in New Issue
Block a user