* decimated * Remove docs, tests, and artifacts to keep production lean * Remove service status dashboard feature (compilation issues, not needed for lean prod) * Remove service status references from main.go and fix WebSocket config * fix app * deltions * big pull fin * big pull * lit * last one * deploy * bringing back for local dev * Fix missing permission checks, remove dead dependencies, and clean up build config - Add RequirePermission(PermissionManageUsers) to badge award/remove routes - Migrate all lib/pq usages to pgx/v5 native array handling and remove dependency - Remove unused zustand dependency from frontend - Move @types/dompurify to devDependencies - Update react-is to v19 for React 19 compatibility - Enable CSS code splitting for smaller initial payloads Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * threejs * automated playlists * bug fixes * feat: add tags and streamers to CategoriesNav, fix empty category clips - CategoriesNav now has tabs: Categories, Tags, Streamers - Tags tab shows popular tags with color dots and usage counts - Streamers tab shows popular broadcasters with clip counts - Added GET /api/v1/broadcasters/popular endpoint - Category clips now falls back to recent clips when no games match - Reduced per-game clip fetch from 1000 to 200 * Apply stashed changes: search fix, deploy script, i18n, websocket refs, category handler, broadcaster repo, UI cleanup - Fix search API 500: use explicit columns in searchTags instead of SELECT t.* - Remove auto-stash from deploy script (deploy current working tree) - Add useEffect wrappers for ref updates in websocket hooks - Add i18n translations (en, es, fr) for error boundary, pages - Improve category handler: better error handling, proper total count - Improve broadcaster repo: add limit validation, filter hidden clips - Remove ExternalLink component and ServiceStatusPage - Add comments to CategoriesNav for clarity - Various admin page and component fixes * Fix duplicate ListPopularBroadcasters and fetchPopularBroadcasters from stash merge * Add /health root route for Docker HEALTHCHECK * deploy script * broadcaster api * tailwind fixes * fix: remove duplicate /broadcasters/popular route causing panic on startup * fix: remove duplicate fetchPopularBroadcasters export causing build failure * fix: handle null search_history response to prevent filter TypeError * automated playlists * overhaul discorvery * useclips --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Clipper
A modern, community-driven Twitch clip curation platform
Clipper is a full-stack platform for discovering, curating, and sharing the best Twitch clips. It combines powerful search capabilities, community voting, and social features to help users find and organize memorable gaming moments.
✨ Key Features
- 🔍 Advanced Search: Hybrid BM25 + semantic vector search with natural language queries
- ⬆️ Community Curation: Reddit-style voting, comments, and karma system
- 📱 Multi-Platform: Responsive web app + native iOS/Android apps
- 💎 Premium Features: Unlimited collections, advanced filters, and cross-device sync
- 🎮 Twitch Integration: OAuth login, live streams, and clip submission
- 🚀 Modern Stack: Go backend, React frontend, React Native mobile
🚀 Quick Start
Prerequisites
- Docker & Docker Compose (recommended)
- Node.js 20+ (for frontend/mobile development)
- Go 1.24+ (for backend development)
- PostgreSQL 17+ (if running without Docker)
- Redis 8+ (if running without Docker)
Getting Started with Docker
```bash
Clone the repository
git clone https://github.com/subculture-collective/clipper.git cd clipper
Copy environment files
cp .env.development.example .env
Start all services
docker-compose up -d
Run database migrations
cd backend go run cmd/migrate/main.go up
Access the application
Frontend: http://localhost:5173
Backend API: http://localhost:8080
Docs: http://localhost:3000
```
This will start all services in Docker containers.
🚀 VPS Deployment
For deploying to a production VPS with Vault and Caddy:
```bash
Quick deploy
./scripts/deploy-vps.sh
See quick reference
cat DEPLOY_VPS_QUICK.md ```
📖 Complete VPS deployment guide: `docs/VPS_DEPLOYMENT.md`
Development Without Docker
See the complete Development Setup Guide for detailed instructions.
📚 Documentation
Comprehensive documentation is available in the `/docs` directory:
- Getting Started - Development environment setup
- VPS Deployment - Production VPS deployment guide
- VPS Troubleshooting - Common deployment issues
- User Guide - Using the platform
- API Reference - REST API documentation
- Architecture - System design and components
- Deployment - General deployment guide
- Contributing - Contribution guidelines
📖 Full documentation index: `docs/index.md`
🏗️ Architecture
Clipper is built as a modern, scalable full-stack application:
``` ┌─────────────┐ ┌──────────────┐ ┌───────────────┐ │ Web App │ │ Mobile Apps │ │ Backend API │ │ (React) │─────▶│ (React Native)│─────▶│ (Go/Gin) │ └─────────────┘ └──────────────┘ └───────┬───────┘ │ ┌─────────────────────────┼─────────────────────┐ ▼ ▼ ▼ ┌──────────┐ ┌──────────┐ ┌─────────────┐ │PostgreSQL│ │ Redis │ │ OpenSearch │ │ (Data) │ │ (Cache) │ │ (Search) │ └──────────┘ └──────────┘ └─────────────┘ ```
- Frontend: React 19 + TypeScript + Vite + TailwindCSS
- Mobile: React Native 0.76 + Expo 52
- Backend: Go 1.24 + Gin + PostgreSQL + Redis
- Search: OpenSearch 2.11 with hybrid BM25 + vector search
- Infrastructure: Docker, Kubernetes, GitHub Actions
See Architecture Documentation for details.
🛠️ Tech Stack
Backend
- Language: Go 1.24+
- Framework: Gin (HTTP web framework)
- Database: PostgreSQL 17 with pgx driver
- Cache: Redis 8 with go-redis
- Search: OpenSearch 2.11
- Auth: JWT with Twitch OAuth
- Queue: Redis-based background jobs
Frontend (Web)
- Framework: React 19 with TypeScript
- Build Tool: Vite
- Styling: TailwindCSS
- Routing: React Router 7
- State: TanStack Query + Zustand
- Forms: React Hook Form
Mobile (iOS/Android)
- Framework: React Native 0.76
- Platform: Expo 52 with Expo Router
- Language: TypeScript (shared types)
- State: TanStack Query + Zustand
Infrastructure
- Containers: Docker & Docker Compose
- Orchestration: Kubernetes (production)
- CI/CD: GitHub Actions
- Monitoring: Prometheus + Grafana
- Secrets: HashiCorp Vault
🤝 Contributing
We welcome contributions! Please see our Contributing Guide for:
- Code of conduct
- Development workflow
- Code style guidelines
- Testing requirements
- Pull request process
Quick Contribution Steps
- Fork the repository
- Create a feature branch (`git checkout -b feature/amazing-feature`)
- Make your changes and add tests
- Run linters and tests (`make test`)
- Commit your changes (`git commit -m 'Add amazing feature'`)
- Push to the branch (`git push origin feature/amazing-feature`)
- Open a Pull Request
📝 License
This project is licensed under the MIT License - see the LICENSE file for details.
🔗 Links
- Documentation: docs/index.md
- Issue Tracker: GitHub Issues
- Discussions: GitHub Discussions
- Twitch API: Twitch Developer Docs
🙏 Acknowledgments
Built with ❤️ by the Subculture Collective
Special thanks to:
- The Twitch developer community
- All our contributors
- Open source projects that make this possible
Status: Active Development | Version: v0.x (Pre-release) | Target: MVP Release Q2 2025