Model Comparison
Model Editorial Structural Class Conf SETL Theme
@cf/meta/llama-4-scout-17b-16e-instruct lite 0.00 ND Neutral 1.00 0.00
@cf/meta/llama-3.3-70b-instruct-fp8-fast lite 0.00 ND Neutral 1.00 0.00 No human rights
claude-haiku-4-5-20251001 +0.20 +0.16 Mild positive 0.17 0.15 Education & Digital Expression
Section @cf/meta/llama-4-scout-17b-16e-instruct lite @cf/meta/llama-3.3-70b-instruct-fp8-fast lite claude-haiku-4-5-20251001
Preamble ND ND 0.00
Article 1 ND ND 0.00
Article 2 ND ND ND
Article 3 ND ND ND
Article 4 ND ND ND
Article 5 ND ND ND
Article 6 ND ND ND
Article 7 ND ND ND
Article 8 ND ND ND
Article 9 ND ND ND
Article 10 ND ND ND
Article 11 ND ND ND
Article 12 ND ND 0.00
Article 13 ND ND ND
Article 14 ND ND ND
Article 15 ND ND ND
Article 16 ND ND ND
Article 17 ND ND ND
Article 18 ND ND ND
Article 19 ND ND 0.23
Article 20 ND ND ND
Article 21 ND ND ND
Article 22 ND ND ND
Article 23 ND ND 0.13
Article 24 ND ND ND
Article 25 ND ND ND
Article 26 ND ND 0.66
Article 27 ND ND 0.28
Article 28 ND ND ND
Article 29 ND ND ND
Article 30 ND ND ND
+0.20 Draggable objects (www.redblobgames.com S:+0.16 )
1059 points by stefankuehnel 885 days ago | 141 comments on HN | Mild positive Editorial · v3.7 · 2026-02-28 08:26:03 0
Summary Education & Digital Expression Advocates
Red Blob Games' tutorial on draggable object implementation is technical educational content that advocates for freely shared knowledge about web development and interactive design. The material is strongly aligned with the right to education (Article 26) through comprehensive, progressive documentation with working examples, and supports freedom of expression (Article 19) and cultural participation (Article 27) by teaching tools and techniques for interactive creative systems.
Article Heatmap
Preamble: 0.00 — Preamble P Article 1: 0.00 — 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.00 — 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.23 — 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: +0.13 — Work & Equal Pay 23 Article 24: ND — Rest & Leisure Article 24: No Data — Rest & Leisure 24 Article 25: ND — Standard of Living Article 25: No Data — Standard of Living 25 Article 26: +0.66 — Education 26 Article 27: +0.28 — Cultural Participation 27 Article 28: ND — Social & International Order Article 28: No Data — Social & International Order 28 Article 29: ND — Duties to Community Article 29: No Data — 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.16
Weighted Mean +0.22 Unweighted Mean +0.19
Max +0.66 Article 26 Min 0.00 Preamble
Signal 7 No Data 24
Volatility 0.22 (Medium)
Negative 0 Channels E: 0.6 S: 0.4
SETL +0.15 Editorial-dominant
FW Ratio 56% 19 facts · 15 inferences
Evidence 17% coverage
3H 4M 24 ND
Theme Radar
Foundation Security Legal Privacy & Movement Personal Expression Economic & Social Cultural Order & Duties Foundation: 0.00 (2 articles) Security: 0.00 (0 articles) Legal: 0.00 (0 articles) Privacy & Movement: 0.00 (1 articles) Personal: 0.00 (0 articles) Expression: 0.23 (1 articles) Economic & Social: 0.13 (1 articles) Cultural: 0.47 (2 articles) Order & Duties: 0.00 (0 articles)
HN Discussion 20 top-level · 30 replies
michaelwm 2023-09-29 13:29 UTC link
Amit was an instrumental part in the development of one of my favorite video games, Realm of the Mad God. It was a masterpiece of the Flash game genre, and its guild feature introduced me to many lifelong friends.
philipov 2023-09-29 13:31 UTC link
I think I might call RedBlobGames the #1 website on the internet for learning game algorithms and data structures. Amit is the best!
mumintrollet 2023-09-29 13:40 UTC link
I remember when I got back into programming, this site was one of the things that really made me excited to code + develop a deeper understanding of algorithms :)
npinsker 2023-09-29 14:01 UTC link
Off-topic a bit, but I've been curious about a 2D pathfinding problem for a while that this site doesn't seem to tackle despite having lots of articles on the subject. Is there an algorithm out there for finding "enclaves" (i.e. places where you might want to place rewards, spawn the player) within a large 2D terrain grid?

Not super precise, but given a 2D boolean array of pathable/unpathable cells, say generated by Perlin noise, find locations that are only accessible via a relatively narrow "choke point". Example: https://imgur.com/a/jFPXlS5

Standard pathfinding algorithms don't provide enough information to do this, but maybe there's some kind of heuristic approach that could work well.

slowhadoken 2023-09-29 14:22 UTC link
Amit Patel is the man. I always say his last name like Matthew Patel says his name in Scott Pilgrim. Side note: Sebastian Lague is great too.
feoren 2023-09-29 15:07 UTC link
Apart from the excellent subject matter, I often pull up this site during UI/UX discussions. Amit clearly has the ability to do really advanced JavaScript visualizations, but he only uses it exactly when necessary. Most of it is a plain document like you might write in Markdown, but when he uses JavaScript, it's illuminating, connected to all the other examples, and clean. Any animation he uses is clearly initiated by the user, and is there not because it looks cool, but because the intermediate frames help the user understand what's happening. It also never moves the rest of the layout around. I go back to this site any time I'm pondering how to do good online documentation, interactive help, tutorials, or even text-heavy presentation of results.
jjkaczor 2023-09-29 15:35 UTC link
Am going to chime in as well - Amit is amazing and has been providing his knowledge and experience since the early 90's, when I first encountered him on FidoNet over BBS, then next on Usenet.

Regular tech blog: https://amitp.blogspot.com/ Game Dev blog: https://simblob.blogspot.com/

tsumnia 2023-09-29 16:02 UTC link
A fantastic site. When I originally took over teaching Intro to AI, I initially relied on the A* search closed/open set pseudocode explanation[1]. However, when it would come time to ask students to implement it, I was constantly finding students absolutely confused by the approach. Once I swapped over to Amit's A* explanation, the number of confused students dropped significantly. Forever thankful for their walkthrough.

[1] https://en.wikipedia.org/wiki/A*_search_algorithm#Pseudocode

phkahler 2023-09-29 16:38 UTC link
The page reminded me of Ken Perlins' page:

https://cs.nyu.edu/~perlin/

Yes, the Perlin noise guy among many other things.

g9yuayon 2023-09-29 17:09 UTC link
I owe my thanks to this site too. When my team was designing our hexagonal system for geographical analysis back in Uber, I referred to https://www.redblobgames.com/grids/hexagons/ a lot.
amitp 2023-09-29 17:49 UTC link
Thank you everyone! What a surprise to be on HN today. Happy to answer questions!
qiller 2023-09-29 19:29 UTC link
Great write up for all the pitfalls and gotchas that come up when dealing with proper interactions

For something more "out of the box", I've been using interactjs for quite a while for a variety of my projects

ge96 2023-09-29 20:24 UTC link
I remember when this was a big deal to me, jQuery days.
displaynone 2023-09-29 20:32 UTC link
One thing missing: accessibility. how ought facilitate drag using keyboard controls?
wildrhythms 2023-09-29 20:57 UTC link
This article is about dragging, and I've run into all of the pitfalls and come to the same solutions that Amit talks about. Excellent article!

One of the hardest things I have needed to code from scratch is drag-to-reorder. It seem so natural from a user perspective, but when you get into inconsistently sized items, having to create placeholders between items, detecting edges, going down rabbitholes of box-fitting algorithms... it's a fun challenge :)

PaulDavisThe1st 2023-09-29 22:30 UTC link
One extra detail, something I've learned from 20 years of working on dragging all kinds of objects around the GUI of Ardour [0]: handle ALL button press and release events as drag events where there is no movement. That is: press ALWAYS starts a drag that is finished by the release, and the code that handles release "special cases" the no-movement condition.

[0] https://ardour.org/

Syzygies 2023-09-30 00:53 UTC link
In the distant past, there was this NSF-funded geometry center in Minneapolis. There was a computational group theory conference (these guys are over the top) and they invited a few mascots from neighboring fields. I had written a system for algebraic geometry, and got an invite. I'd get up really early in the -20F cold to insure a Silicon Graphics workstation for the day, and set about coding a game to better understand group generators and relations.

It involved dragging.

I loved the 2am conversations that resulted. My idea was that dragging need not respect real-world physics. Dragging should feel like a great tab of acid. And everyone was into this, everyone had ideas.

runarberg 2023-09-30 02:12 UTC link
Love this.

I was just implementing dragging an SVG element in a Vue app earlier this week, and had to discover pretty much everything the author describes in the article, even in the same order the author describes them, and ended up with pretty much an identical component to do so (except I wrote a composable utility `useDragging` instead of a functional component `<Draggable>`).

rgovostes 2023-09-30 08:59 UTC link
The article implements relatively basic dragging (notwithstanding the several edge cases that arise with web browsers). Are there resources on dragging with constraints such as snapping to guidelines, preventing collisions with boundaries or other objects, or animated drop targets that resize or move in response to the drag operation?

I once wanted to make a customizable Pomodoro timer UI based on subdividing a circular clock into wedges of different durations to define your focus/break intervals. I didn't get very far trying to implement drag-to-reorder of the wedges.

layer8 2023-09-30 11:20 UTC link
The article doesn’t seem to discuss cancellation. For example, there is the convention (at least on Windows) that pressing Escape cancels the dragging. Sometimes you also want to cancel the dragging when the mouse-up happens outside of some defined area. Cancellation serves as a quicker Undo (or an “oh, I actuality didn’t mean to drag”) for the user. In any case, this means that you have to save the original state at the start of the dragging, so that it can be restored if the dragging is cancelled, even if you otherwise provide no Undo functionality.

In the case of cancellation-when-dragging-outside-an-area, there’s also un-cancellation, meaning you resume the dragging when the pointer returns to the area, after the state visually reverted to the original one while outside the area (to indicate to the user that a cancellation would happen if the mouse button is released at that point). Or put differently, the real cancellation only happens upon mouse-up, but is already visually indicated while dragging.

kibwen 2023-09-29 13:42 UTC link
RotMG has a great idea that I wish more games would copy: difficulty scales with elevation. If you want to take it easy, stick to the coasts. If you want a challenge, strike inland towards the mountains (or follow a river upstream). It's a great way of intuitively expressing difficulty ranges across a sprawling world map, and I remember being disappointed the first time that I played Skyrim that it didn't seem to do the same.

For posterity, here's Amit on map generation: https://simblob.blogspot.com/2010/01/simple-map-generation.h...

stefan_ 2023-09-29 14:13 UTC link
Lots of pathfinding solutions prefer to work with connected convex polygons (since inside the polygon, you can always go straight to every other point inside). You could merge your cells into these polygons and then filter for small ones by area, I guess.
Marazan 2023-09-29 15:06 UTC link
Brute force and ignorance approach:

Choose random starting point and compute distance to all other points on the map. Repeat for multiple random starting points.

Average the distance.

Points with high average distance are difficult to reach.

otikik 2023-09-29 15:23 UTC link
You are not trying to find a "path" since you don't have a starting point - you only have end points. Your enclaves are more defined by the shape of the walls (roughly x cells in radius) than with the fact that you reach them through chokepoints. After all, a chokepoint can be just a small door in an otherwise big corridor, separating two big areas. And by concentrating on chokepoints you will lose all the "isolated islands".

You might be luckier treating this as a "map treatment" problem. An algorithm that does things to the whole map, and then reads the result.

For example:

  1. Start assigning a score of 0 to all map cells.
  2. For every cell in the map, set to 1 if it's in contact with any walls
  3. Then add 1 to every cell of the map if it contacts a cell with a non-zero value
  4. Repeat the above step n times, where n is the average "radius" of you enclave rooms.
  5. Every cell with a score of n or higher is a "candidate". For every candidate:
    5.a Check that none of the cells around have a bigger score. If so, move on to the next candidate
    5.b Check that there's no "treasure" around it in a circle of radius n
    5.c You have found the center of an enclave. Mark it with "treasure" and move on to the next cell.
gabereiser 2023-09-29 15:32 UTC link
Find starting point in dungeon. A* to every room. Rooms with a large distance (iter count) and with only one or two paths out (choke points, use graph to see edges) become potentials, every potential that is _far & narrow_ is flagged “enclave” with rewards increasing by distance to start.

This is one way to approach the problem. The other way is to do prefab rooms and when generating your dungeons, randomly select one or two prefab enclave rooms to throw into the shuffle. Shuffle the rooms and spread them out then connect hallways and such. This is the approach that Enter the Gungeon took.

Another approach is what @otikik describes. Tracing the walls buy assigning a value to the cells that can then be scored. Minesweeper style.

drng 2023-09-29 16:57 UTC link
This almost perfectly describes https://ciechanow.ski/ as well. Worth poking through if you haven't seen it before.
amitp 2023-09-29 17:09 UTC link
Tarjan's Algorithm can be used to find choke points, although I haven't tried it myself [1]. I think what I would try is Breadth First Search with multiple start points to calculate various metrics for the map [2] and maybe All-Pairs if you need more [3]. For example, you might use Tarjan's or All-Pairs to find the most commonly used corridors, and then use Breadth First Search from those "central" points to find the "farthest from central corridor" points.

[1] https://old.reddit.com/r/roguelikedev/comments/dc4orn/identi...

[2] https://www.redblobgames.com/pathfinding/distance-to-any/

[3] https://www.redblobgames.com/pathfinding/all-pairs/

birracerveza 2023-09-29 17:56 UTC link
No, thank YOU. This is an awesome resource for learning game algorithms, and it's a lot of fun to just play around with the interactive explanations.

Definitely one of the best websites I know. Cheers!

gowld 2023-09-29 17:59 UTC link
What's the difference between the approaches?
gaolei8888 2023-09-29 19:39 UTC link
Awesome work! Thanks a lot. It is fun to read these type creative articles
amitp 2023-09-29 20:17 UTC link
That's great to hear — thank you!
ww520 2023-09-29 20:31 UTC link
That is a fantastic discussion on dragging with Javascript. Really appreciate the information.

I've a quick question. How do you restrict the dragging movement to an axis using the built-in DOM events like dragstart/etc. I had a drag & drop feature implemented using the dragstart/dragenter/dragover/drop/etc events. I couldn't find a quick way to restrict the dragging movement to the x-axis. JQuery's drag and drop API used to support it. I'm trying to use the native DOM events/api only. Any information or pointers are greatly appreciated.

stronglikedan 2023-09-29 20:37 UTC link
That would be a moveable object, and I reckon it would be easy to implement using this as a basis.
collinmanderson 2023-09-29 20:59 UTC link
Have you looked at html's built-in draggable="true" attribute and drag events?

Are there shortcomings with the built-in feature compared to your code?

https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement...

https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement...

https://developer.mozilla.org/en-US/docs/Web/HTML/Global_att...

bmitc 2023-09-29 21:11 UTC link
I always wish there was more specification surrounding his Perlin noise algorithm he has on his website. For example, asking what the range of output values is does not have an easy answer.
pupppet 2023-09-29 21:51 UTC link
Oof, or drag-to-reorder while supporting nesting.
amitp 2023-09-29 21:51 UTC link
Thank you! I treat them as documents, with some interactive elements. I tend to avoid traditional animations because they're outside the reader's control. I want the reader to be able to pause, slow down, speed up, rewind, etc. One thing I'm going for but haven't completely achieved is that I want the diagrams to be useful even before the interaction.

I am collecting some of the design elements here: https://www.redblobgames.com/making-of/little-things/

bastawhiz 2023-09-29 22:02 UTC link
Overwhelmingly, the answer is "you don't." Your UI should provide alternatives to dragging that allow folks who can't use a point/touch devices to interact with your page. Which is to say, don't shoehorn keyboard support into your drag implementation, add separate keyboard functionality that makes sense in addition to drag functionality.
aboodman 2023-09-29 22:38 UTC link
I have a trick for this that I love that is very general:

1. When a user begins dragging, calculate the layouts for all possible drop targets (or perhaps just those that are currently visible). 2. For each of those layouts record the position the dragged objects ends up in. 3. On each mouse movement, select from those positions the one that's closest to the dragged object's current position 4. Render the selected layout

This ends up feeling really good and works for any kind of complex layout / reflow.

ChadNauseam 2023-09-29 22:51 UTC link
> I always say his last name like Matthew Patel says his name in Scott Pilgrim

One of the seven evil hexes :D

wruza 2023-09-29 23:02 UTC link
What’s the rationale here?
allenu 2023-09-29 23:28 UTC link
I had to tackle this problem for my index card app, Card Buddy. [1] It was definitely a fun challenge and I still found a better way to do it later.

What I ended up doing is when you pick up a card, I compute the layout as if the card was deleted from the board, and then it becomes easy. Wherever you hover the mouse, I just displace whatever is there.

There were still tons of edge cases I had to work out, though, especially when you start editing a new card that hasn’t been “committed” to the data model yet. I had to add the option to shift existing cards out of the way to make room for a phantom card.

It helps to recognize that there are just lots of edge cases you have to manually handle. If you try to tackle it as though there’s a more generic/homogeneous solution, you end up going around in circles a bit with the design. I should probably create a blog post on all the different edge cases.

As I said, though, I found an even better way to do my layout, which saves on unnecessary computations and makes the layout engine more flexible and user-friendly. (It’s amazing what a difference your choice of data model representation makes on your solution.) It’s been a fun puzzle to solve!

[1] https://www.ussherpress.com/cardbuddy/

nkrisc 2023-09-29 23:53 UTC link
I think that's a bit off base here. It's like asking how does a keyboard user facilitate click-and-hold to pan the canvas in a drawing program? They don't. Panning with the mouse (or dragging objects) is one interface. The task is panning the canvas, the means to achieve that are varied.

In my example, the answer to the question about accessibility is to additionally provide keyboard controls to complete the task (preferably ones that don't - or optionally don't - require holding a key). For example perhaps a key shortcut to enter a pan mode, in which the arrow keys move the viewport around the canvas. Problem solved.

As for draggable objects, the task is re-ordering. How do you make that accessible? Provide an alternative means to re-order objects, perhaps using TAB to cycle focus through the objects, then a key to select the focused one, and use the arrow keys to move the drag preview to the nearest valid position in that direction.

slowhadoken 2023-09-30 00:35 UTC link
Same. It’s such a simple idea but execution can be brutal. I also took drag select for granted for years too.
amitp 2023-09-30 01:11 UTC link
Oh wow, FidoNet, that brings back memories. :-) I still miss Usenet of old.
hutzlibu 2023-09-30 08:30 UTC link
That should also work, but I did not do it this way and had no problems after I got the basics right. I have general mousedown and mouseup handlers and use a timeout(~150 ms, but configurable), to determine if we deal with a click, or start dragging (or other things). And on mouseup (or if the mouse leaves the screen) and there is dragging in progress -> stopdrag. So dragging for me ist just one of different special cases ..
dgreensp 2023-09-30 15:21 UTC link
I used to write browser UI code all the time, but it’s been a few years. This is the first I’ve heard of someone using pointer events.

Do you worry at all about someone’s browser not supporting them, given that Safari added support in 2020? I guess Safari 12 is hopefully no longer used in practice, with macOS Mojave users hopefully running Safari 13 or 14? It would be pretty bad if something as simple as dragging didn’t work in a production app designed for the market of web users at large.

Adding event handlers to the document during a drag is a time-honored practice, and browsers add brand-new features all the time that are intended to simplify some use case or other but have their own edge cases and gotchas, which the article says are not fully addressed. And there’s still a combination of pointer and touch events in the end result. I wonder if the “simplicity” in the sense of less code is worth the additional edge cases, less browser support, and the developer needing to understand the ins and outs and browser differences of pointer events, which are presumably less understood and documented than mouse events.

qingcharles 2023-09-30 17:13 UTC link
Is there a different cancelation key used on other platforms, other than ESC that I should handle?
amitp 2023-09-30 17:23 UTC link
The way this code works, the drag motion updates some state. I can apply constraints when setting the state. Then the state drives the redisplay.

I wanted to separate the constraint system from the event handling system. Libraries like jquery-ui tie them together, so the event handling system has to know all the possible constraints. In jquery-ui, they support bounding box, axis, square grid, snapping to dom elements. But what if I wanted snapping to a hex grid, or a logarithmic scale grid, or a bounding circle? It's not supported.

In the code you'll see "state.pos = …". That's where the state is set. For constraints, I put "pos" behind a setter. Then the setter can apply the constraint, without the drag event handling code having to know what type of constraints are needed.

I should update the page to show some examples of constraints. I completely forgot to mention this aspect of the code recipe. (Thanks!)

I have some older examples of constraints at https://www.redblobgames.com/articles/curved-paths/making-of... and a prevent-collision example at https://redblobgames.github.io/circular-obstacle-pathfinding... . However I haven't tried drag-to-reorder or animated drop targets.

amitp 2023-09-30 17:38 UTC link
Cool! I've tried a directive and tried a component (with slots) but I haven't tried a composable, mainly because I wasn't sure how to set up event handlers that way. (I don't have a lot of experience with composables)
Editorial Channel
What the content says
+0.70
Article 26 Education
High Advocacy
Editorial
+0.70
SETL
+0.26

Content is comprehensive educational material teaching web development techniques. Structured as progressive tutorial from basic to advanced concepts. Includes historical context, best practices, and multiple working examples demonstrating each technique.

+0.30
Article 27 Cultural Participation
High Advocacy
Editorial
+0.30
SETL
+0.12

Content teaches techniques for creating interactive visual and creative experiences. Discusses interactive diagrams, game design applications, and tools for creative expression. Supports readers' ability to participate in cultural and creative expression through interactive media.

+0.25
Article 19 Freedom of Expression
High Advocacy Framing
Editorial
+0.25
SETL
+0.11

Content teaches techniques for creating interactive systems that enable user expression and communication. Advocates for tools and methods that support freedom of expression through interactive technology.

+0.15
Article 23 Work & Equal Pay
Medium Advocacy
Editorial
+0.15
SETL
+0.09

Content documents professional web development practices including testing, accessibility, and quality standards that support good working conditions and professional excellence.

0.00
Preamble Preamble
Medium
Editorial
0.00
SETL
ND

Content does not engage with concepts of human dignity, freedom, or fundamental rights.

0.00
Article 1 Freedom, Equality, Brotherhood
Medium
Editorial
0.00
SETL
ND

Content does not address equality, fundamental rights, or human dignity.

0.00
Article 12 Privacy
Medium
Editorial
0.00
SETL
ND

Content describes input handling and event capture mechanisms but does not address privacy, family, home, or correspondence protections.

ND
Article 2 Non-Discrimination

Not addressed.

ND
Article 3 Life, Liberty, Security

Not addressed.

ND
Article 4 No Slavery

Not addressed.

ND
Article 5 No Torture

Not addressed.

ND
Article 6 Legal Personhood

Not addressed.

ND
Article 7 Equality Before Law

Not addressed.

ND
Article 8 Right to Remedy

Not addressed.

ND
Article 9 No Arbitrary Detention

Not addressed.

ND
Article 10 Fair Hearing

Not addressed.

ND
Article 11 Presumption of Innocence

Not addressed.

ND
Article 13 Freedom of Movement

Not addressed.

ND
Article 14 Asylum

Not addressed.

ND
Article 15 Nationality

Not addressed.

ND
Article 16 Marriage & Family

Not addressed.

ND
Article 17 Property

Not addressed.

ND
Article 18 Freedom of Thought

Not addressed.

ND
Article 20 Assembly & Association

Not addressed.

ND
Article 21 Political Participation

Not addressed.

ND
Article 22 Social Security

Not addressed.

ND
Article 24 Rest & Leisure

Not addressed.

ND
Article 25 Standard of Living

Not addressed.

ND
Article 28 Social & International Order

Not addressed.

ND
Article 29 Duties to Community

Not addressed.

ND
Article 30 No Destruction of Rights

Not addressed.

Structural Channel
What the site does
+0.60
Article 26 Education
High Advocacy
Structural
+0.60
Context Modifier
ND
SETL
+0.26

All content freely accessible without barriers. Includes interactive code examples and live demos. Content is well-organized for self-directed learning. Multiple examples support different learning styles and use cases.

+0.25
Article 27 Cultural Participation
High Advocacy
Structural
+0.25
Context Modifier
ND
SETL
+0.12

Provides freely accessible knowledge and examples enabling readers to create interactive experiences. References game design, interactive diagrams, and responsive design applications.

+0.20
Article 19 Freedom of Expression
High Advocacy Framing
Structural
+0.20
Context Modifier
ND
SETL
+0.11

Provides free, openly accessible knowledge and working code examples that enable readers to create expressive interactive systems.

+0.10
Article 23 Work & Equal Pay
Medium Advocacy
Structural
+0.10
Context Modifier
ND
SETL
+0.09

Provides free knowledge sharing that enables workers to improve their craft and professional standards.

0.00
Preamble Preamble
Medium
Structural
0.00
Context Modifier
ND
SETL
ND

Page structure is neutral with respect to human dignity principles.

0.00
Article 1 Freedom, Equality, Brotherhood
Medium
Structural
0.00
Context Modifier
ND
SETL
ND

No structural elements that distinctly promote or undermine equality in dignity or rights.

0.00
Article 12 Privacy
Medium
Structural
0.00
Context Modifier
ND
SETL
ND

No privacy protection or privacy concern mechanisms observable on page structure.

ND
Article 2 Non-Discrimination

Not addressed.

ND
Article 3 Life, Liberty, Security

Not addressed.

ND
Article 4 No Slavery

Not addressed.

ND
Article 5 No Torture

Not addressed.

ND
Article 6 Legal Personhood

Not addressed.

ND
Article 7 Equality Before Law

Not addressed.

ND
Article 8 Right to Remedy

Not addressed.

ND
Article 9 No Arbitrary Detention

Not addressed.

ND
Article 10 Fair Hearing

Not addressed.

ND
Article 11 Presumption of Innocence

Not addressed.

ND
Article 13 Freedom of Movement

Not addressed.

ND
Article 14 Asylum

Not addressed.

ND
Article 15 Nationality

Not addressed.

ND
Article 16 Marriage & Family

Not addressed.

ND
Article 17 Property

Not addressed.

ND
Article 18 Freedom of Thought

Not addressed.

ND
Article 20 Assembly & Association

Not addressed.

ND
Article 21 Political Participation

Not addressed.

ND
Article 22 Social Security

Not addressed.

ND
Article 24 Rest & Leisure

Not addressed.

ND
Article 25 Standard of Living

Not addressed.

ND
Article 28 Social & International Order

Not addressed.

ND
Article 29 Duties to Community

Not addressed.

ND
Article 30 No Destruction of Rights

Not addressed.

Supplementary Signals
How this content communicates, beyond directional lean. Learn more
Epistemic Quality
How well-sourced and evidence-based is this content?
0.78 medium claims
Sources
0.8
Evidence
0.8
Uncertainty
0.8
Purpose
0.9
Propaganda Flags
No manipulative rhetoric detected
0 techniques detected
Emotional Tone
Emotional character: positive/negative, intensity, authority
measured
Valence
+0.3
Arousal
0.1
Dominance
0.7
Transparency
Does the content identify its author and disclose interests?
0.60
✓ Author
More signals: context, framing & audience
Solution Orientation
Does this content offer solutions or only describe problems?
0.91 solution oriented
Reader Agency
0.8
Stakeholder Voice
Whose perspectives are represented in this content?
0.60 4 perspectives
Speaks: individualsinstitution
About: individualscorporation
Temporal Framing
Is this content looking backward, at the present, or forward?
prospective medium term
Geographic Scope
What geographic area does this content cover?
global
Complexity
How accessible is this content to a general audience?
technical high jargon domain specific
Longitudinal · 4 evals
+1 0 −1 HN
Audit Trail 7 entries
2026-02-28 14:20 eval_success Lite evaluated: Neutral (0.00) - -
2026-02-28 14:20 eval Evaluated by llama-4-scout-wai: 0.00 (Neutral) 0.00
reasoning
Editorial on technical topic, no human rights discussion
2026-02-28 14:15 eval_success Lite evaluated: Neutral (0.00) - -
2026-02-28 14:15 eval Evaluated by llama-4-scout-wai: 0.00 (Neutral)
reasoning
Editorial on technical topic, no human rights discussion
2026-02-28 14:07 eval_success Lite evaluated: Neutral (0.00) - -
2026-02-28 14:07 eval Evaluated by llama-3.3-70b-wai: 0.00 (Neutral)
reasoning
PR tech tutorial
2026-02-28 08:26 eval Evaluated by claude-haiku-4-5-20251001: +0.22 (Mild positive)