← Back to Projects
DevOps & Tooling

OP-Slack Notification

OpenProject ↔ Slack integration built entirely via multi-AI Vibe Coding

Solo Developer (Vibe Coding) · Mar 2025
Go Gin Docker GitLab CI/CD Slack API OpenProject API Cursor AI Claude Code Codex

Background

Integration service bridging OpenProject work package events to Slack channel notifications. Built entirely through AI-assisted development (Cursor, Claude Code, Codex) with zero hand-written code as an experiment in vibe coding workflows.

Architecture

OpenProject webhook → Gin HTTP handler → event parser (work package created/updated) → Slack API (Block Kit message) → target channel. Deployed via GitLab CI/CD → Docker multi-stage build (scratch base) → ECR → SSH deploy.

Key Implementations

1

Webhook Event Processing

Receives OpenProject webhook payloads, parses work package events, and transforms them into structured Slack Block Kit messages.

Why: Direct webhook-to-Slack transformation eliminates polling and delivers project updates to teams within seconds.

2

Multi-Stage Docker Build with Scratch Base

Compiles the Go binary in a build stage and copies only the static binary into a scratch-based final image.

Why: Scratch-based images contain no OS, shell, or package manager, minimizing attack surface and reducing image size to just the compiled binary.

3

Full Vibe Coding Delivery

Entire service was built using a multi-AI workflow: Cursor for scaffolding, Claude Code for implementation, and Codex for review.

Why: Validated that production-grade integration services can be delivered through AI-assisted development with zero hand-written code.

Technical Decisions

Technical Decisions Chosen Alternative Reason
Development methodology Vibe coding (Cursor + Claude Code + Codex) Traditional manual development Used as a controlled experiment to evaluate AI-assisted delivery speed and code quality for a well-scoped integration service.
Container base image scratch Alpine Linux A scratch base produces the smallest possible image with zero CVE surface since there are no OS packages to patch.