A beautifully designed, production-ready web scraping application built with React and Express.js. Extract, analyze, and export website content with Apple-inspired design and enterprise-grade functionality.
- Smart Web Scraping: Extract titles, descriptions, content, headings, images, and links
- Batch Processing: Scrape multiple URLs simultaneously (up to 10)
- Real-time Validation: URL validation with visual feedback
- Multiple Export Formats: JSON, CSV, and Markdown export options
- Content Search: Full-text search across all scraped content
- Analytics Dashboard: Comprehensive insights and performance metrics
- Apple-Inspired Design: Clean, minimal interface with glassmorphism effects
- Dark Mode: System preference detection with manual toggle
- Responsive Design: Mobile-first approach with perfect desktop experience
- Smooth Animations: Framer Motion powered micro-interactions
- Toast Notifications: Real-time feedback for all user actions
- Rate Limiting: Respectful crawling with built-in rate limiting
- Error Handling: Comprehensive error handling with user-friendly messages
- Content Caching: Intelligent caching to avoid redundant scraping
- Progress Tracking: Real-time progress indicators for batch operations
- Data Persistence: Supabase database for reliable data storage
- React 18 with TypeScript
- Tailwind CSS for styling
- Framer Motion for animations
- React Query for state management
- React Hook Form for form handling
- Recharts for analytics visualization
- Node.js with Express.js
- Cheerio for HTML parsing
- Supabase with custom database layer
- Axios for HTTP requests
- Winston for logging
-
Clone the repository
git clone <repository-url> cd contentharvest
-
Install dependencies
npm install
-
Start the development server
npm run dev
The application will be available at http://localhost:5173 with the API server running on http://localhost:3001.
Create a .env file in the root directory:
NODE_ENV=development
PORT=3001
DATABASE_PATH=./contentharvest.dbThe database is automatically initialized on first run. No manual setup required.
- Navigate to the Web Scraper tab
- Enter a valid URL in the input field
- Click "Scrape Content" to extract data
- View results in the Results tab
- Switch to "Batch URLs" mode
- Enter multiple URLs (one per line)
- Use "Paste URLs" to import from clipboard
- Click "Scrape All URLs" to process
- Go to the Results tab to see all scraped content
- Use the search bar to filter results
- Select multiple items for bulk operations
- Export data in JSON, CSV, or Markdown formats
- Visit the Analytics tab for insights
- View scraping trends and performance metrics
- Analyze top domains and content distribution
- Monitor success rates and content quality
- Primary Blue: #007AFF
- Light Gray: #F5F5F7
- Dark Gray: #1D1D1F
- Success: #32D74B
- Warning: #FF9500
- Error: #FF3B30
- Primary Font: SF Pro Display (fallback to system fonts)
- Font Weights: 300, 400, 500, 600, 700
- Spacing: 8px grid system
- Glass Effects: Backdrop blur with translucent backgrounds
- Cards: Rounded corners with subtle shadows
- Buttons: Three variants (primary, secondary, ghost)
- Inputs: Consistent styling with focus states
- Input Sanitization: All user inputs are validated and sanitized
- Rate Limiting: 30 requests per minute per IP address
- CORS Protection: Configured for secure cross-origin requests
- Helmet Integration: Security headers for production deployment
- Content Security Policy: XSS and injection attack prevention
Scrape a single URL
{
"url": "https://example.com"
}Scrape multiple URLs
{
"urls": ["https://example1.com", "https://example2.com"]
}Get all scraped content with optional search
?search=keyword&limit=50&offset=0
Export content in various formats
{
"format": "json|csv|markdown",
"ids": ["id1", "id2"]
}Get comprehensive analytics data
npm run buildFROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY . .
RUN npm run build
EXPOSE 3001
CMD ["npm", "start"]- Set
NODE_ENV=production - Configure proper database path
- Set up reverse proxy (nginx recommended)
- Enable HTTPS in production
# Run linting
npm run lint
# Run type checking
npx tsc --noEmit
# Test API endpoints
curl -X POST http://localhost:3001/api/scraper/scrape \
-H "Content-Type: application/json" \
-d '{"url": "https://example.com"}'- Chrome extension for one-click scraping
- Webhook notifications for completed scrapes
- Team collaboration features
- API rate limiting per user
- Scheduled scraping (cron jobs)
- Advanced content analysis with AI
- Browser bookmarklet
- Slack/Discord bot integration
- Fork the repository
- Create a 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.
- Design inspiration from Apple's Human Interface Guidelines
- Icons provided by Lucide React
- Charts powered by Recharts
- Animation library by Framer Motion
For support, email support@contentharvest.com or create an issue on GitHub.
Built with ❤️ and attention to detail. Happy scraping! 🕷️