June Product Update: Custom Rules, Messages & Amazon Business Canada

June Product Update: Custom Rules, Messages & Amazon Business Canada

June Product Update: Custom Rules, Messages & Amazon Business Canada

Product Updates

Product Updates

Product Updates

June Product Update: Custom Rules, Messages & Amazon Business Canada

June Product Update: Custom Rules, Messages & Amazon Business Canada

June Product Update: Custom Rules, Messages & Amazon Business Canada

Read up on our latest features

Read up on our latest features

Read up on our latest features

3

3

min read

min read

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

I’m excited to share a few recent PerkUp product updates with you! 👇

TLDR:

  1. Create anniversary rules to automatically send unique rewards based on tenure

  2. Customize each employee’s anniversary or birthday reward message

  3. Our Amazon Business integration is now available to employees in Canada

  4. Add backpacks, dopp kits, polo shirts, and windbreakers to your swag store

  5. Coming soon: Slack integration

Birthday and Anniversary Rules

You can now create custom rules to help automate birthday and anniversary gifts and rewards!

If you’ve been wanting to easily set up different rewards for each work anniversary milestone, you’re in luck. Create a rule for each milestone you want to celebrate and, within each rule, set a default amount, GIF, message, and title. 

Anniversary and birthday rewards will be sent out automatically based on the rules you create.

Custom Messages

In addition to creating rules, you can also set custom messages for each individual’s birthday and anniversary! Adding that extra personal touch can go a long way in making someone feel special.

This was one of our most requested features and we’re so excited to finally be rolling it out! To set a custom message for someone, click on their name in the birthday or anniversary calendar. You can also edit the GIF, amount, title and sender name.

Amazon Business Canada

Our Amazon Business direct ordering integration is now available to employees in Canada!

With our Amazon Business integration, you can purchase hundreds of millions of products across multiple product categories directly inside your PerkUp account!

Eligible orders will also get Amazon Business Prime express shipping.

New Swag Options

You can now add the following products to your swag catalog:

  1. Windbreakers

  2. Backpacks

  3. Performance Polo Shirts

  4. Dopp Kits

If you’d like to create a swag store for your company, or update your existing store, please fill out our custom swag builder.

Coming Soon: Slack Integration!

And last but not least, we have a new Slack integration that will be launching very soon! This integration will allow you to get real-time notifications in Slack when someone is celebrating their work anniversary or birthday, or when they receive a reward.

Stay tuned 👀

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

}