Scan this page (toolbar icon) or point the Entire-site crawl at it. Grey = what the row tests, green/red = the expected result (both are CSS labels, not real page text). Expected totals: page scan → 5 (4 below + 1 the script injects into the live DOM); crawl → 4 (a crawl fetches raw HTML and never runs the script). These totals do NOT include the "de-obfuscation removed" section below — every case there is a deliberate NEGATIVE (see docs/deobfuscation-removal.md).
Reach us here: plain@kitchensink.dev
splittag@kitchensink.dev
entity@kitchensink.dev
These 8 cases used to extract via normalizeObfuscation /
decodeCfEmail (src/lib/deobfuscate.ts), both deleted.
Recovering an address someone deliberately hid from scrapers defeats their
expressed wish not to be harvested (CNIL fined KASPR €200,000 over exactly
this in Jan 2025). Each row below is a NEGATIVE assertion now: it is kept in
the fixture, unlike being deleted, specifically so a future regression that
restores obfuscation recovery fails a real e2e test instead of shipping
unnoticed. See docs/deobfuscation-removal.md for the sign-off.
brackets [at] kitchensink [dot] dev
parens (at) kitchensink (dot) dev
curly {at} kitchensink {dot} dev
upper AT kitchensink DOT dev
spelled at kitchensink dot dev
fullwidth@kitchensink.dev
spaced @ kitchensink . dev
a paragraph whose data-email attribute holds an address
idn@münchen.example
Follow @justahandle for updates
Install react@19.0.0 from npm
Requires node@18 or newer
Background: logo@2x.png
Doors @ 8, drinks 5 @ 10 . 00 all night