GTF – Event-driven Go service converting GitHub events into LinkedIn posts Developer hawksxo released git-to-feed, an open-source event-driven Go microservice that converts GitHub webhook events — pull requests and releases — into LinkedIn posts using Google's Gemini AI, with Discord bot approval required before publication. The MIT-licensed project verifies webhooks via HMAC, runs content through a pipeline that includes curated few-shot examples and an "Anti-Cringe" component, and stores state in PostgreSQL/Supabase; it requires Go 1.22+ and ships with a multi-stage Dockerfile and docker-compose configuration. Automated Event-Driven Microservice converting GitHub Webhooks into LinkedIn posts via Gemini AI & Discord Human-in-the-Loop approval. Explore the docs » Report Bug https://github.com/hawksxo/git-to-feed/issues · Request Feature https://github.com/hawksxo/git-to-feed/issues Table of Contents git-to-feed is a production-ready, event-driven Go microservice designed under Clean Architecture and Package-by-Feature principles. It listens to GitHub repository Webhooks Pull Requests and Releases , enriches event contexts, formats payloads using LLMs Google Gemini AI guided by curated Few-Shot Examples , and notifies an interactive Discord Bot for Human-in-the-Loop approval before live publication to LinkedIn . php flowchart TD GH "GitHub Webhook" -- |"HMAC Verified"| WH "Webhook Handler" WH -- PIPE "Pipeline Gemini AI" PIPE -- BOT "Discord Bot" BOT -- |"Approve / Reject"| APP "Approval Engine" APP -- |"Published"| LI "LinkedIn API" The codebase strictly decouples business domain logic from infrastructure, storage, and transport layers. git-to-feed/ ├── cmd/ │ └── api/ Main HTTP API Entrypoint ├── internal/ │ ├── approval/ Approval Feature Module Entities, Use Cases, Repositories, HTTP Handlers │ ├── pipeline/ Content Generation Pipeline ContextBuilder, PromptBuilder, GeminiLLMClient, Anti-Cringe, Few-Shot │ ├── publisher/ LinkedIn Publisher Feature Module Entities, Use Cases, HTTP Client, Mocks │ ├── webhook/ GitHub Ingestion Feature Module Payload Parser, HMAC Validation │ └── platform/ Infrastructure & Platform Adapters │ ├── config/ Environment Configuration & godotenv Loader │ ├── discord/ Interactive Discord Bot discordgo WebSocket & Embed Buttons │ ├── http/ HTTP Server Router & Endpoint Wire-up │ └── storage/ Database Drivers PostgreSQL/Supabase & SQL Auto-Migrations Engine ├── supabase/ │ └── migrations/ SQL Database Schema Migrations .sql ├── .github/ GitHub Workflows, Templates & Community Guidelines ├── CODE OF CONDUCT.md Community Contributor Covenant Standards ├── CONTRIBUTING.md Contribution Guidelines & Template Specifications ├── Dockerfile Multi-stage Production Docker Build ├── docker-compose.yml Orchestration Config ├── LICENSE MIT Open-Source License Terms ├── ROADMAP EVOLUTION.md Future Architectural Roadmap & Evolution Specifications └── SECURITY.md Responsible Vulnerability Disclosure Policy Follow these steps to set up and run git-to-feed . - Docker & Docker Compose Recommended for production & local execution - Go 1.22+ Optional for local Go CLI development Create a .env file in the root directory refer to .env.example : PORT=":8080" GITHUB WEBHOOK SECRET="your-github-webhook-secret" LINKEDIN ACCESS TOKEN="your-linkedin-access-token" LINKEDIN AUTHOR URN="urn:li:person:your-author-urn" DATABASE URL="postgres://postgres. PROJECT-REF : PASSWORD @aws-0- REGION .pooler.supabase.com:5432/postgres?sslmode=require" DISCORD BOT TOKEN="your-discord-bot-token" DISCORD CHANNEL ID="your-discord-channel-id" GEMINI API KEY="your-google-gemini-api-key" GEMINI MODEL NAME="gemini-3.5-flash-lite" Run the application stack using Docker Compose: docker-compose up --build -d Or build and run using Docker CLI directly: docker build -t git-to-feed:latest . docker run -d -p 8080:8080 --env-file .env git-to-feed:latest For building and testing directly with the Go toolchain: Download Go module dependencies go mod download Run the API server locally go run cmd/api/main.go Run unit tests & static analysis go vet ./... go test -v ./... The microservice exposes clean REST HTTP endpoints and granular OpenStatus component health monitoring: | Method | Endpoint | Description | |---|---|---| | GET | /health | Global application health check 200 OK | | GET | /health/api-router | Health check for HTTP API Router component | | GET | /health/webhook-engine | Health check for GitHub Webhook Ingestion engine | | GET | /health/pipeline-gemini | Health check for Google Gemini AI Pipeline | | GET | /health/discord-bot | Health check for Discord Interactive Bot session | | GET | /health/linkedin-engine | Health check for LinkedIn API Publishing engine | | GET | /health/database | Live db.Ping health check for Supabase PostgreSQL | | POST | /api/v1/webhooks/github | Ingests and processes GitHub Webhook events | | GET | /api/v1/approvals/pending | Lists all draft posts awaiting approval | | POST | /api/v1/approvals/{uuid}/approve | Approves and publishes a draft post to LinkedIn | | POST | /api/v1/approvals/{uuid}/reject | Rejects and discards a pending draft post | | PUT | /api/v1/approvals/{uuid}/edit | Edits content and approves post for publishing | | GET | /api/v1/examples | Lists active Few-Shot examples | | POST | /api/v1/examples | Creates a new Few-Shot example entity | - Universal Multi-Repository Webhook Ingestion pull request , release - Google Gemini AI Integration with Curated Few-Shot Engineering - Anti-Cringe & Payload Sanitization Filters - Interactive Discord Bot for Human-in-the-Loop Approvals - Automatic PostgreSQL Schema Migration Engine supabase/migrations - Granular OpenStatus Health Monitoring Sub-Endpoints - Open-Source Governance Suite LICENSE , CONTRIBUTING , CODE OF CONDUCT , SECURITY - Automated CI/CD Workflows GitHub Actions - Event Batching & Aggregation Engine Frequency Windows See ROADMAP EVOLUTION.md https://github.com/hawksxo/git-to-feed/blob/develop/ROADMAP EVOLUTION.md for full architectural roadmap specifications. Contributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are greatly appreciated . Please review our Contributing Guidelines https://github.com/hawksxo/git-to-feed/blob/develop/CONTRIBUTING.md and Code of Conduct https://github.com/hawksxo/git-to-feed/blob/develop/CODE OF CONDUCT.md for details on Git Flow, Conventional Commits, Gitmojis, and Pull Request templates. 1. Fork the Project 2. Create your Feature Branch git checkout -b feature/AmazingFeature 3. Commit your Changes git commit -m 'feat: :sparkles: add AmazingFeature' 4. Push to the Branch git push origin feature/AmazingFeature 5. Open a Pull Request using templates in .github/PULL REQUEST TEMPLATE/ Distributed under the MIT License. See LICENSE https://github.com/hawksxo/git-to-feed/blob/develop/LICENSE for more information. For security vulnerabilities and disclosure, please refer to our Security Policy https://github.com/hawksxo/git-to-feed/blob/develop/SECURITY.md . hawksxo - @hawksxo https://github.com/hawksxo Project Link: https://github.com/hawksxo/git-to-feed https://github.com/hawksxo/git-to-feed