PerkUp's Insights 2.0

PerkUp's Insights 2.0

PerkUp's Insights 2.0

Product Updates

Product Updates

Product Updates

PerkUp's Insights 2.0

PerkUp's Insights 2.0

PerkUp's Insights 2.0

Read about our Insights 2.0 that makes tracking your PerkUp engagement easier.

Read about our Insights 2.0 that makes tracking your PerkUp engagement easier.

Read about our Insights 2.0 that makes tracking your PerkUp engagement easier.

5

5

min read

min read

Three North Face alternative jackets.
Three North Face alternative jackets.
Three North Face alternative jackets.
In this Post

Introducing Insights 2.0

Great news! We’ve completely revamped the Insights experience, making it easier than ever to track, analyze, and share key engagement metrics. Say hello to Insights 2.0—your new favorite way to keep a finger on the pulse of your organization's PerkUp engagement.


What's new?

📅 Dynamic Date Ranges

Customize your view by tracking engagement over any period you choose—whether it's weekly, monthly, or a specific date range important to your business.


🔎 Advanced Filtering

Get laser-focused insights by filtering engagement metrics by labels or special occasions like team events, departmental milestones, country-specific activity, or even work anniversaries.


🎯 Acceptance Rate Insights

Gain visibility into how your PerkUp Dollars, Swag, and Gifts are resonating by analyzing acceptance rates across your organization. Know exactly what’s hitting the mark and where there's room to improve.


🏅 Swag Popularity Trends

Instantly see which swag items are winning hearts across your teams. Identify the most-loved items so you can confidently double down on what your people genuinely value.


🌍 Global Reach Visualization

Explore a visual map pinpointing every country where PerkUp has delivered swag or gifts on behalf of your organization. Watch your global engagement unfold at a glance.


Ready to share?

Now, sharing your insights is easier—and more professional—than ever. Download the entire Insights page as a beautifully formatted PDF, perfect for presentations, stakeholder meetings, or simply keeping your team informed and aligned.

Insights 2.0 is here to help you unlock smarter decisions and stronger engagement.

Dive in and explore the new Insights today!

import { useEffect } from "react"


export default function CarouselFixer() {

useEffect(() => {

// Wait for CMS content to render

const init = () => {

// Find all horizontally scrollable containers inside CMS content

const contents = document.querySelectorAll(".framer-text, [class*='content'], [class*='Content']")


contents.forEach((content) => {

const scrollEls = content.querySelectorAll("ul, ol, div")

scrollEls.forEach((el) => {

const htmlEl = el as HTMLElement

const style = window.getComputedStyle(htmlEl)


// Target only elements that overflow horizontally (the carousel)

if (

style.overflowX === "scroll" ||

style.overflowX === "auto" ||

htmlEl.scrollWidth > htmlEl.clientWidth

) {

attachScrollBehavior(htmlEl)

}

})

})

}


const attachScrollBehavior = (el: HTMLElement) => {

// Prevent double-attaching

if (el.dataset.scrollFixed) return

el.dataset.scrollFixed = "true"


el.style.cursor = "grab"

el.style.userSelect = "none"

el.style.webkitOverflowScrolling = "touch"

el.style.scrollbarWidth = "none"


let startX = 0

let scrollStart = 0

let isDown = false

let dragged = false


const onMouseDown = (e: MouseEvent) => {

isDown = true

dragged = false

startX = e.clientX

scrollStart = el.scrollLeft

el.style.cursor = "grabbing"

}


const onMouseMove = (e: MouseEvent) => {

if (!isDown) return

const dx = e.clientX - startX

if (Math.abs(dx) > 5) dragged = true

el.scrollLeft = scrollStart - dx

}


const onMouseUp = () => {

isDown = false

el.style.cursor = "grab"

}


const onClickCapture = (e: MouseEvent) => {

if (dragged) {

e.preventDefault()

e.stopImmediatePropagation()

dragged = false

}

}


const onWheel = (e: WheelEvent) => {

if (Math.abs(e.deltaX) > 0) {

e.preventDefault()

el.scrollLeft += e.deltaX

}

}


el.addEventListener("mousedown", onMouseDown)

el.addEventListener("mousemove", onMouseMove)

el.addEventListener("mouseup", onMouseUp)

el.addEventListener("mouseleave", onMouseUp)

el.addEventListener("click", onClickCapture, true)

el.addEventListener("wheel", onWheel, { passive: false })

}


// Try immediately, then retry after delays to catch late CMS renders

init()

setTimeout(init, 500)

setTimeout(init, 1500)

}, [])


// Renders nothing — invisible helper

return null

}