Torale is an intelligent alerting service that monitors websites for meaningful changes using natural language queries. Simply describe what you want to monitor in plain English, and Torale will find the right sources and notify you when important changes occur.
Example: "Tell me when OpenAI updates their research page" β Torale discovers the OpenAI research page, monitors it using semantic embeddings, and emails you when new papers are published.
- π Natural Language Queries: "Tell me when Tesla updates their pricing page"
- π― Smart Source Discovery: Uses Perplexity AI to find authoritative sources
- π§ Semantic Change Detection: Embedding-based detection of meaningful changes, not just HTML diffs
- π§ Intelligent Notifications: Email alerts with AI-generated summaries of what changed
- π Secure Authentication: Powered by Supabase Auth with RLS
- β‘ Real-time Updates: Live alerts using Supabase Realtime
- π Microservices Architecture: Scalable, fault-tolerant service design
Torale uses a selective microservices architecture with three main services:
βββββββββββββββββββ βββββββββββββββββββββββββββββββββββ
β Next.js App ββββββΆβ Main Backend β
β (Frontend) β β (FastAPI) β
βββββββββββββββββββ β ββββββββββββββββββββββββββββββββ
β β β’ User Management ββ
β β β’ API Orchestration ββ
βββββββββββΌβββ€ β’ Notifications (Integrated)ββ
β β β β’ Service Coordination ββ
β β ββββββββββββββββββββββββββββββββ
β βββββββββββββββ¬ββββββββββββββββββββ
β β
βββββββΌββββββ βββββββΌβββββββββββ
β Discovery β βContent Monitor β
β Service β β Service β
β :8001 β β :8002 β
β β β β
ββ’ AI Query β ββ’ Web Scraping β
β Processingβ ββ’ Embeddings β
ββ’ Source β ββ’ Change β
β Finding β β Detection β
ββ’ Perplexityβ ββ’ Alert β
β Integrationβ β Generation β
βββββββ¬ββββββ βββββββ¬βββββββββββ
β β
βββββββββββββ¬ββββββββββββ
β
ββββββββΌβββββββ
β Supabase β
β - Auth β
β - Database β
β - Realtime β
β - Functionsβ
βββββββββββββββ
- Main Backend (
:8000
): User management, API gateway, service coordination - Discovery Service (
:8001
): Natural language β URL discovery using Perplexity AI - Content Monitoring Service (
:8002
): Web scraping, embedding generation, change detection - Notification Service (
:8003
): Multi-channel notifications via NotificationAPI (email, SMS, push, webhooks)
# 1. Copy and configure environment variables
cp .env.example .env
# Edit .env with your API keys (see SETUP.md for details)
# 2. Start the entire stack
docker-compose up --build
# 3. Access the application
# Frontend: http://localhost:3000
# Backend API: http://localhost:8000/docs
If you have just installed:
# See all available commands
just
# Setup and start everything
just setup
just up
# Check service health
just health
# View logs
just logs
# Backend
cd backend && uv sync && uv run uvicorn app.main:app --reload --port 8000
# Frontend
cd frontend && npm install && npm run dev
# Microservices
./start-microservices.sh
# Or individually:
cd discovery-service && uv run uvicorn main:app --reload --port 8001
cd content-monitoring-service && uv run uvicorn main:app --reload --port 8002
cd notification-service && uv run uvicorn main:app --reload --port 8003
See SETUP.md for detailed setup instructions including API key configuration.
Frontend
- Next.js 15 with App Router
- React 19, TypeScript, Tailwind CSS
- Supabase Auth & Realtime
- TanStack Query for state management
Backend Services
- FastAPI with Python 3.12+
- Pydantic for data validation
- uv for dependency management
- Comprehensive async/await usage
AI & Data
- OpenAI GPT-4 for embeddings & analysis
- Perplexity API for source discovery
- Supabase (PostgreSQL + pgvector)
- NotificationAPI for multi-channel notifications
Development & Deployment
- Docker & docker-compose
- Just for task automation
- Comprehensive test suites (pytest, vitest)
- GitHub Actions CI/CD ready
API Keys Required:
- Supabase project (free tier available)
- OpenAI API key (for embeddings)
- Perplexity API key (for source discovery)
- NotificationAPI account (for multi-channel notifications)
Development Tools:
- Python 3.12+ with uv
- Node.js 18+ with npm
- Docker (optional, for containerized development)
# Backend linting and testing
cd backend
uv run ruff check . && uv run ruff format .
uv run mypy .
uv run pytest --cov=app --cov-report=term-missing
# Frontend linting and testing
cd frontend
npm run lint && npm run type-check
npm run test && npm run coverage
# All services
just test # Runs tests for all services
just lint # Runs linting for all services
torale/
βββ backend/ # Main FastAPI backend
βββ frontend/ # Next.js application
βββ discovery-service/ # Natural language processing service
βββ content-monitoring-service/ # Web scraping & change detection
βββ notification-service/ # Email & notification delivery
βββ supabase/ # Database migrations & functions
βββ docs/ # Additional documentation
βββ docker-compose.yml # Full-stack deployment
βββ justfile # Task automation
βββ .env # Environment configuration
- Core user authentication with Supabase Auth
- Natural language query processing
- Intelligent source discovery via AI
- Semantic change detection using embeddings
- Email notification system with preferences
- Real-time alerts via Supabase Realtime
- Comprehensive microservices architecture
- Full Docker deployment support
- Modern, responsive UI with dark mode
- Performance optimizations for large-scale monitoring
- Advanced notification channels (webhooks, Slack)
- Improved change detection algorithms
- Enhanced monitoring dashboard
- Mobile app development
- Enterprise features (team accounts, SSO)
- Advanced analytics and reporting
- Machine learning for personalized alerts
- Webhook integrations for third-party services
- SETUP.md - Detailed setup instructions
- DEVELOPMENT.md - Developer workflow and guidelines
- CLAUDE.md - Claude AI assistant context
- API Documentation - Interactive API docs (when running)
We welcome contributions! Please see CONTRIBUTING.md for guidelines.
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature
) - Make your changes with tests
- Ensure all tests pass (
just test
) - Commit your changes (
git commit -m 'Add amazing feature'
) - Push to your branch (
git push origin feature/amazing-feature
) - Open a Pull Request
MIT License - see LICENSE file for details.
- π§ Email: team@torale.com
- π Issues: GitHub Issues
- π¬ Discussions: GitHub Discussions
Built with β€οΈ by the Torale team
Turning natural language into intelligent monitoring