A powerful website monitoring application that tracks changes on websites and sends intelligent notifications. Built with Next.js, Convex, and Firecrawl API.
- Website Monitoring: Track changes on single pages or entire websites
- AI-Powered Analysis: Filter out noise with intelligent change detection
- Flexible Notifications: Email, webhooks, or dashboard-only monitoring
- Secure API Key Management: Encrypted storage for Firecrawl and AI provider keys
- Real-time Updates: Instant change detection with configurable intervals
- Beautiful UI: Modern, responsive interface with dark mode support
- Node.js 18+ and npm
- A Convex account (free tier available)
- A Firecrawl API key (required for website monitoring)
- (Optional) Resend API key for email notifications
- (Optional) AI API key for intelligent filtering (OpenAI, Anthropic, Google, or Moonshot)
git clone https://github.com/mendableai/firecrawl-observer.git
cd firecrawl-observer
npm install
npx convex dev
This will:
- Open your browser to authenticate with Convex
- Create a new project (or link to an existing one)
- Set up your database schema
Keep this terminal running.
npx @convex-dev/auth
This will:
- Set up your SITE_URL (use http://localhost:3000 for local development)
- Generate and configure JWT keys automatically
- Configure all necessary auth files
When prompted for the local web server URL, enter: http://localhost:3000
# Generate and set encryption key for API key storage
npx convex env set ENCRYPTION_KEY "$(openssl rand -base64 32)"
# Optional: Set up email notifications
npx convex env set RESEND_API_KEY "your_resend_api_key"
npx convex env set FROM_EMAIL "[email protected]"
npm run dev
Visit http://localhost:3000 to see the application.
Create a .env.local
file with:
# Convex (automatically set by npx convex dev)
NEXT_PUBLIC_CONVEX_URL=https://your-project.convex.cloud
# Email notifications (optional)
RESEND_API_KEY=re_YOUR_RESEND_API_KEY
# Encryption key (required - auto-generated by setup script)
ENCRYPTION_KEY=your_generated_encryption_key
# Auth configuration
SITE_URL=http://localhost:3000
JWT_PRIVATE_KEY=your_jwt_private_key
Required variables in Convex dashboard:
JWT_PRIVATE_KEY
- Automatically set bynpx @convex-dev/auth
(required for auth)JWKS
- Automatically set bynpx @convex-dev/auth
(required for auth)SITE_URL
- Automatically set bynpx @convex-dev/auth
(required)ENCRYPTION_KEY
- For securing API keys in database (required)FIRECRAWL_API_KEY
- For website monitoring (optional, users can add their own)RESEND_API_KEY
- For email notifications (optional)FROM_EMAIL
- Sender email address (optional)
- Sign up or log in to your account
- Click "Add Website"
- Choose monitoring type:
- Single Page: Monitor a specific URL
- Full Site: Crawl and monitor an entire website
- Configure check interval (minimum 60 minutes)
- Set up notifications (optional)
Users can add their own API keys for:
- Firecrawl: Required for website monitoring
- AI Provider: Optional, for intelligent change filtering
API keys are encrypted before storage using AES-256-GCM encryption.
-
Email Notifications
- Requires email verification
- Powered by Resend
- Includes change summaries and AI analysis
-
Webhook Notifications
- Send changes to your own endpoints
- Configurable payload format
- Includes full diff and metadata
-
AI-Filtered Notifications
- Only receive notifications for meaningful changes
- Configurable threshold (0-100)
- Includes AI reasoning for each change
fc-observer/
βββ convex/ # Backend functions and schema
β βββ auth.ts # Authentication logic
β βββ schema.ts # Database schema
β βββ firecrawl.ts # Firecrawl integration
β βββ aiAnalysis.ts # AI change analysis
βββ src/
β βββ app/ # Next.js app router pages
β βββ components/ # React components
β βββ config/ # App configuration
β βββ lib/ # Utilities and helpers
βββ scripts/ # Test scripts (optional)
npm run dev
- Start development serversnpm run build
- Build for productionnpm run lint
- Run ESLintnpx convex dev
- Start Convex backendnpx convex deploy
- Deploy to productionnpx @convex-dev/auth
- Configure authentication
Before committing, ensure your code passes:
npm run lint
npm run typecheck
- Push your code to GitHub
- Import project in Vercel
- Add environment variables:
NEXT_PUBLIC_CONVEX_URL
(from Convex dashboard)RESEND_API_KEY
(if using email)
- Deploy
npx convex deploy
Update your production environment variables in Convex dashboard.
- All API keys are encrypted using AES-256-GCM
- JWT-based authentication with secure sessions
- Email verification required for notifications
- Rate limiting on API endpoints
- Secure webhook URL validation
-
"Encryption key not set" error
- Ensure
ENCRYPTION_KEY
is set in both.env.local
and Convex environment
- Ensure
-
Authentication errors
- Regenerate JWT keys using
node scripts/generate-jwt-keys.js
- Ensure
SITE_URL
matches your domain
- Regenerate JWT keys using
-
Firecrawl API errors
- Verify API key is valid
- Check API rate limits
- Ensure URLs are accessible
View backend logs:
npx convex logs
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature
) - Commit your changes (
git commit -m 'Add amazing feature'
) - Push to the branch (
git push origin feature/amazing-feature
) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.