On this page
Time
About 25 minutes
20 of them are you using your own product once, while Peeve watches.
Install Peeve
Each tab shows the idiomatic install for that stack: @peeve/sdk wherever there is a build step, the script tag only on plain HTML. npx @peeve/wizard detects your framework, injects the right one with your publishable key, and shows you a diff before it writes, backing up every file it touches. An unusual stack gets an AI-assisted edit through the same safety.
NextReactVueRailsDjangoPlain HTML
'use client'
import { useEffect } from 'react'
import { Peeve } from '@peeve/sdk'
export default function PeeveProvider({ user }) {
useEffect(() => {
Peeve.init({ workspaceKey: process.env.NEXT_PUBLIC_PEEVE_KEY })
Peeve.identify({ userId: user.id, token: user.peeveToken })
Peeve.setContext({ plan: user.plan, seats: user.seats })
}, [user])
return null
}
Render once in app/layout.tsx. It must be a client component; Peeve.init needs a browser. peeveToken is signed on your server, never derived in the client.
What does verify tell me?
It names what it found and what it can't reach, never a pass/fail. Two canvas regions flagged means Peeve will hand off inside those areas rather than guess at them.
$ npx @peeve/cli verify
48 routes reachable
good accessibility data on 44
4 routes have unlabelled controls, so Peeve uses position instead
2 canvas regions flagged, Peeve can't navigate inside these
nothing is live until you turn it on
Peeve stays read-only until you widen it, and the kill switch is a single command. Nothing your users see changes until you deliberately go live.