
Security News
Software Engineering Daily Podcast: Feross on AI, Open Source, and Supply Chain Risk
Socket CEO Feross Aboukhadijeh joins Software Engineering Daily to discuss modern software supply chain attacks and rising AI-driven security risks.
vibeflow-workspace
Advanced tools
AI-powered social media monitoring system that tracks brand mentions and keywords using Twitter API .io
AI-powered social media monitoring system that automatically tracks brand mentions and keywords across Twitter, delivering real-time notifications to Slack and comprehensive logging to Google Sheets.
@yourhandle) and keyword searchesgraph TB
A[GitHub Actions Trigger] --> B[Brand Listener App]
B --> C[Twitter API Client]
B --> D[Tweet Processor]
D --> E{Relevance Score}
E -->|High Score| F[Slack Notifications]
E -->|Medium Score| G[Google Sheets Logging]
E -->|Low Score| H[Discard]
C --> I[Mentions Source]
C --> J[Keywords Source]
I --> D
J --> D
style A fill:#f9f,stroke:#333,stroke-width:2px
style F fill:#4CAF50,color:#fff
style G fill:#2196F3,color:#fff
style H fill:#f44336,color:#fff
git clone https://github.com/alavida.ai/brand-listener.git
cd brand-listener
pnpm install
See the detailed authentication setup below.
# Copy the configuration template
cp apps/brand-listener/config.yaml.example apps/brand-listener/config.yaml
# Edit with your brand details
nano apps/brand-listener/config.yaml
# Set up local environment
cp .env.example .env
# Edit .env with your credentials
# Run the monitoring cycle
pnpm run dev
Commit your changes and push to GitHub. The system will automatically run every 6 hours.
Create Twitter API .io Account
Generate API Key
TWITTER_API_KEY)Why Twitter API .io?
Create Google Cloud Project
# Using gcloud CLI
gcloud projects create your-brand-listener-project
gcloud config set project your-brand-listener-project
Enable Google Sheets API
gcloud services enable sheets.googleapis.com
Create Service Account
# Create service account
gcloud iam service-accounts create brand-listener-bot \
--display-name="Brand Listener Bot" \
--description="Service account for automated brand monitoring"
# Grant necessary permissions
gcloud projects add-iam-policy-binding your-brand-listener-project \
--member="serviceAccount:brand-listener-bot@your-brand-listener-project.iam.gserviceaccount.com" \
--role="roles/editor"
Generate Service Account Credentials
# Generate credentials JSON file (this creates gcp-credentials.json locally)
gcloud iam service-accounts keys create ./gcp-credentials.json \
--iam-account=brand-listener-bot@your-brand-listener-project.iam.gserviceaccount.com
# Verify the file was created
ls -la gcp-credentials.json
β οΈ Important: Keep this file secure and never commit it to version control!
Create Google Sheet
brand-listener-bot@your-project.iam.gserviceaccount.comCreate Slack App
Enable Incoming Webhooks
Create a .env file for local development:
# Twitter API .io
TWITTER_API_KEY=your_twitterapi_io_api_key_here
# Slack Integration
SLACK_WEBHOOK_URL=https://hooks.slack.com/services/YOUR/SLACK/WEBHOOK
# Google Cloud
GOOGLE_PROJECT_ID=your-google-project-id
GOOGLE_APPLICATION_CREDENTIALS_JSON=./gcp-credentials.json
# Environment
NODE_ENV=development
Edit apps/brand-listener/config.yaml:
# Brand Listener Configuration
brand:
handles: ["yourhandle", "yourbrand"] # Twitter handles to monitor (without @)
keywords: ["your product", "your company"] # Keywords to search for
filters:
lang: "en" # Language filter for tweets
time_range_hours: 6 # How many hours back to search
notify:
slack_channel: "#social-monitoring" # Slack channel for notifications
thresholds:
notify: 0.80 # Relevance score needed for Slack notifications (0.0-1.0)
log_only: 0.60 # Relevance score needed for logging to sheets
sheet:
spreadsheetId: "YOUR_GOOGLE_SHEET_ID_HERE" # Your Google Sheet ID
sheetName: "Sheet1" # Sheet tab name
Set up the following secrets in your GitHub repository (Settings β Secrets and variables β Actions):
| Secret Name | Description | Example |
|---|---|---|
TWITTER_API_KEY | Your Twitter API .io API Key | your-api-key-from-twitterapi-io |
SLACK_WEBHOOK_URL | Slack incoming webhook URL | https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX |
GOOGLE_APPLICATION_CREDENTIALS_JSON | Service account JSON (minified) | {"type":"service_account","project_id":"your-project"...} |
GOOGLE_PROJECT_ID | Your Google Cloud project ID | your-brand-listener-project |
To prepare the GOOGLE_APPLICATION_CREDENTIALS_JSON secret:
After generating gcp-credentials.json locally (see step 4 above), you need to minify it for GitHub secrets:
Option 1: Using jq (recommended)
# Minify the JSON credentials using jq
cat gcp-credentials.json | jq -c .
# Or copy directly to clipboard (macOS)
cat gcp-credentials.json | jq -c . | pbcopy
# Or copy directly to clipboard (Linux)
cat gcp-credentials.json | jq -c . | xclip -selection clipboard
Option 2: Using Python
# Minify the JSON credentials using Python
python3 -c "import json; print(json.dumps(json.load(open('gcp-credentials.json'))))"
Copy the minified JSON output and paste it as the value for the GOOGLE_APPLICATION_CREDENTIALS_JSON GitHub secret.
# Install dependencies
pnpm install
# Set up environment
cp .env.example .env
# Edit .env with your credentials
# Verify setup
pnpm run verify
# Development
pnpm run dev # Run brand listener once
pnpm run build # Build all packages
pnpm run clean # Clean build artifacts
# Utilities
pnpm run verify # Verify environment setup
pnpm run lint # Run linting
pnpm run typecheck # Type checking
brand-listener/
βββ apps/
β βββ brand-listener/ # Main application
β βββ src/main.ts # Entry point
β βββ config.yaml # Configuration
βββ packages/
β βββ core/ # Core business logic
β β βββ src/services/
β β βββ sources/ # Twitter data sources
β β βββ processing/ # Tweet processing
β β βββ sinks/ # Output destinations
β βββ types/ # TypeScript definitions
β βββ utils/ # Shared utilities
βββ .github/workflows/ # GitHub Actions
βββ scripts/ # Utility scripts
The system automatically runs on GitHub Actions with the following triggers:
Edit .github/workflows/brand-listener.yml:
on:
schedule:
# Run every 2 hours
- cron: "0 */2 * * *"
# Run daily at 9 AM UTC
- cron: "0 9 * * *"
# Run weekdays at 9 AM and 5 PM UTC
- cron: "0 9,17 * * 1-5"
# Using GitHub CLI
gh workflow run brand-listener.yml
# Or trigger via GitHub web interface:
# Actions β Brand Listener β Run workflow
The system automatically creates the following columns in your Google Sheet:
| Column | Description | Example |
|---|---|---|
run_id | Unique execution identifier | clean-1692123456789 |
captured_at_utc | When the tweet was captured | 2023-08-15T14:30:00.000Z |
tweet_id | Twitter tweet ID | 1691234567890123456 |
tweet_url | Direct link to tweet | https://twitter.com/user/status/... |
author_username | Tweet author's username | john_doe |
author_name | Tweet author's display name | John Doe |
author_followers | Author's follower count | 1234 |
created_at_utc | When the tweet was posted | 2023-08-15T14:25:00.000Z |
text | Tweet content | Loving the new features in @yourbrand! |
language | Detected language | en |
media_urls | Attached media URLs | ["https://pbs.twimg.com/media/..."] |
reason | Why it was captured | mentions or keywords |
explicit_terms | Matching terms found | ["@yourbrand", "new features"] |
confidence | Relevance score | 0.85 |
π― Brand Monitoring Alert
π§ 20 mentions β’ π 11 keyword matches
Top Mentions:
β’ @john_doe: "Loving the new features in @yourbrand!"
β’ @jane_smith: "@yourbrand customer service is amazing"
β’ @tech_reviewer: "@yourbrand just released something big"
View full report: [Google Sheet Link]
Problem: Google Cloud authentication is not set up correctly.
Solution:
GOOGLE_APPLICATION_CREDENTIALS_JSON secret is set correctlyProblem: Service account doesn't have access to your Google Sheet.
Solution:
Problem: Twitter API .io rate limits reached.
Solution:
time_range_hours in your configProblem: Missing or incorrect secrets.
Solution:
Enable debug logging by setting the workflow input:
gh workflow run brand-listener.yml --field debug=true
# Test with a smaller time range
# Edit config.yaml: time_range_hours: 1
# Run once
pnpm run dev
# Check logs for any errors
We welcome contributions! Please see our Contributing Guide for details.
# Fork and clone the repository
git clone https://github.com/alavida.ai/brand-listener.git
cd brand-listener
# Install dependencies
pnpm install
# Create a feature branch
git checkout -b feature/your-feature-name
# Make your changes and test
pnpm run build
pnpm run lint
pnpm run typecheck
# Submit a pull request
packages/core/src/services/sources/packages/core/src/services/sinks/packages/core/src/services/processing/This project is licensed under the MIT License - see the LICENSE file for details.
Built with β€οΈ for brands who care about their online presence
FAQs
AI-powered social media monitoring system that tracks brand mentions and keywords using Twitter API .io
The npm package vibeflow-workspace receives a total of 0 weekly downloads. As such, vibeflow-workspace popularity was classified as not popular.
We found that vibeflow-workspace demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago.Β It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
Socket CEO Feross Aboukhadijeh joins Software Engineering Daily to discuss modern software supply chain attacks and rising AI-driven security risks.

Security News
GitHub has revoked npm classic tokens for publishing; maintainers must migrate, but OpenJS warns OIDC trusted publishing still has risky gaps for critical projects.

Security News
Rustβs crates.io team is advancing an RFC to add a Security tab that surfaces RustSec vulnerability and unsoundness advisories directly on crate pages.