HellDots
A drop-in comment overlay for web apps. Your team clicks anywhere on a page, leaves a comment anchored to that element, and HellDots captures the context needed to act on it — a screenshot, the browser, the viewport, the DOM path.
// npm install helldots
import { createCommentOverlay } from 'helldots';
createCommentOverlay({
user: { name: 'Ana' },
persistence: 'localStorage',
});That is the whole integration. Alt + C toggles comment mode.
Anchored to the element
A selector, a DOM path and a structural fingerprint. When the page changes, the comment re-anchors; when the element is genuinely gone, it is marked orphaned rather than silently dropped.
Screenshot and environment
The page as they saw it, plus URL, viewport, screen, DPR, browser, OS and language. A bug filed at 390×844 on iOS Safari says so, without anyone having to ask.
Your data, your store
No backend, no account, no telemetry. Persist to localStorage in one line, or subscribe to the callbacks and keep every comment as plain JSON in your own database.
Triage that survives
Status, type, priority and free-form tags, plus an append-only audit trail of who moved what and when. Resolution time is derived from the log, not stored beside it.
Built for more than one
Reactions, replies, a permission predicate, and a meta.origin on every event so applying a change from a socket does not echo straight back to the server.
Out of the way
Alt+C to arm, click to place, drag to crop. Rendered inside a Shadow DOM, so your CSS cannot leak in and its styles cannot leak out.
Nothing is sent anywhere
There is no HellDots service on the other end. Comments live in the visitor’s browser, or in your own database through ten callbacks and one change stream. MIT licensed, ESM only, types included.