Skip to main content

Drop-in design-feedback widget. Click → page freezes → drag a rect → engineer pulls the diagnostic envelope. Self-hostable on localhost.

Project description

annotator

Drop-in design-feedback widget for any web app.

Click the bubble → page freezes → drag a rectangle → type one sentence → an annotation drops onto the engineer's filesystem with the screenshot, the URL, the clicked element selector, console logs, network errors, and JS exceptions captured at the moment of the click.

Self-hostable on localhost. Zero infrastructure.

pipx install vylth-annotator   # or: npm i -g vylth-annotator
annotator run                  # opens dashboard at http://localhost:8092

Drop this into your dev site:

<script src="http://localhost:8092/w.js"
        data-project="local"
        data-token="local"
        data-webhook="http://localhost:8092/v1/feedback"></script>

Done. Submitted annotations appear as a .png + .md pair under ./.annot/local/ and on the dashboard. Run annotator skill install once and Claude Code / Codex / Cursor will pick them up automatically.

How it works

[bubble click]
   ↓
1. dom-to-image → static PNG of the viewport (≈80ms)        ← page freezes
2. PNG becomes the backdrop, you draw rects on a <canvas>
3. Comment + Send → POST diagnostic envelope to the API
   ↓
4. Server writes:
   - SQLite row (queryable)
   - .annot/<project>/<id8>-<slug>.png   (screenshot with rects baked in)
   - .annot/<project>/<id8>-<slug>.md    (frontmatter + readable envelope)
   - dashboard updates live
   - optional: webhook fanout (Slack / Discord / Linear / custom HTTP)

The diagnostic envelope is collected automatically — the user only types the comment. console.log/warn/error, fetch, XHR, window.onerror, and unhandledrejection are tapped the moment w.js loads, ring-buffered, dumped at submit time.

Three install modes for the widget

Mode When to use
<script> tag Any web app you control. One line, ≤30KB, vanilla, Shadow DOM isolated.
Browser extension Annotate any third-party site (competitor analysis, design refs).
@vylth/annotator-react React app that wants the widget visible only in dev/staging.

Mode 1 is shipped. Mode 2 + 3 are scaffolded — see /mnt/vylth/labs/directives/annotator/DIR-0073-productize-annotator.md.

Layout

src/vylth_annotator/      — pip-installable Python service
  cli.py                  — `annotator run | list | pull | resolve | init | skill`
  main.py                 — FastAPI app
  models.py               — SQLAlchemy (SQLite locally, Postgres for hosted)
  sink.py                 — disk writer (PNG + Markdown per annotation)
  fanout.py               — Slack / Discord / Linear / HTTP webhook dispatch
  templates/dashboard.html
  static/w.js             — built widget bundle
  skill/SKILL.md          — agent instructions

packages/
  widget/                 — TypeScript widget source (Vite single-file)
  cli/                    — npm shim that forwards to the Python CLI

pyproject.toml            — vylth-annotator on PyPI
LICENSE                   — MIT

Agent integration

annotator skill install --target auto

Drops SKILL.md into the right place for the agents present in your project — .claude/skills/annotator/, AGENTS.md, .cursor/rules/. Now the agent knows how to find new .md files in .annot/, read the diagnostic envelope, fix the underlying issue, and mark the annotation resolved.

License

MIT. Built by Vylth Labs.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

vylth_annotator-0.0.1.tar.gz (30.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

vylth_annotator-0.0.1-py3-none-any.whl (36.8 kB view details)

Uploaded Python 3

File details

Details for the file vylth_annotator-0.0.1.tar.gz.

File metadata

  • Download URL: vylth_annotator-0.0.1.tar.gz
  • Upload date:
  • Size: 30.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for vylth_annotator-0.0.1.tar.gz
Algorithm Hash digest
SHA256 d7380334ff1969c73afc001f60b5592ec7f3c5f71ee3b67bad795e02321d5e2b
MD5 bc405434788bd64215729c7133688fb1
BLAKE2b-256 a2db7406aabb8899cd030002826fcc57f86332f8784a5fa0ccd1dc552c151108

See more details on using hashes here.

File details

Details for the file vylth_annotator-0.0.1-py3-none-any.whl.

File metadata

File hashes

Hashes for vylth_annotator-0.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 d71b2c5216705da9d0cfc127108fdac0e93a5468d4922409e8b859c340b76a5f
MD5 eec6d87ca10b2cb2a5ac093d7c8ca24c
BLAKE2b-256 c33ae5871fdcdf6ff9da2afd05422033458b75abe3dc88484841d2d503e8e01f

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page