+0.20 I rendered 1,418 confusables over 230 fonts. Most aren't confusable to the eye (paultendo.github.io S:+0.25 )
113 points by paultendo 4 days ago | 53 comments on HN | Mild positive Editorial · v3.7 · 2026-02-26 04:42:13 0
Summary Digital Security & Information Integrity Advocates
This technical blog post documents a Unicode homoglyph vulnerability affecting 1,418 character pairs across 230 fonts, providing empirical evidence that 96.5% of Unicode's confusables.txt standard is not visually dangerous in practice, but 3.5% pose genuine risks. The work advocates for transparent, reproducible security research by publishing detailed methodology and per-font risk data, supporting readers' right to understand and participate in digital security governance. The content champions freedom of expression, scientific advancement, and information access by making research publicly available without paywalls or proprietary tools.
Article Heatmap
Preamble: +0.05 — Preamble P Article 1: +0.10 — Freedom, Equality, Brotherhood 1 Article 2: ND — Non-Discrimination Article 2: No Data — Non-Discrimination 2 Article 3: ND — Life, Liberty, Security Article 3: No Data — Life, Liberty, Security 3 Article 4: ND — No Slavery Article 4: No Data — No Slavery 4 Article 5: ND — No Torture Article 5: No Data — No Torture 5 Article 6: ND — Legal Personhood Article 6: No Data — Legal Personhood 6 Article 7: ND — Equality Before Law Article 7: No Data — Equality Before Law 7 Article 8: ND — Right to Remedy Article 8: No Data — Right to Remedy 8 Article 9: ND — No Arbitrary Detention Article 9: No Data — No Arbitrary Detention 9 Article 10: ND — Fair Hearing Article 10: No Data — Fair Hearing 10 Article 11: ND — Presumption of Innocence Article 11: No Data — Presumption of Innocence 11 Article 12: +0.17 — Privacy 12 Article 13: ND — Freedom of Movement Article 13: No Data — Freedom of Movement 13 Article 14: ND — Asylum Article 14: No Data — Asylum 14 Article 15: ND — Nationality Article 15: No Data — Nationality 15 Article 16: ND — Marriage & Family Article 16: No Data — Marriage & Family 16 Article 17: ND — Property Article 17: No Data — Property 17 Article 18: ND — Freedom of Thought Article 18: No Data — Freedom of Thought 18 Article 19: +0.54 — Freedom of Expression 19 Article 20: ND — Assembly & Association Article 20: No Data — Assembly & Association 20 Article 21: ND — Political Participation Article 21: No Data — Political Participation 21 Article 22: ND — Social Security Article 22: No Data — Social Security 22 Article 23: ND — Work & Equal Pay Article 23: No Data — Work & Equal Pay 23 Article 24: ND — Rest & Leisure Article 24: No Data — Rest & Leisure 24 Article 25: +0.32 — Standard of Living 25 Article 26: +0.27 — Education 26 Article 27: +0.45 — Cultural Participation 27 Article 28: +0.17 — Social & International Order 28 Article 29: +0.08 — Duties to Community 29 Article 30: ND — No Destruction of Rights Article 30: No Data — No Destruction of Rights 30
Negative Neutral Positive No Data
Aggregates
Editorial Mean +0.20 Structural Mean +0.25
Weighted Mean +0.26 Unweighted Mean +0.24
Max +0.54 Article 19 Min +0.05 Preamble
Signal 9 No Data 22
Volatility 0.16 (Medium)
Negative 0 Channels E: 0.6 S: 0.4
SETL -0.04 Structural-dominant
FW Ratio 64% 30 facts · 17 inferences
Evidence 20% coverage
2H 7M 22 ND
Theme Radar
Foundation Security Legal Privacy & Movement Personal Expression Economic & Social Cultural Order & Duties Foundation: 0.08 (2 articles) Security: 0.00 (0 articles) Legal: 0.00 (0 articles) Privacy & Movement: 0.17 (1 articles) Personal: 0.00 (0 articles) Expression: 0.54 (1 articles) Economic & Social: 0.32 (1 articles) Cultural: 0.36 (2 articles) Order & Duties: 0.13 (2 articles)
HN Discussion 3 top-level · 3 replies
apothegm 2026-02-25 13:23 UTC link
Maybe not at super large font sizes. But even lowercase i and l are easy enough to confuse at a glance mid-word in most sans-serif fonts, not to mention uppercase I and lowercase l. You don’t even need “confusable” glyphs to create a domain name that will stand up to a casual visual confirmation from a busy user in a phishing context.
Oarch 2026-02-25 18:35 UTC link
This is really cool. I loved the technical breakdown and side by side comparisons. Surprised to hear that Microsoft and MacOS default fonts didn't score so well!
doctorpangloss 2026-02-27 06:04 UTC link
well, you didn't really do anything, did you? Claude Code rendered these things and wrote the blog post haha

> "This is not theoretical. It is a measured property of the font files shipping on every Mac."

some patterns of speech are so recognizably LLM, i am convinced that the AI detection startups have a very strong chance to succeed on text.

hinkley 2026-02-25 19:22 UTC link
Every Albert, Alfred, or Alphonso who goes by “Al” getting confused with bots right now…
aronhegedus 2026-02-27 06:22 UTC link
However it was written, it’s a useful and well structured article. I thought it was a good read
deaux 2026-02-27 06:25 UTC link
> some patterns of speech are so recognizably LLM, i am convinced that the AI detection startups have a very strong chance to succeed on text.

They don't, because of the market. Those who actually want to buy AI detection things usually want the impossible - detecting any kind of AI-written text, or even AI-written-human-edited text.

You're right in that articles like these are very easy to detect, but that's just because these article writers are too lazy to even use any of the plethora of tools that remove the smells automatically, or tools that write without them in the first place (I've made such a tool myself), or even just adjusting the prompt to write in a different style that avoids them.

Most people who would be interested in paying for AI detection tools want them to detect all of the above cases too, which is of course impossible.

Editorial Channel
What the content says
+0.45
Article 19 Freedom of Expression
High Advocacy Practice
Editorial
+0.45
SETL
+0.21

Content explicitly exercises and champions freedom of expression by publishing detailed technical research on a security vulnerability. The author freely investigates, analyzes, and communicates findings without censorship or gatekeeping. The work advocates for transparency in security research by making findings publicly available with reproducible methodology.

+0.35
Article 27 Cultural Participation
High Advocacy Practice
Editorial
+0.35
SETL
-0.14

Content strongly advocates for participation in the benefits of scientific advancement by publishing detailed technical research and making methodology reproducible. The work explicitly critiques proprietary approaches (CNN models with 'training corpus dependencies') in favor of deterministic, auditable methods that any researcher can reproduce. This supports universal access to the fruits of scientific inquiry.

+0.25
Article 25 Standard of Living
Medium Framing Practice
Editorial
+0.25
SETL
-0.12

Content implicitly supports Article 25 by analyzing a threat to digital security that disproportionately affects users with limited technical literacy or access to diverse browsers/fonts. The work advocates for systemic transparency in security design (font choice, browser behavior, moderation tool design) that affects users' ability to maintain secure identity online.

+0.20
Article 26 Education
Medium Framing Practice
Editorial
+0.20
SETL
-0.11

Content indirectly supports education by making technical security knowledge publicly accessible and reproducible. The detailed explanation of SSIM, font rendering, and confusable risk enables non-experts to understand a complex topic. However, the post assumes moderate technical literacy (familiarity with Unicode, fonts, command-line tools).

+0.15
Article 12 Privacy
Medium Practice
Editorial
+0.15
SETL
-0.10

Content implicitly addresses privacy by documenting how Unicode confusables enable domain spoofing, which threatens users' ability to safely use digital systems. The work does not explicitly discuss privacy rights but identifies a technical vector that compromises confidentiality and integrity of digital communication.

+0.15
Article 28 Social & International Order
Medium Framing
Editorial
+0.15
SETL
-0.10

Content implicitly supports a social order enabling human rights by identifying and documenting a structural vulnerability that undermines trust in digital systems. By making this vulnerability visible and measurable, the author supports informed design decisions that could protect users' rights to secure identity and private communication.

+0.10
Article 1 Freedom, Equality, Brotherhood
Medium Framing
Editorial
+0.10
SETL
ND

Content treats all readers as intellectually equal by explaining technical concepts clearly and not gatekeeping the findings. The work assumes readers can understand and act on the information if properly contextualized.

+0.10
Article 29 Duties to Community
Medium Framing
Editorial
+0.10
SETL
+0.07

Content is narrowly focused on a technical security problem and does not explicitly discuss duties or responsibilities. However, the implicit framing suggests that software designers, font foundries, and system developers have a duty to account for actual rendering behavior when designing security systems.

+0.05
Preamble Preamble
Medium Framing
Editorial
+0.05
SETL
ND

Content does not explicitly engage with UDHR principles of dignity or equal rights. However, it documents a technical security vulnerability that, if exploited, could undermine trust in digital systems and affect vulnerable populations. The work implicitly supports transparency and verification, which align with UDHR's foundational commitment to truth and equal access to justice.

ND
Article 2 Non-Discrimination

No observable content addressing freedom from discrimination.

ND
Article 3 Life, Liberty, Security

No observable content addressing right to life, liberty, security of person.

ND
Article 4 No Slavery

No observable content addressing slavery or servitude.

ND
Article 5 No Torture

No observable content addressing torture or cruel treatment.

ND
Article 6 Legal Personhood

No observable content addressing right to recognition as person before law.

ND
Article 7 Equality Before Law

No observable content addressing equal protection before law.

ND
Article 8 Right to Remedy

No observable content addressing right to remedy for violations.

ND
Article 9 No Arbitrary Detention

No observable content addressing arbitrary arrest or detention.

ND
Article 10 Fair Hearing

No observable content addressing fair and public hearing.

ND
Article 11 Presumption of Innocence

No observable content addressing presumption of innocence or criminal liability.

ND
Article 13 Freedom of Movement

No observable content addressing freedom of movement.

ND
Article 14 Asylum

No observable content addressing asylum or nationality.

ND
Article 15 Nationality

No observable content addressing nationality or change of nationality.

ND
Article 16 Marriage & Family

No observable content addressing marriage or family.

ND
Article 17 Property

No observable content addressing property rights.

ND
Article 18 Freedom of Thought

No observable content addressing freedom of thought, conscience, religion.

ND
Article 20 Assembly & Association

No observable content addressing freedom of peaceful assembly or association.

ND
Article 21 Political Participation

No observable content addressing political participation.

ND
Article 22 Social Security

No observable content addressing social security or welfare.

ND
Article 23 Work & Equal Pay

No observable content addressing right to work or labor rights.

ND
Article 24 Rest & Leisure

No observable content addressing rest, leisure, or reasonable working hours.

ND
Article 30 No Destruction of Rights

No observable content addressing prohibition of abuse of rights.

Structural Channel
What the site does
Element Modifier Affects Note
Legal & Terms
Privacy
No privacy-invasive tracking detected; static GitHub Pages site.
Terms of Service
Not applicable for technical blog.
Identity & Mission
Mission
Personal technical blog; no organizational mission statement.
Editorial Code
No explicit editorial guidelines visible.
Ownership
Author 'paultendo' identifiable from domain; ownership clear.
Access & Distribution
Access Model +0.08
Article 19 Article 27
Free, open-access blog content supports information access. No paywall or registration barrier observed.
Ad/Tracking
No advertising or tracking pixels detected in provided content.
Accessibility +0.05
Article 19 Article 25 Article 26
Theme toggle present (dark/light mode) supports accessibility. No explicit WCAG compliance statement visible. Content is text-heavy without apparent alt text for Unicode characters shown.
+0.40
Article 27 Cultural Participation
High Advocacy Practice
Structural
+0.40
Context Modifier
+0.08
SETL
-0.14

The open-access publication model, open-source methodology (fontconfig, node-canvas), and reproducible pipeline directly support Article 27's call for sharing in scientific advancement. No paywalls, registration, or proprietary tools required to understand or reproduce the work.

+0.35
Article 19 Freedom of Expression
High Advocacy Practice
Structural
+0.35
Context Modifier
+0.13
SETL
+0.21

The site is openly accessible without login, paywall, or registration. Content is published on a public platform (GitHub Pages) under implied open access. The theme toggle and accessible design support information access for diverse users. No evidence of content moderation, restriction, or suppression.

+0.30
Article 25 Standard of Living
Medium Framing Practice
Structural
+0.30
Context Modifier
+0.05
SETL
-0.12

The site includes accessibility features (dark/light theme toggle) and open access model that support users' ability to understand and act on security information. Text-heavy design without apparent alt text for Unicode characters may limit accessibility for visually impaired users.

+0.25
Article 26 Education
Medium Framing Practice
Structural
+0.25
Context Modifier
+0.05
SETL
-0.11

The open-access, paywall-free publication model supports educational access. The site's plain language explanations and inline definitions support learning. No explicit educational scaffolding or structured curriculum observed.

+0.20
Article 12 Privacy
Medium Practice
Structural
+0.20
Context Modifier
0.00
SETL
-0.10

The site uses localStorage for theme preference persistence, but this is non-invasive. No tracking, analytics, or third-party data collection observed. The open-access model respects user privacy by not requiring login or data extraction.

+0.20
Article 28 Social & International Order
Medium Framing
Structural
+0.20
Context Modifier
0.00
SETL
-0.10

The open-access platform and transparent methodology enable broader participation in security governance. However, the content does not explicitly call for policy change or institutional reform.

+0.05
Article 29 Duties to Community
Medium Framing
Structural
+0.05
Context Modifier
0.00
SETL
+0.07

The open-access model respects user freedom by not restricting access, but does not explicitly articulate duties or community obligations.

ND
Preamble Preamble
Medium Framing

Not applicable.

ND
Article 1 Freedom, Equality, Brotherhood
Medium Framing

Not applicable.

ND
Article 2 Non-Discrimination

Not applicable.

ND
Article 3 Life, Liberty, Security

Not applicable.

ND
Article 4 No Slavery

Not applicable.

ND
Article 5 No Torture

Not applicable.

ND
Article 6 Legal Personhood

Not applicable.

ND
Article 7 Equality Before Law

Not applicable.

ND
Article 8 Right to Remedy

Not applicable.

ND
Article 9 No Arbitrary Detention

Not applicable.

ND
Article 10 Fair Hearing

Not applicable.

ND
Article 11 Presumption of Innocence

Not applicable.

ND
Article 13 Freedom of Movement

Not applicable.

ND
Article 14 Asylum

Not applicable.

ND
Article 15 Nationality

Not applicable.

ND
Article 16 Marriage & Family

Not applicable.

ND
Article 17 Property

Not applicable.

ND
Article 18 Freedom of Thought

Not applicable.

ND
Article 20 Assembly & Association

Not applicable.

ND
Article 21 Political Participation

Not applicable.

ND
Article 22 Social Security

No observable content addressing social security or welfare.

ND
Article 23 Work & Equal Pay

Not applicable.

ND
Article 24 Rest & Leisure

Not applicable.

ND
Article 30 No Destruction of Rights

Not applicable.

Supplementary Signals
How this content communicates, beyond directional lean. Learn more
Epistemic Quality
How well-sourced and evidence-based is this content?
0.84 medium claims
Sources
0.8
Evidence
0.9
Uncertainty
0.8
Purpose
0.9
Propaganda Flags
1 manipulative rhetoric technique found
1 techniques detected
appeal to authority
Author cites Gupta et al. (2023) and references Unicode TR39 standard to establish credibility for SSIM choice over CNN approaches.
Emotional Tone
Emotional character: positive/negative, intensity, authority
measured
Valence
+0.1
Arousal
0.3
Dominance
0.6
Transparency
Does the content identify its author and disclose interests?
0.33
✓ Author ✗ Conflicts ✗ Funding
More signals: context, framing & audience
Solution Orientation
Does this content offer solutions or only describe problems?
0.58 mixed
Reader Agency
0.7
Stakeholder Voice
Whose perspectives are represented in this content?
0.35 3 perspectives
Speaks: individuals
About: corporationusersinstitution
Temporal Framing
Is this content looking backward, at the present, or forward?
present immediate
Geographic Scope
What geographic area does this content cover?
global
macOS, Windows
Complexity
How accessible is this content to a general audience?
moderate medium jargon domain specific
Longitudinal 743 HN snapshots · 6 evals
+1 0 −1 HN
Audit Trail 26 entries
2026-02-28 14:18 model_divergence Cross-model spread 0.26 exceeds threshold (4 models) - -
2026-02-28 14:18 eval_success Lite evaluated: Neutral (0.00) - -
2026-02-28 14:18 eval Evaluated by llama-3.3-70b-wai: 0.00 (Neutral) 0.00
reasoning
Technical post with no rights stance
2026-02-28 14:13 model_divergence Cross-model spread 0.26 exceeds threshold (4 models) - -
2026-02-28 14:13 eval_success Lite evaluated: Neutral (0.00) - -
2026-02-28 14:13 eval Evaluated by llama-3.3-70b-wai: 0.00 (Neutral)
reasoning
Technical post with no rights stance
2026-02-26 22:40 eval_success Light evaluated: Mild positive (0.10) - -
2026-02-26 22:40 eval Evaluated by llama-4-scout-wai: +0.10 (Mild positive)
2026-02-26 20:06 dlq Dead-lettered after 1 attempts: I rendered 1,418 confusables over 230 fonts. Most aren't confusable to the eye - -
2026-02-26 20:04 rate_limit OpenRouter rate limited (429) model=llama-3.3-70b - -
2026-02-26 20:03 rate_limit OpenRouter rate limited (429) model=llama-3.3-70b - -
2026-02-26 20:03 dlq Dead-lettered after 1 attempts: I rendered 1,418 confusables over 230 fonts. Most aren't confusable to the eye - -
2026-02-26 20:03 eval_failure Evaluation failed: Error: Unknown model in registry: llama-4-scout-wai - -
2026-02-26 20:03 eval_failure Evaluation failed: Error: Unknown model in registry: llama-4-scout-wai - -
2026-02-26 20:02 rate_limit OpenRouter rate limited (429) model=llama-3.3-70b - -
2026-02-26 17:31 dlq Dead-lettered after 1 attempts: I rendered 1,418 confusables over 230 fonts. Most aren't confusable to the eye - -
2026-02-26 17:29 rate_limit OpenRouter rate limited (429) model=llama-3.3-70b - -
2026-02-26 17:27 rate_limit OpenRouter rate limited (429) model=llama-3.3-70b - -
2026-02-26 17:26 rate_limit OpenRouter rate limited (429) model=llama-3.3-70b - -
2026-02-26 09:08 eval_success Evaluated: Neutral (0.05) - -
2026-02-26 09:08 eval Evaluated by deepseek-v3.2: +0.05 (Neutral) 13,217 tokens
2026-02-26 09:02 eval_success Evaluated: Neutral (0.04) - -
2026-02-26 08:56 dlq Dead-lettered after 1 attempts: I rendered 1,418 confusables over 230 fonts. Most aren't confusable to the eye - -
2026-02-26 08:55 dlq Dead-lettered after 1 attempts: I rendered 1,418 confusables over 230 fonts. Most aren't confusable to the eye - -
2026-02-26 04:42 eval Evaluated by claude-haiku-4-5-20251001: +0.26 (Mild positive) 15,615 tokens +0.06
2026-02-26 03:58 eval Evaluated by claude-haiku-4-5-20251001: +0.20 (Mild positive) 15,578 tokens