OP-Slack Notification
OpenProject ↔ Slack integration built entirely via multi-AI Vibe Coding
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
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.
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.
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. |