{"id":39516915,"url":"https://github.com/formbricks/hub","last_synced_at":"2026-01-18T06:13:48.689Z","repository":{"id":320698073,"uuid":"1082386436","full_name":"formbricks/hub","owner":"formbricks","description":"Unified Experience Data Platform","archived":false,"fork":false,"pushed_at":"2026-01-12T16:39:36.000Z","size":1456,"stargazers_count":5,"open_issues_count":6,"forks_count":3,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-01-12T21:26:50.672Z","etag":null,"topics":["experience-management","xm"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/formbricks.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2025-10-24T06:59:54.000Z","updated_at":"2026-01-12T16:39:39.000Z","dependencies_parsed_at":"2025-10-28T16:28:33.706Z","dependency_job_id":null,"html_url":"https://github.com/formbricks/hub","commit_stats":null,"previous_names":["formbricks/store","formbricks/hub"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/formbricks/hub","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/formbricks%2Fhub","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/formbricks%2Fhub/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/formbricks%2Fhub/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/formbricks%2Fhub/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/formbricks","download_url":"https://codeload.github.com/formbricks/hub/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/formbricks%2Fhub/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28531993,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-18T00:39:45.795Z","status":"online","status_checked_at":"2026-01-18T02:00:07.578Z","response_time":98,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["experience-management","xm"],"created_at":"2026-01-18T06:13:48.088Z","updated_at":"2026-01-18T06:13:48.678Z","avatar_url":"https://github.com/formbricks.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Formbricks Hub\n\n\u003cdiv align=\"center\"\u003e\n\n**Unified Experience Data Platform**\n\nAggregate, enrich, and analyze customer feedback from surveys, reviews, and support tickets\n\n[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)\n[![CI](https://github.com/formbricks/hub/workflows/CI/badge.svg)](https://github.com/formbricks/hub/actions)\n[![GitHub stars](https://img.shields.io/github/stars/formbricks/hub?style=social)](https://github.com/formbricks/hub/stargazers)\n\n[Documentation](https://hub.formbricks.com/) · [Quick Start](#-quick-start) · [Community](#-community)\n\n\u003c/div\u003e\n\n\u003c!-- Updated: January 2025 --\u003e\n\n---\n\n## 🎯 Overview\n\n**Formbricks Hub** is an open-source unified experience data repository that solves the challenge of scattered customer feedback across multiple platforms. It provides a centralized system to collect, enrich with AI, and analyze feedback from surveys, product reviews, support tickets, and social media.\n\n### The Problem\n\nCustomer feedback is scattered across multiple platforms:\n- Survey tools (Formbricks, Typeform, Google Forms)\n- Review sites (G2, Trustpilot, App Store)\n- Support systems (Zendesk, Intercom)\n- Social media (Twitter, Reddit)\n\nEach platform has different data formats, making it impossible to get a unified view of customer sentiment and experience.\n\n### The Solution\n\nHub provides:\n\n✅ **Unified Data Model** - All feedback sources mapped to a single, analytics-optimized schema  \n✅ **AI-Powered Enrichment** - Automatic sentiment analysis, emotion detection, and topic extraction  \n✅ **BI-Ready Structure** - Optimized for tools like Apache Superset, Tableau, Power BI  \n✅ **Real-time Webhooks** - React to new feedback immediately  \n✅ **Cross-Source Analytics** - Analyze patterns across reviews, surveys, and support tickets\n\n---\n\n## ✨ Key Features\n\n### 📊 Analytics-First Data Model\n\nHub uses a **narrow format** (one row per question-answer pair) optimized for SQL aggregations and BI tools. No complex JSON unnesting, no wide tables—just simple, queryable data:\n\n```sql\n-- Direct aggregation without JSON unnesting\nSELECT sentiment, COUNT(*) as feedback_count\nFROM experience_data \nWHERE field_type = 'text' AND collected_at \u003e NOW() - INTERVAL '7 days'\nGROUP BY sentiment;\n\n-- Find all frustrated users mentioning \"checkout\"\nSELECT value_text, sentiment_score, topics\nFROM experience_data\nWHERE emotion = 'frustration' \n  AND 'checkout' = ANY(topics);\n```\n\n### 🤖 AI-Powered Insights\n\nAutomatically enrich every text response with actionable insights using OpenAI:\n\n- **Sentiment Analysis**: Positive, negative, neutral, or mixed with confidence scores (-1.0 to +1.0)\n- **Emotion Detection**: Joy, frustration, anger, confusion, sadness automatically identified\n- **Topic Extraction**: Automatically discover themes like pricing, UI, bugs, support—no manual tagging\n- **Semantic Search**: Query feedback by meaning, not keywords: *\"users frustrated with checkout\"*\n- **Vector Embeddings**: Powered by `pgvector` for fast similarity search at scale\n\n**All AI processing happens asynchronously**—your API stays fast (~20-50ms response time) while enrichment runs in the background. Results appear within 5-15 seconds via webhook notifications.\n\n**Cost-efficient**: ~$0.015 per 1,000 text responses with `gpt-4o-mini`.\n\n### 🔌 Multi-Source Support\n\nCentralize feedback from anywhere through our simple REST API:\n\n- **Surveys**: Formbricks, Typeform, Google Forms, SurveyMonkey\n- **Reviews**: G2, Trustpilot, Capterra\n- **App Stores**: Apple App Store, Google Play (coming soon)\n- **Support**: Zendesk, Intercom, Help Scout (coming soon)\n- **Social**: Twitter, Reddit (coming soon)\n- **Custom**: Any source via REST API or scripts\n\n### 📈 BI-Ready Analytics\n\nDirect PostgreSQL access means instant integration with any SQL-compatible tool:\n\n- **Real-time Dashboards**: Apache Superset, Metabase, Redash\n- **Enterprise BI**: Power BI, Tableau, Looker, Qlik\n- **Data Warehouses**: Snowflake, Redshift, BigQuery (export ready)\n- **Custom SQL**: Write queries in your favorite tool\n\n**Example queries:**\n- Weekly NPS trends by source\n- Sentiment distribution over time\n- Most mentioned topics this month\n- Emotion breakdowns by product area\n\n### 🎯 Real-Time Webhooks\n\nReact to feedback the moment it arrives with reliable webhook delivery:\n\n- **Event Types**: `experience.created`, `experience.enriched`, `experience.updated`, `experience.deleted`\n- **Reliable Delivery**: Worker pool with 3 retries and exponential backoff\n- **Fast**: 5-second timeout per webhook, never blocks API responses\n- **Flexible**: Send to Slack, Zapier, n8n, or custom endpoints\n\n**Use cases:**\n- Alert Support when negative sentiment detected\n- Trigger workflows when specific topics appear\n- Sync to external systems in real-time\n- Update dashboards immediately\n\n---\n\n## 🚀 Quick Start\n\nGet up and running in under 5 minutes with Docker.\n\n### Prerequisites\n\n- **Docker** and **Docker Compose**: [Install Docker Desktop](https://www.docker.com/products/docker-desktop/)\n\n### Installation\n\n**1. Download the production Docker Compose file:**\n\n```bash\nmkdir formbricks-hub \u0026\u0026 cd formbricks-hub\ncurl -o docker-compose.yml https://raw.githubusercontent.com/formbricks/hub/main/docker-compose.prod.yml\n```\n\n**2. Configure your environment:**\n\nCreate a `.env` file:\n\n```bash\n# Required: Secure passwords\nPOSTGRES_PASSWORD=$(openssl rand -base64 32)\nSERVICE_API_KEY=$(openssl rand -base64 32)\n\n# Optional: OpenAI for AI enrichment and semantic search\nSERVICE_OPENAI_API_KEY=sk-your-api-key-here\n\n# Optional: Configuration\nSERVICE_PORT=8080\nSERVICE_LOG_LEVEL=info\n```\n\n💡 **Note**: Without `SERVICE_OPENAI_API_KEY`, Hub works perfectly but won't enrich text feedback with sentiment/topics or support semantic search.\n\n**3. Start the services:**\n\n```bash\ndocker-compose up -d\n```\n\nThis starts:\n- **Formbricks Hub API** (port 8080)\n- **PostgreSQL** (port 5432)\n\n**4. Verify it's running:**\n\n```bash\ncurl http://localhost:8080/health\n# {\"status\":\"ok\"}\n```\n\n### Basic Usage\n\n**Create an experience with text feedback (automatic AI enrichment):**\n\n```bash\ncurl -X POST http://localhost:8080/v1/experiences \\\n  -H \"X-API-Key: YOUR_SERVICE_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"source_type\": \"survey\",\n    \"source_id\": \"nps-2025-q1\",\n    \"field_id\": \"feedback\",\n    \"field_label\": \"What can we improve?\",\n    \"field_type\": \"text\",\n    \"value_text\": \"The checkout process is confusing and slow. Very frustrating!\",\n    \"collected_at\": \"2025-01-15T10:30:00Z\"\n  }'\n```\n\nWithin seconds, Hub automatically enriches the feedback with:\n- **Sentiment**: `negative` (score: -0.8)\n- **Emotion**: `frustration`\n- **Topics**: `[\"checkout\", \"user_experience\", \"performance\"]`\n\n**Query feedback:**\n\n```bash\ncurl \"http://localhost:8080/v1/experiences?limit=10\" \\\n  -H \"X-API-Key: YOUR_SERVICE_API_KEY\"\n```\n\n**Search feedback by meaning (semantic search):**\n\n```bash\ncurl \"http://localhost:8080/v1/experiences/search?q=frustrated%20checkout\u0026limit=10\" \\\n  -H \"X-API-Key: YOUR_SERVICE_API_KEY\"\n```\n\n📖 **For complete documentation, see the [Quick Start Guide](https://hub.formbricks.com/quickstart)**\n\n---\n\n## 💻 Development Setup\n\nFor local development with hot-reload:\n\n**1. Clone the repository:**\n\n```bash\ngit clone https://github.com/formbricks/hub.git\ncd hub\n```\n\n**2. Start development services:**\n\n```bash\ndocker compose up -d  # PostgreSQL\n```\n\n**3. Run the Hub API:**\n\n```bash\ncp env.example .env\n# Edit .env with your configuration\nmake dev\n```\n\nThe API will be available at `http://localhost:8888`\n\n---\n\n## 🏗️ Architecture\n\n```\n┌─────────────────┐\n│  External Data  │\n│  (G2, Surveys)  │\n└────────┬────────┘\n         │\n         ▼\n┌─────────────────┐      ┌──────────────┐\n│   REST API      │◄─────┤  Webhooks    │\n│   (Go/Huma)     │      │  (Outbound)  │\n└────────┬────────┘      └──────────────┘\n         │\n         ▼\n┌─────────────────┐      ┌──────────────┐\n│   PostgreSQL    │◄─────┤ Job Queue    │\n│   (UUIDv7)      │      │ (Async)      │\n└────────┬────────┘      └──────┬───────┘\n         │                      │\n         ▼                      ▼\n┌─────────────────┐      ┌──────────────┐\n│   BI Tools      │      │  AI Worker   │\n│   (Superset,    │      │  (OpenAI)    │\n│    Power BI)    │      └──────────────┘\n└─────────────────┘\n```\n\n**Key Components:**\n\n- **Hub API** (Go): High-performance REST API with OpenAPI 3.1 documentation\n- **PostgreSQL 18**: Primary database with pgvector extension for semantic search\n- **Job Queue**: PostgreSQL-backed queue for reliable async processing\n- **AI Workers**: Background workers for sentiment analysis, topic extraction, and embeddings\n- **Webhook System**: Worker pool with retry logic for reliable event delivery\n- **BI Tools**: Direct SQL access for Apache Superset, Power BI, Tableau, Looker\n\n---\n\n## 📁 Repository Structure\n\n```\nformbricks-hub/\n├── cmd/               # Go API service entrypoints\n├── internal/          # Go API application logic\n├── docs/              # Docusaurus documentation site\n├── docker-compose.yml  # Local development stack\n├── Makefile           # Development commands\n└── openapi.yaml       # API specification\n```\n\n---\n\n## 📚 Documentation\n\nVisit our [documentation site](https://hub.formbricks.com) for complete guides:\n\n- **[Quick Start](https://hub.formbricks.com/quickstart)** - Get up and running in 5 minutes\n- **[Data Model](https://hub.formbricks.com/core-concepts/data-model)** - Understanding the schema\n- **[AI Enrichment](https://hub.formbricks.com/core-concepts/ai-enrichment)** - Automatic sentiment and topic extraction\n- **[Semantic Search](https://hub.formbricks.com/core-concepts/semantic-search)** - Query feedback by meaning\n- **[Webhooks](https://hub.formbricks.com/core-concepts/webhooks)** - React to feedback in real-time\n- **[API Reference](https://hub.formbricks.com/api-reference)** - Complete REST API documentation\n- **[Environment Variables](https://hub.formbricks.com/reference/environment-variables)** - Configuration reference\n\n---\n\n## 🤝 Community\n\nWe'd love your feedback and contributions!\n\n- **GitHub Discussions**: Ask questions and share ideas\n- **Issues**: Report bugs or request features\n- **Contributing**: See [CONTRIBUTING.md](CONTRIBUTING.md)\n- **Security**: Report vulnerabilities to security@formbricks.com\n\n### Ways to Contribute\n\n- 🐛 Report bugs\n- 💡 Suggest features\n- 📝 Improve documentation\n- 🔌 Build data source connectors\n- ⭐ Star the repository\n\n---\n\n## 📊 Example Use Cases\n\n**Product Teams:**\n- Track NPS trends over time across all feedback sources\n- Use semantic search to find feature requests (\"users want dark mode\")\n- Automatically identify top pain points from open-ended feedback\n- Correlate sentiment changes with product releases\n\n**Support Teams:**\n- Get alerted when \"angry\" or \"frustrated\" feedback arrives (webhooks)\n- Analyze sentiment trends in support tickets by topic\n- Identify common issues before they become widespread\n- Measure customer satisfaction (CSAT) across all channels\n\n**Marketing Teams:**\n- Monitor brand sentiment across review sites in real-time\n- Track campaign feedback with automatic topic extraction\n- Compare sentiment across channels (email vs social vs in-app)\n- Discover what customers love most (joy + positive sentiment)\n\n**Data Teams:**\n- Build unified feedback dashboards in your favorite BI tool\n- Export enriched data to Snowflake/Redshift for deeper analysis\n- Train custom ML models on sentiment-labeled data\n- Query feedback using natural language (semantic search)\n\n---\n\n## 🔐 Security\n\nFormbricks Hub is designed with security best practices:\n\n- **API Key Authentication**: Timing-attack resistant constant-time comparison\n- **Rate Limiting**: Per-IP and global rate limits to prevent abuse\n- **Request Size Limits**: 10MB max body size to prevent memory exhaustion\n- **Sanitized Error Messages**: Generic errors returned to clients, detailed logs internally\n- **No PII Storage**: Hub doesn't require personally identifiable information\n- **Dependency Scanning**: Automated security updates via Dependabot\n\n**Report security vulnerabilities to:** security@formbricks.com\n\nSee [SECURITY.md](SECURITY.md) for full security details.\n\n---\n\n## 📄 License\n\nFormbricks Hub is open-source software licensed under the **Apache License 2.0**.\n\nSee [LICENSE](LICENSE) for the full license text.\n\n---\n\n## 🙏 Acknowledgments\n\nBuilt with ❤️ by the [Formbricks team](https://formbricks.com)\n\nPowered by:\n- [Go](https://go.dev/) - Performance and concurrency\n- [Huma](https://huma.rocks/) - OpenAPI-first REST framework\n- [Ent](https://entgo.io/) - Type-safe ORM with code generation\n- [PostgreSQL](https://www.postgresql.org/) - Robust database\n- [OpenAI](https://openai.com/) - AI-powered enrichment\n- [Apache Superset](https://superset.apache.org/) - Open-source BI\n\n---\n\n\u003cdiv align=\"center\"\u003e\n\n**[⭐ Star us on GitHub](https://github.com/formbricks/hub)** if you find this project useful!\n\n\u003c/div\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fformbricks%2Fhub","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fformbricks%2Fhub","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fformbricks%2Fhub/lists"}