The WalkMe alternative.
Guide customers inside your own product. Build tours, checklists, tooltips and in-app messages for the software you ship. Gleap keeps onboarding next to customer support, bug reports and feature requests in one platform.
Guide customers inside your own product. Build tours, checklists, tooltips and in-app messages for the software you ship. Gleap keeps onboarding next to customer support, bug reports and feature requests in one platform.
A home for everything your team is building.
Design a better first impression.
Help every new customer get started.
Give customers the answers they need.
LukasFind all your projects here.
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.
@@ -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();