Data & self-hosting

Effective date: 2026-09-12

PinSay stores feedback about UI elements, not your users' data. Nothing is sent to the server until a signed-in stakeholder clicks an element and submits a comment.

Overview

When teams use PinSay to report visual defects or request UI changes, PinSay collects only the technical element and layout context required for developers and AI agents to locate and modify code. This document details the exact data schema captured, privacy controls, storage boundaries, and self-hosted deployments.

What a comment contains

Each submitted comment generates an ElementCapture payload containing technical identifiers of the target element. Child subtrees and parent DOM trees are not included:

FieldFormat / LimitDescription
selectorStringDeterministic CSS selector path to locate the element in the DOM.
snapshotTag, attrs ≤ 120 chars, text ≤ 160 charsOpening tag of clicked element with trimmed text; child subtrees excluded.
classesArray of stringsList of CSS class names applied to the clicked element.
computedStylesKey-value mapResolved values for color, font size, margins, padding, and layout properties.
appliedCssRulesArray (≤ 6 rules)Matched author stylesheet rules with compound or descendant selectors.
sourcePathPath, or emptyComponent file path from source build attributes or framework internals; empty when neither is available.
parentInfoTag, classes, IDDirect parent element tag name, class list, and ID attribute.
pageUrl / route / pageTitleURLs / StringsFull URL, normalized routing path, and the document page title.
viewportWidth / viewportHeightIntegers (CSS px)Window viewport width and height at the moment of capture.
deviceTypemobile | tablet | desktopDevice classification derived from the viewport width.
devicePixelRatioFloatScreen pixel ratio to distinguish standard and HiDPI/Retina displays.
userAgentStringBrowser user-agent string to reproduce browser-specific styling issues.
screenshotUrlURL (optional)Optional image uploaded only when the author enables screenshot capture.

Each comment record also contains the comment text authored by the stakeholder, the active environment tag (local, staging, or production), the authenticated author's account identifier, and any follow-up replies.

What is never captured

PinSay is engineered specifically for UI annotations and element inspection. The following data categories are never captured by the widget or extension:

Opt-in extras

Two optional capabilities exist on a strict opt-in basis:

Controls & deployment guards

Engineering teams have complete control over widget activation:

Where it lives: Hosted vs. Self-hosted

PinSay is designed with a strict client-server boundary, allowing organizations to run PinSay either as a managed cloud service or self-hosted entirely within their own infrastructure:

ComponentHosted ServiceSelf-Hosted Instance
Feedback WidgetRuns in client browser; connects to hosted APIRuns in client browser; connects to your internal API
API & DatabaseManaged cloud instanceYour own servers and PostgreSQL database
Screenshots & BlobsLocal filesystem storage (Docker volume)Local filesystem storage (Docker volume)
Developer CLI & MCPRuns locally on developer workstationRuns locally on developer workstation

Retention & deletion

Feedback comments and projects are retained until deleted by an author or workspace administrator.

Deleting a comment or project hides it everywhere immediately. Under the hood, deleting a comment or a project is a soft delete: the comment and project records are stamped with DeletedAt and disappear from all active views, queries, APIs, and exports.

However, the underlying comment rows remain in storage. A screenshot file is deleted at once when its author removes the image via edit, and the screenshot files of deleted comments are purged 30 days after the comment is deleted. Physical purge of deleted comment rows is on our roadmap; until then, contact us for a manual purge.

Bug reports (network calls, console entries, steps) are deleted immediately with their comment, project or workspace. A report is deleted after 30 days, once every comment that used it has been deleted (or the longer period set for the workspace).

Plan-specific retention durations (RetentionDays) are available on request for custom enterprise configurations.

Security & workspace isolation

PinSay implements defense-in-depth security across all architectural layers:

The PinSay CLI

The PinSay CLI (@pinsay/cli) connects your local code repository to PinSay. Its data collection and operational posture are strictly bounded:

Questions & resources

For security questions, privacy inquiries, or manual data purge requests, please contact support@pinsay.dev.

PinSay's hosted service is operated by PinSay, LLC, a Delaware limited liability company (registered agent address: 131 Continental Dr, Suite 305, Newark, DE 19713, USA). That address is not where your data is stored: hosted data lives in Riyadh, as described above. Full company details are in our Privacy Policy.

You can also review our legal Privacy Policy or explore our technical Documentation.