Step one
Load It On The Page
A bookmarklet for a one off, or a script tag on a staging environment you keep returning to. It runs inside the page rather than framing it, because almost every site refuses to be framed.
Every element on a page is a decision somebody made, and almost none of those decisions are written down anywhere. WhyTho pins the reasoning to the element itself.
WhyTho is an annotator for webpages. You start it on a page with a bookmarklet or a one line script tag, select an element, and write down why that element is the way it is. A numbered pin sticks to the element, and the note is stored against a selector rather than against a screenshot or a line number.
Each note carries more than its text. It records the selector, the tag, a snippet of the element's content, the viewport width and breakpoint it was written at, a category, a status, and who wrote it. A note taken at 390px is filed as a mobile observation rather than a rule about the whole site, which matters when the same element behaves differently at two breakpoints.
Selection works the same on both ends: click on desktop, press and hold on a phone. The whole interface lives in a shadow root, so the page being annotated cannot restyle it and it cannot leak styles into the page.
A site accumulates decisions faster than anyone documents them. An H1 phrased as a service plus a city because that is where the demand sits. A canonical pointing somewhere non obvious. A block of copy that reads awkwardly because it answers the question people actually search. Six months later the reasoning is gone, and what remains is an element that looks arbitrary to whoever inherits it.
So it gets changed. Not maliciously, just in the course of a redesign, a CMS migration, or a new writer tidying the copy. The work that produced the ranking is undone by someone who had no way of knowing it was load bearing, and nobody notices until the traffic moves.
Documentation in a separate file does not fix this, because the person about to change the element is looking at the element, not at the file. WhyTho puts the reasoning where the decision is visible.
Four situations, all of them handover in one form or another.
Four steps, and one constraint that shapes all of them.
Step one
A bookmarklet for a one off, or a script tag on a staging environment you keep returning to. It runs inside the page rather than framing it, because almost every site refuses to be framed.
Step two
Click on desktop, press and hold on touch. The generated selector prefers meaning over position: an id first, then test hooks such as data-testid, then a stable class path, and only then nth-of-type.
Step three
A category, a status, and the note itself. The viewport is captured automatically, so the record says which breakpoint you were looking at rather than leaving that to memory.
Step four
Notes write through to a database keyed to your account, so the same set is there from any browser. If the network is down they are held locally and pushed on the next run.
Three engineering notes worth stating: hashed build classes, from emotion, styled components and similar, are filtered out of generated selectors, because a selector built on them breaks at the next deploy. Notes are matched back to elements on load, and a note whose element has moved is shown as unresolved rather than silently reattached to the wrong thing, since a wrong pin is worse than a missing one. And because the annotator runs on someone else's origin, it cannot hold a normal session, so it carries a per account token embedded in your own bookmarklet and every write is pinned server side to the account that token belongs to.
Anyone who has to explain a page to someone who will edit it later. Developers inheriting a codebase, SEO consultants handing work back to an in house team, content teams who keep being asked why a heading is phrased that way.
It is most useful on the pages that get touched by people who did not build them, which is to say the templates.
It is live, anyone can sign up, and the annotator itself is free.
Status and access
A static front end, a small database, and one endpoint that exists only because of where the annotator has to run.
Stack
Recording a decision is the cheap part. Making the decision, and sequencing it against everything else competing for the same engineering time, is the work. That is what an engagement is for.