Workflow Automation

Copperleaf Desk: Slack Ticketing System Case Study

A Slack ticketing system for a 300-person company: anyone can raise a ticket from any channel, owners update status with one click, and every employee sees their assigned tickets on the app's Home tab.

Copperleaf Desk Slack app: a ticket card in the #it-help channel with status, priority, assignee and action buttons, a Create a ticket form, and the app Home tab listing the user's assigned tickets

Industry

Professional Services

Timeline

7 weeks

Team

2 engineers, 1 designer

Category

Workflow Automation

The challenge

An IT ticketing system scattered across DMs and inboxes

Copperleaf's IT, facilities, and people-ops teams took requests through Slack DMs, channel mentions, and a shared inbox. Requests were easy to miss, nobody could tell who owned what, and employees had to chase people in DMs to find out whether anything was happening with their request.

The approach

How we built Slack ticket management for three teams

01

Raise a ticket from anywhere in Slack

Built a /ticket command, a message shortcut, and a New ticket button that all open the same short form for title, team, priority, and details. Shortcuts pre-fill the form from the original message, and each ticket is posted to the right team channel with its own ID.

02

Status that stays current on its own

Every ticket card carries buttons to update status, reassign, or resolve. Each change updates the card in place, logs to the ticket's thread, and sends the requester a DM, so nobody has to ask for an update.

03

A personal ticket list on the Home tab

The app's Home tab shows each person their assigned tickets with status, priority, and due date, plus counts for what's in progress and due today. Team leads get a team-wide view, and overdue tickets trigger reminders in Slack.

The results

Slack ticketing system results

3 teams

IT, facilities, and people-ops on one ticketing flow

100%

Requests tracked with an owner and a status

0

Extra tools for employees to learn outside Slack

Under the hood

Tech stack

Slack Bolt (Node.js)

Handles the /ticket command, shortcuts, button actions, and Home tab events.

Block Kit

Builds the ticket cards, the create-ticket form, and the Home tab layout.

TypeScript

Types every ticket state and status change the bot can apply.

PostgreSQL

Stores tickets, assignments, and the full status history for each one.

Redis

Queues SLA reminders and overdue alerts on a schedule.

AWS

Hosts the bot service and database, with logging for every action.