Project Info
EchoFix π―
Reddit-First Feedback-to-Shipping Pipeline for CruzHacks 2026
EchoFix transforms Reddit feedback into actionable engineering artifacts and automated workflows. Built to showcase the power of n8n (orchestration) and Gemini (reasoning) with a local insight engine.
π What It Does
- Collect: Ingests Reddit threads via Reddit JSON (no OAuth required!) or PRAW
- Understand: Groups feedback into themes with a local insight engine
- Reason: Leverages Gemini to transform insights into structured issue specs with acceptance criteria
- Automate: Orchestrates the entire pipeline with n8n workflows
- Ship: Creates GitHub issues (and optionally PRs) with approval gates
β¨ Hackathon Mode (No Reddit OAuth!)
Perfect for hackathons with tight timelines:
- JSON-based ingestion: Paste any Reddit thread URL, no API approval needed
- Bring-Your-Own-Thread: Demo with real Reddit content instantly
- Works offline: Full demo mode with fixtures if network is down
- Zero OAuth friction: Get started in < 5 minutes
π CruzHacks Track Alignment
n8n Track
- Workflow Orchestration: End-to-end automation from ingestion to GitHub
- Scheduled Runs: Automatic Reddit monitoring on cron
- Approval Gates: Human-in-the-loop approval via webhooks
- GitHub Automation: Issue/PR creation with labels and assignments
Gemini Track
- Structured Outputs: Strict JSON schemas for issue specs and patch plans
- Function Calling: Tool-ready actions (create_issue, request_more_info)
- Multimodal: Processes images/screenshots from Reddit for bug reports
- Reasoning: Transforms unstructured feedback into engineering artifacts
π Architecture
βββββββββββββββ
β Reddit β JSON ingestion (no OAuth!) or PRAW
β Threads β Paste URLs β fetch via JSON
ββββββββ¬βββββββ
β
βΌ
βββββββββββββββ
β Insight β Local theme grouping
β Engine β
ββββββββ¬βββββββ
β
βΌ
βββββββββββββββ
β Gemini β Insight β IssueSpec (structured JSON)
β (Reasoning)β Multimodal, function calling, guardrails
ββββββββ¬βββββββ
β
βΌ
βββββββββββββββ
β n8n β Orchestrates workflows, approval gates
β(Automation) β Triggers GitHub actions
ββββββββ¬βββββββ
β
βΌ
βββββββββββββββ
β GitHub β Issues created with evidence links
β β Optional: PRs with patch plans
βββββββββββββββ
β
βΌ
βββββββββββββββ
β Dashboard β Review insights, approve actions
β (Next.js) β Reddit evidence, Gemini outputs
βββββββββββββββ
π¬ Demo Mode
EchoFix supports full demo mode for environments without API keys:
- Uses pre-saved Reddit fixtures (JSON)
- Gemini responses from fixtures
- Full pipeline still runs end-to-end
Set DEMO_MODE=true in your .env file.
π οΈ Quick Start
Prerequisites
- Python 3.11+
- Node.js 18+
- Docker (for n8n)
- Supabase account (or local instance)
1. Backend Setup
cd backend
# Create virtual environment
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
# Install dependencies
pip install -r requirements.txt
# Setup environment
cp .env.example .env
# Edit .env with your credentials (or use DEMO_MODE=true)
# Run migrations
python migrate.py
# Start backend
python app.py
# Server runs on http://localhost:8000
2. Frontend Setup
cd webapp
# Install dependencies
npm install # or pnpm install
# Setup environment
cp .env.example .env.local
# Edit with your Supabase credentials
# Start dev server
npm run dev
# Dashboard runs on http://localhost:3000
3. n8n Setup
cd workflows
# Start n8n with Docker
docker-compose up -d
# Access n8n at http://localhost:5678
# Import workflows from workflows/*.json
4. Run Demo
# Option 1: Use seed threads (configured in .env)
# Set REDDIT_SEED_THREAD_URLS in backend/.env, then:
curl -X POST http://localhost:8000/api/reddit/ingest-seed
# Option 2: Ingest a specific Reddit thread (paste any URL!)
curl -X POST http://localhost:8000/api/reddit/ingest-url \
-H "Content-Type: application/json" \
-d '{"url": "https://reddit.com/r/webdev/comments/abc123/my_post"}'
# Visit http://localhost:3000 to see results
π Project Structure
EchoFix/
βββ backend/
β βββ app.py # Flask API server
β βββ models.py # Pydantic models
β βββ db.py # Database operations
β βββ reddit_client.py # Reddit PRAW (optional)
β βββ services/
β β βββ reddit_rss.py # Legacy RSS ingestion
β β βββ insight_generator.py # Local insight grouping
β βββ gemini_client.py # Gemini integration
β βββ github_client.py # GitHub operations
β βββ sandbox.py # Code sandbox (optional)
β βββ requirements.txt
β βββ .env.example
β βββ fixtures/ # Demo mode data
β β βββ reddit_search.json
β β βββ reddit_rss_demo.json
β βββ supabase/
β βββ migrations/ # Database schema
βββ webapp/
β βββ app/ # Next.js app directory
β βββ components/ # React components
β βββ lib/ # Utilities
β βββ package.json
β βββ .env.example
βββ workflows/
β βββ docker-compose.yml # n8n setup
β βββ scheduled-ingestion.json
β βββ approval-workflow.json
β βββ README.md
βββ docs/
β βββ ARCHITECTURE.md
β βββ API.md
β βββ DEMO.md # Judge walkthrough
βββ MIGRATION.md # Migration notes from Vector
βββ README.md # This file
π Environment Variables
Backend (.env)
# Core
DEMO_MODE=false
# Reddit Ingestion Mode (hackathon-friendly!)
REDDIT_INGEST_MODE=json # json (no OAuth!), praw (requires OAuth), rss_url (legacy), or fixtures
# Plan artifacts
ENABLE_PLAN_MD=true
ENABLE_PR_AUTOMATION=false
PLAN_MD_DIR=backend/artifacts/plans
PLAN_MD_PATH_TEMPLATE=docs/echofix_plans/{reddit_entry_id}.md
REDDIT_SEED_THREAD_URLS=https://reddit.com/r/webdev/comments/...,https://reddit.com/r/programming/comments/...
# Reddit JSON (no credentials needed!)
REDDIT_USER_AGENT=EchoFix/1.0 CruzHacks2026
# Score threshold gating
MIN_SCORE=2
SCORE_REFRESH_SECONDS=600
# Reddit API (OPTIONAL - only for PRAW mode)
REDDIT_CLIENT_ID=your_client_id
REDDIT_CLIENT_SECRET=your_secret
# Gemini
GEMINI_API_KEY=your_gemini_key
# GitHub
GITHUB_TOKEN=your_github_token
# Supabase
SUPABASE_URL=your_supabase_url
SUPABASE_SERVICE_ROLE_KEY=your_key
Frontend (.env.local)
NEXT_PUBLIC_SUPABASE_URL=your_supabase_url
NEXT_PUBLIC_SUPABASE_ANON_KEY=your_anon_key
NEXT_PUBLIC_API_BASE_URL=http://localhost:8000
n8n (docker-compose.yml)
N8N_ENCRYPTION_KEY=random_encryption_key
N8N_WEBHOOK_BASE_URL=http://localhost:5678
ECHOFIX_BACKEND_URL=http://host.docker.internal:8000
π API Endpoints
Reddit Ingestion (JSON Mode - No OAuth!)
POST /api/reddit/ingest-url- Ingest specific Reddit thread URLPOST /api/reddit/ingest-seed- Ingest pre-configured seed threadsPOST /api/reddit/ingest- Legacy PRAW ingestion (optional)POST /api/reddit/refresh-scores- Refresh scores and mark entries READY onceMIN_SCOREis metGET /api/reddit/entries- List collected entriesPOST /api/pipeline/auto-process-ready- Refresh & process READY entries, returns plan/PR links
Insight Generation
POST /api/insights/generate- Generate insights from READY entries (score threshold met)GET /api/insights- List insights
Auto Pipeline
POST /api/pipeline/auto-process- Refresh scores, generate insights, run Gemini, and create GitHub issuesPOST /api/pipeline/auto-process-ready- Ready-focused auto-run that reports issue/PR/plan artifacts
Gemini Processing
POST /api/gemini/analyze- Analyze insight with GeminiPOST /api/gemini/issue-spec- Generate issue specificationPOST /api/gemini/patch-plan- Generate patch plan (optional)
GitHub Actions
POST /api/github/create-issue- Create GitHub issuePOST /api/github/create-pr- Create pull request (with approval)
Workflow Triggers (for n8n)
POST /api/workflows/trigger- Generic workflow triggerPOST /api/workflows/approve- Approval webhook
π¨ Dashboard Features
- Reddit Feed: Recent posts/comments with filtering
- Insights Panel: Local themes with trend indicators
- Evidence View: Links to original Reddit threads
- Issue Specs: Gemini-generated structured outputs
- Approval UI: One-click approve β n8n β GitHub
- Demo Mode Indicator: Clear visual when in demo mode
π§° Demo Utilities
python backend/scripts/run_one_live.py <reddit_thread_url>β ingest a live thread, refresh scores, and print issue/PR/plan outputs when the backend is running.
π Security
- No Auto-Merge: All PRs require explicit approval
- Approval Gates: Human review before GitHub actions
- Sandbox Isolation: Code generation in isolated environment
- Token Scoping: Minimal GitHub permissions required
- Rate Limiting: Respects Reddit API limits
π§ͺ Testing
# Backend tests
cd backend
pytest
# Frontend tests
cd webapp
npm test
# E2E demo flow
./scripts/test-demo.sh
π Documentation
π€ Contributing
This is a hackathon project, but improvements welcome:
- Fork the repository
- Create a feature branch
- Make your changes
- Submit a pull request
π License
MIT License - see LICENSE file
π Acknowledgments
- Built on the foundation of Vector (X/Grok pipeline)
- Orchestrated by n8n for workflow automation
- Reasoning by Gemini for structured outputs
- Data from Reddit community feedback
π― CruzHacks 2026
Team: [Your Team Name] Tracks: n8n, Gemini Demo: [Link to demo video]
Made with β€οΈ for CruzHacks 2026
Analysis
View
Metric
No commits on this project resolved to a GitHub account.
Technology
- CSSIn code
- FlaskIn code
- JavaScriptIn code
- Next.jsIn code
- OpenAIIn code
- PythonIn code
- ReactIn code
- SQLIn code
- SupabaseIn code
- Tailwind CSSIn code
- TypeScriptIn code
- DockerClaimed
- FastAPIClaimed
- Google GeminiClaimed
- VercelClaimed
11 of 15 appear in the indexed code. 4 claimed on Devpost could not be matched to code, which may simply mean the tool leaves no trace in the repository.
AI coding agents
- Claude CodeConfig Β· Commits
Detected from committed agent config files and commit authorship. Absence of a signal is not proof an agent was unused.
Codebase size
Source size
980 KB
Source files
248
Counts recognized source files only; vendored directories, binaries and lockfiles are excluded, so this is smaller than the repository on disk.
Repository
Nayab-23/EchoFix
294 files Β· 2.7 MB Β· @ 7a278dc
Structure
Interface
162 files Β· 55%Screens, components and styles rendered to the user.
Application logic
48 files Β· 16%Domain rules, services and shared utilities.
+4 moreData & schema
15 files Β· 5%Schema definitions, migrations and data access.
Supporting
Layers are inferred from where files sit in the tree, not from reading the code. A project that names its directories unconventionally will read oddly here β open the file browser to check anything the diagram implies.
Languages
- TypeScript52%
- Python26%
- Markdown16%
- Shell3%
- SQL2%
- CSS1%
- Other (2)0%
Share of indexed source by file size. Binary and vendored files are excluded.
Dependencies
frontend/package.json
npm Β· 58- @hookform/resolvers
- @radix-ui/react-accordion
- @radix-ui/react-alert-dialog
- @radix-ui/react-aspect-ratio
- @radix-ui/react-avatar
- @radix-ui/react-checkbox
- @radix-ui/react-collapsible
- @radix-ui/react-context-menu
- @radix-ui/react-dialog
- @radix-ui/react-dropdown-menu
- @radix-ui/react-hover-card
- @radix-ui/react-label
- @radix-ui/react-menubar
- @radix-ui/react-navigation-menu
- @radix-ui/react-popover
- @radix-ui/react-progress
- @radix-ui/react-radio-group
- @radix-ui/react-scroll-area
- +40 more
frosted-glass-ui-crm-dashboard-ui-design/package.json
npm Β· 58- @hookform/resolvers
- @radix-ui/react-accordion
- @radix-ui/react-alert-dialog
- @radix-ui/react-aspect-ratio
- @radix-ui/react-avatar
- @radix-ui/react-checkbox
- @radix-ui/react-collapsible
- @radix-ui/react-context-menu
- @radix-ui/react-dialog
- @radix-ui/react-dropdown-menu
- @radix-ui/react-hover-card
- @radix-ui/react-label
- @radix-ui/react-menubar
- @radix-ui/react-navigation-menu
- @radix-ui/react-popover
- @radix-ui/react-progress
- @radix-ui/react-radio-group
- @radix-ui/react-scroll-area
- +40 more
backend/requirements.txt
pypi Β· 10- flask
- flask-cors
- google-generativeai
- httpx
- openai
- praw
- pydantic
- python-dotenv
- requests
- supabase
Declared in the repositoryβs manifests at the indexed commit. A declared package is not proof it is used, and runtime dependencies are listed first.
This projectβs features have not been analysed yet.
Export this project's context (description, README, evidence, key source files) to chat with an AI agent elsewhere.