Caldera Labs

Dote Goat - Slack Peer Recognition Bot

Zach FrankVersion 1.0.0Completed
Slack BotPeer RecognitionTeam CultureReact RouterTypeScript

Overview

Dote Goat is a Slack bot designed to foster positive team culture through peer recognition. Team members can give recognition to colleagues for their contributions, achievements, and collaboration efforts. The bot tracks these recognitions and provides leaderboards to celebrate team accomplishments.

Built with React Router and TypeScript, Dote Goat provides a seamless integration with Slack workspaces while maintaining a robust backend for tracking and analytics.

Key Features

šŸŽÆ Peer Recognition System

Allow team members to recognize each other's contributions through simple Slack interactions, creating a culture of appreciation and positive feedback.

Showing appreciation in Slack with Dote Goat

šŸ“Š Leaderboard & Analytics

Track recognition metrics with an interactive leaderboard accessible via the /leaderboard slash command, showing who's been recognized and for what.

Dote Goat Leaderboard

🐐 Custom Goat Emoji Detection

Automatically detects any Slack emoji containing the word "goat" for recognition interactions. Teams can create custom goat-themed emojis to personalize their recognition experience - currently supporting eleven unique custom goat emojis.

šŸ”„ Real-time Slack Integration

Seamless integration with Slack's event system, responding to mentions, direct messages, and slash commands in real-time.

šŸ’¾ Persistent Data Storage

PostgreSQL database with Prisma ORM ensures recognition data is safely stored and easily queryable for reports and analytics.

Meet the Goats

To add a personal touch and a bit of fun to the recognition process, we've created a set of custom goat emojis. Each one has its own personality, allowing team members to express their appreciation in a more creative way. Here are some of the friendly faces you'll see around the workspace.

Custom goat emojis

Here's a list of the current goat emojis you can use:

  • :goat:
  • :tacogoat:
  • :goatie:
  • :robogoat:
  • :bootiegoat:
  • :creedgoat:
  • :chickengoat:
  • :kevgoat:
  • :bingbonggoat:
  • :evilchickengoat:

Architecture

The system is built with modern web technologies focusing on reliability and maintainability.

Frontend Framework

React Router with TypeScript for type-safe development and modern routing

Database Layer

PostgreSQL with Prisma ORM for robust data management and migrations

Styling System

TailwindCSS for rapid UI development and consistent design patterns

Development Tools

Hot module replacement, asset bundling, and optimization out of the box

Implementation Highlights

The bot implements several key patterns for reliable Slack integration and data management.

Event Processing Pipeline

The `/api/v1/goat` endpoint handles all incoming Slack events with proper validation and error handling. Events are processed asynchronously to ensure quick response times.

// Event types handled: • app_mention - Direct mentions of the bot • message.channels - Channel messages • message.groups - Private group messages • message.mpim - Multi-party direct messages

Emoji Recognition System

The bot intelligently detects any emoji containing "goat" in its name, making it extensible and fun for teams to customize their recognition experience.

// Pattern matching for goat emojis // Examples: :party_goat:, :super_goat:, :goat_thumbs_up: // Currently 11 unique custom goat emojis supported // Teams can add new goat emojis anytime

Slash Command Integration

The `/leaderboard` command provides instant access to recognition statistics directly within Slack conversations.

Dote Goat slash command
// Endpoint: /api/v1/slash/leaderboard // Provides formatted leaderboard data // Supports different time periods and filters

Slack Integration Setup

Setting up Dote Goat requires configuring several Slack app components for full functionality.

Event Subscriptions
Configure bot events for app mentions and message monitoring across channels
OAuth Permissions
Bot token scopes for reading user information and posting messages
Slash Commands
Custom commands for accessing leaderboards and bot functionality
Webhooks
Incoming webhooks for posting formatted recognition messages

Development Setup

Local development uses VS Code port forwarding to expose endpoints to Slack's servers, enabling real-time testing without deployment.

  • āœ“ PostgreSQL database for local data persistence
  • āœ“ Environment configuration for Slack credentials
  • āœ“ Database migrations with Prisma
  • āœ“ Hot reload for rapid development iterations