Market intelligence scraper + AI analysis. Mac Mini runs all scraping. Supabase stores competitor snapshots. Weekly reports via Resend. Ollama for local analysis.
| Component | Technology | Why |
|---|---|---|
| Scraper Host | Mac Mini (Deno + Playwright) | 24/7 scraping of all competitor channels. Apple Silicon handles concurrent browser instances well. |
| Dashboard | SvelteKit | Web UI showing all competitors, change history, momentum scores |
| Database | Supabase (PostgreSQL) | Competitor snapshots, change logs, momentum scores over time |
| Analysis | Ollama Mistral 7B (Mac Mini) | Compares snapshots, identifies changes, generates report text |
| Reports | Resend (email) | Monday morning weekly intelligence report |
| Alerts | Slack webhook or email | Custom alerts for urgent changes |
| Payments | Stripe | Subscriptions |
| competitors | ||
|---|---|---|
| id | uuid | |
| name | varchar(255) | |
| website_url | varchar(500) | |
| linkedin_url | varchar(500) | |
| snapshots | ||
|---|---|---|
| id | uuid | |
| competitor_id | uuid (FK) | |
| snapshot_date | date | |
| pricing_json | jsonb | Extracted pricing data |
| job_postings_json | jsonb | Job listings from careers page |
| social_posts_json | jsonb | Recent social activity |
| press_json | jsonb | Recent press/news |
| raw_text | text | Full text dump for comparison |
| changes_detected | ||
|---|---|---|
| id | uuid | |
| competitor_id | uuid (FK) | |
| change_type | enum('pricing','product','hiring','social','press','other') | |
| description | text | Plain-English change description |
| significance | enum('low','medium','high') | |
| reported | boolean | In weekly report? |