// nothing to instrument — capture is automatic
<VeltActivityLog />Automatic capture across every feature
Comments, reactions, recordings, CRDT edits, and approval changes create records the moment they happen. Nothing to instrument.
Audit trail
An immutable, exportable record of every action in your product: comments, edits, approvals, rejections.
Stop losing regulated deals because your product can’t prove who approved what.
Free tier. No credit card. First comment in 5 minutes.
POST /v2/activities/get
{ "data": { "documentId": "filing-q3" } }
[{
"actionType": "approval.changed",
"actionUser": "sarah@acme.com",
"note": "Cleared with legal"
}]structured JSON · filterable · PDF & CSV (coming soon)
Evidence layers running inside products at












































What it is
An immutable, exportable record of every action in your product’s review layer: every comment, edit, suggestion, approval, and rejection, with who, what, and when. Velt records activity automatically across all features; nothing to instrument. Records are queryable by document, user, workflow, or time range, and exportable for auditors and security reviews. Approval records capture the full chain: who was asked, who responded, what they decided, and what changed as a result.
statusHistory · expanded
status: Approved · changedBy: Sarah · changedAt: 09:21:03 · note: “Cleared with legal.”
written synchronously with the status change
one trail, both actor types, the why attached to the decision
How it works
Enable Activity Logs to capture activity automatically across every feature. Records stream to your UI live, answer REST queries, and push review events to your backend through webhooks.
npm install @veltdev/react<VeltProvider
apiKey={VELT_API_KEY}>
<YourApp />
</VeltProvider>// enable Activity Logs in the Velt Console first
// document scope set via useSetDocumentId('filing-q3')
<VeltActivityLog />Once enabled, Velt records activity across features automatically: comments, reactions, recordings, CRDT edits, and approval state changes. Every approval state change appends a statusHistory entry: who changed it, when, and the note they left, written synchronously with the status change. Each record carries judgment fields: reasoning, confidence, judge type (human or agent), authority, prior judgments, and content context. Enrichment runs async, so logging adds no latency.
// getAllActivities streams records live · console toggle per docs
Teams that build it budget a quarter for the first version and keep paying for the long tail. The 3 steps above replace the first quarter; the capability wall below replaces the long tail.
Skip the steps. Have your agent set it up.
npx -y @velt-js/mcp-installer
claude mcp add velt-installer -- npx -y @velt-js/mcp-installer
npx -y @velt-js/mcp-installer
npx -y @velt-js/mcp-installer
npx -y @velt-js/mcp-installer
APIs and pipes
Launch your audit trail this week.
No credit card. Works with React, Next.js, Vue, Angular, and HTML.
Capabilities
Each card is the live SDK. Toggle to Code for the exact snippet that renders it.
// nothing to instrument — capture is automatic
<VeltActivityLog />Comments, reactions, recordings, CRDT edits, and approval changes create records the moment they happen. Nothing to instrument.
{ "status": "approved", "changedBy": "sarah",
"note": "Cleared with legal" }“Who approved this filing?” becomes a lookup, not an investigation.
{ "judgeType": "agent", "confidence": 0.88,
"authority": "brand-policy-v4" }Reasoning, confidence, judge type, and the authority that required the review. Evidence with context.
This pricing claim conflicts with the rate table on slide 4.
Accepted the finding: cleared with legal.
judge type · humanPOST /v2/activities/get
{ "data": { "documentId": "filing-q3" } }Agent findings land in the same trail as human decisions, marked judge type agent. One chain of custody.
Every action recorded silently
Ship the timeline whenever
// recording pipeline is on from day one
// the feed UI stays opt-inThe pipeline records silently from day one; the feed UI stays opt-in. The questionnaire arrives years after the actions.
const records = useAllActivities({
documentId, feature: "approvals",
});The auditor’s sample request is a query, not a week of log archaeology.
Comment flagged the claim
Brand Agent · 09:02Revision corrected the copy
Maya · 09:14Approval signed off
Sarah · 09:21{ "priorJudgments": ["rec_112", "rec_118"] }The comment, the revision, the approval, in order. The full story behind a sign-off reads as one chain.
Edit a record
rec_118originalnew linked recordrec_204linkedDelete the content
content removedrecord standsrec_118preserved// immutability is on by default for new accounts
// edits append a new linked record; deletes preserveOn by default for new accounts: changes create new linked records. Evidence stays evidence.
Record set
filing-q3 · 142 records
velt.activities.get({ document: "filing-q3", format: "json" });Any record set is available as structured JSON through the API today; PDF and CSV packages assemble the same chain.
velt.createActivity({
type: "deploy", judgeType: "human",
reasoning: "release v2.14",
});Deploys, exports, and permission changes sit in the same timeline your reviewers already generate.
The auditor asked for the approval chain on a sample of filings. We ran one query and sent the records — who was asked, who decided, and the note they left.
Compliance lead · FP&A platform
Little big details
Shipped functionality only. The confirmed set leads; draft items render after engineering sign-off. This is the part of an in-house build that never ends.
Make it yours
VeltActivityLog for the fast path, wireframes and primitives for custom audit UIs, content capture tiers, and a full REST surface underneath.
VeltActivityLog for the fast path; wireframes and primitives for fully custom audit timelines; template variables and dark mode.
<VeltActivityLogWireframe>
// your markup, Velt records
</VeltActivityLogWireframe>Custom events via createActivity, content capture tiers per your privacy posture, webhooks into your compliance pipeline, self-host activity provider.
velt.setContentCapture("summary");
velt.webhooks.subscribe({ events: ["activity.*"] });We shipped a defensible trail in an afternoon. The hard part — immutability and attribution — was already done.
Staff engineer · sales enablement platform
In production
Tabbed by vertical, with verified customer screenshots.
This Digital Sales Room gives you everything you need to move forward — from proposal to plan.
@Fin We need to make a working demo for Rene and his team
Brand and legal sign-off on every asset, recorded with the note attached. The regulated client’s question is one query.For sales enablement
finance / receivables
Can we confirm the PO before approving this one? @Sarah
1 ReplyEvery transition timestamped and attributed. The examiner’s sample request returns the complete chain.For fintech and FP&A
Cotton Supplier Ltd.
AgriCotton Farms
Village Kheda, Gujarat, India
SpinCo Yarns
18 Narol Rd, Gujarat, India
DyeWorks International
Calle de Mayo, Mexico
Can you attach the GOTS cert for this lot before we approve? @Sean
1 ReplySign-offs on orders, shipments, and field records carry who decided and why. The record settles disputes.For operations
Privacy Risk Review
Wren discovered a feature request in Jira involving users' health data and triggered a review after analyzing the PRD in Confluence against company policy and US regulation.
JStarted by Juan MendezThis feature processes PHI, so HIPAA applies. I recommend a PIA and a vendor BAA review before any data flows. @Juan
Every control sign-off and attestation is recorded with who decided and why, timestamped and immutable. The examiner’s sample request returns the complete chain.For compliance
Superflow
1 · Subscription & Fees
Customer subscribes to the Service on a monthly basis and shall pay the then-current fees in advance of each billing period. Fees are non-refundable except as expressly set out in this Agreement.
2 · Term & Auto-Renewal
The subscription renews automatically for successive one-month terms unless either party gives at least thirty (30) days' written notice of non-renewal before the end of the then-current term.
3 · Limitation of Liability
Except for breaches of confidentiality, each party's total aggregate liability under this Agreement shall not exceed the fees paid by Customer in the one (1) month preceding the event giving rise to the claim.
4 · Governing Law
This Agreement is governed by the laws of the State of Delaware, without regard to its conflict-of-laws provisions, and the parties consent to the exclusive jurisdiction of its courts.
Each clause decision and redline lands in one trail, attributed and on the record. Months later, who agreed to the cap answers itself.For legal
Make the hero headline punchier and add a primary CTA.
Done — rewrote the headline, tightened the subtext, and added a primary CTA in hero.tsx.
Add a logo strip with social proof under the CTA.
Added a five-logo trust strip below the CTA and wired it into hero.tsx.
Ship your app in a weekend
Get startedUse our brand orange on the CTA and cut the headline to one line. @Sean
Agent findings and human approvals land in one trail, with judge type marking each. AI oversight, queryable.For AI-native SaaS
See it running in products like yours.
30 minutes, with an engineer, not a sales deck.
Related primitives
Approvals, agent findings, and self-hosted storage all write to the same chain.
Every transition lands in the trail with authority attached.
Findings are recorded decisions, judge type agent.
Findings recorded with confidence, on the same trail as human decisions.
The activity data provider keeps log content on your infrastructure.
log content → your database, in your region
Log content, entity snapshots, and custom fields can live on your infrastructure via the activity data provider, with only minimal identifiers on Velt. GDPR deletion runs through the compliance API with its own audit log. EU AI Act Article 14 (high-risk systems under Annex III, enforceable August 2, 2026): for products in that scope, this trail is the evidence layer — approval before action, recorded. See self-hosting and governance.
Book DemoProof
“Who approved this?” stopped stalling our deals.
1 query
The examiner asked for the approval chain on a sample of filings. We ran a query and sent the records: who was asked, who decided, and the note they left.
5 min
Mounting the activity log took an afternoon. The hard part — immutability and attribution — was already done.
100%
Every agent action is attributed alongside our humans. Our auditors finally trust the record.
FAQ
Install @veltdev/react, wrap your app in VeltProvider with your API key, enable Activity Logs in the Velt Console, and add the VeltActivityLog component for a prebuilt, filterable timeline. The setup guide walks through it.
Comments, replies, reactions, recordings, multiplayer edits, and every approval state change, recorded automatically. Your own product events join the same trail through the createActivity API, with judgment fields validated on write.
Yes. Pull any record set through the Get Activity Logs REST API as structured JSON, filtered by document, user, feature type, or time range. Audit report PDFs and CSV packages are coming to the same chain.
Article 14 applies to high-risk AI systems defined in Annex III (credit, insurance, hiring, critical infrastructure, and essential services among them), enforceable from August 2, 2026; it is not a universal obligation on every AI feature. If your product or your customers operate in that scope, Velt provides the mechanism (approval before action) and the evidence (a record of who approved what, when, and why). Talk to your counsel about whether you are in scope; see /governance.
Immutability is on by default for new accounts: edits create new records linked to the original, and deleting source content leaves the record standing. GDPR deletion runs through a dedicated compliance API and is itself logged.
Every record carries a judge type of human or agent. An agent’s finding, its confidence score, and its reasoning sit in the same trail as the human decision that accepted or rejected it, so the oversight chain is explicit.
No. The status record is written synchronously with the status change itself; everything else enriches asynchronously after the user-facing write completes. Records exist within a second, and user actions gain no latency.
Yes. The self-host activity data provider keeps log content, entity snapshots, and custom fields on your infrastructure while Velt stores only minimal identifiers. See /self-hosting.
Velt is priced on usage, not seats: you pay for documents with review activity in a month, and there is a free tier for development and early production. The audit trail is part of the SDK, not a separately priced add-on.
Free tier. No credit card. First comment in 5 minutes.
30 minutes, with an engineer, not a sales deck.
@Jordan Auto-renewal needs 60 days' notice to match our policy, not 30.
@Maya Liability cap is one month of fees — Legal wants 12 months before we sign.
@Maya Governing law should be New York to match the MSA.