The Userback alternative.
Keep the conversation attached to the fix. Bring visual feedback into your customer support workflow. Gleap connects the report, technical investigation and code work your engineers can review.
Keep the conversation attached to the fix. Bring visual feedback into your customer support workflow. Gleap connects the report, technical investigation and code work your engineers can review.
sendSurveyPush returns early without a contact email. Delivery only needs the session's subscription.
Answer customers. Investigate issues. Build what comes next. Kai is available on every plan; Resolve, Code and PM are included in Pro and Enterprise. AI usage is billed separately.
Answers customers
Answers from your knowledge base and connected sources. Brings your team in when needed.
Investigates hard tickets
Reads session evidence, logs and code. Returns findings and creates coding tasks for confirmed bugs.
Builds the fix
Plans the change, writes and tests code, and opens a pull request. Your engineers review and merge.
Prioritizes requests
Triages feedback, finds duplicates and scores requests. You decide what belongs on the roadmap.
sendSurveyPush returns early without a contact email. Delivery only needs the session's subscription.
@@ -42,7 +42,15 @@ NotificationsDrawer const { items } = useNotifications();− useEffect(() => { if (open) refetch(); });+ const socket = useNotificationSocket();+ useEffect(() => {+ if (!open) return;+ return socket.on('notification:new',+ (n) => setItems((p) => [n, ...p]));+ }, [open, socket]); return <Drawer open={open}>
@@ -8,6 +8,18 @@ useNotificationSocket const socket = useSocket();+ const on = useCallback((evt, fn) => {+ socket.on(evt, fn);+ return () => socket.off(evt, fn);+ }, [socket]);− return socket;+ return { on };
@@ -0,0 +1,4 @@+ it('appends a pushed notification',+ async () => {+ render(<NotificationsDrawer open />);+ socket.emit('notification:new', n);+ expect(await findByText(n.title))+ .toBeVisible();