Client feedback, pinned to the pixel.
A lightweight feedback widget that lets your clients annotate websites during development. Draw rectangles, leave comments, track bugs — directly on the live site.
See SitePing in action → — Draw annotations, leave feedback, track bugs directly on the live site.
Stop chasing client feedback across Slack threads, email chains, and Notion docs. SitePing gives your clients a contextual way to leave feedback — anchored to the exact element they're looking at.
| SitePing | Marker.io | BugHerd | |
|---|---|---|---|
| Self-hosted | Yes — your DB, your data | No (SaaS) | No (SaaS) |
| npm package | npm install and go |
npm + script tag | Script tag only |
| Framework-native | First-class Next.js support | Framework-agnostic | Framework-agnostic |
| Pricing | Free & open source | From $39/mo | From $42/mo |
| DOM-anchored annotations | Multi-selector (CSS + XPath + text) | Screenshot-based | Pin-based |
| Annotations survive layout changes | Yes (percentage-relative rects) | No (pixel coordinates) | Partially |
- Rectangle annotations — clients draw directly on the page, with category + message
- DOM-anchored persistence — annotations tie to elements, not pixels; they survive layout changes
- Instant right-click comments — opt-in, and it never hijacks keyboard or modifier-key context menus
- Screenshots + diagnostics — opt-in JPEG of the annotated area (with privacy masking) and console/network capture
- Triage inbox —
<SitepingInbox />(@siteping/dashboard): Linear-style, keyboard-first, light/dark, 7 locales - Reliability built in — retry with backoff plus a localStorage queue; a flaky network never loses a comment
- Shadow DOM isolation — widget CSS never leaks into your site, and your site CSS never breaks the widget
- Dev-only by default — auto-hides in production builds unless
forceShow: true - Lightweight — ~30 KB gzipped (ESM); the panel, screenshot engine, and non-English locales load on demand
npm i @siteping/widget @siteping/adapter-prisma
npx @siteping/cli init # adds the Prisma models + generates the API route
npx prisma db push"use client";
import { useSiteping } from "@siteping/widget/react";
export function Feedback() {
useSiteping({ endpoint: "/api/siteping", projectName: "my-app" });
return null;
}Your clients can now draw rectangles on the site and leave feedback. Triage it with one component:
import { SitepingInbox } from "@siteping/dashboard";
<SitepingInbox projects="my-app" endpoint="/api/siteping" theme="auto" />No server? The widget also runs fully client-side with store: new LocalStorageStore() — the three-minute quickstart covers both paths, prerequisites included.
The full documentation lives at siteping.dev/docs (English and French) — every option, default, and behavior on these pages is verified against the source code.
| Package | Docs | |
|---|---|---|
@siteping/widget |
The feedback widget (framework-agnostic + React hook) | Widget · Configuration · Screenshots |
@siteping/dashboard |
Triage inbox component + headless hook | Dashboard · Theming |
@siteping/adapter-prisma |
Production server adapter (auth, CORS, webhooks) | Prisma adapter |
@siteping/adapter-memory |
In-memory store (tests, demos) | Memory adapter |
@siteping/adapter-localstorage |
Client-side store (zero server) | localStorage adapter |
@siteping/cli |
init / sync / status / doctor |
CLI |
Bug reports, locale translations, docs fixes, features — everything counts, and locale additions are the friendliest first PR. Start with CONTRIBUTING.md.
Maintaining a fork with extra features (semantic anchors, screenshot storage backends, positioning fixes have all come from forks)? An upstream PR — or even an issue describing what you built — lets everyone benefit.
Every line of code, locale, doc fix, and bug report makes SitePing better. Huge thanks to everyone who has shown up — first-time contributors especially.
This project follows the all-contributors specification — every kind of contribution counts (emoji key).
Olsen Matheo 💻 🚧 📖 🎨 🚇 🤔 👀 |
Alce 💻 🌍 |
Jörn Bungartz 🐛 💻 |
Andi Keßler 💻 |
Valerii 💻 |
JinHyuk Sung 💻 |
Marian Steinbach 🐛 🤔 |
LIghtJUNction 💻 |
Rehuz 💻 |
Snorre Lothar von Gohren Edwin 🤔 |
Want to be in this list? Code, docs, translations, bug reports, design ideas — all count. See CONTRIBUTING.md to get started. The @all-contributors bot can add you automatically when a maintainer comments
@all-contributors please add @your-username for code, doc.
Activity graph powered by Repobeats.
