{"id":28549127,"url":"https://github.com/derekmeegan/mark_venaglia_edge_functions","last_synced_at":"2026-04-16T14:04:17.771Z","repository":{"id":297251589,"uuid":"996152403","full_name":"derekmeegan/mark_venaglia_edge_functions","owner":"derekmeegan","description":"Supabase Edge Functions for TripAdvisor review scraping and email handling with automatic GitHub Actions deployment.","archived":false,"fork":false,"pushed_at":"2025-06-04T17:05:55.000Z","size":18,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-07-04T14:11:14.880Z","etag":null,"topics":["browserbase","playwright","supabase","typescript","webscraping"],"latest_commit_sha":null,"homepage":"https://www.markvenaglia.com/","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/derekmeegan.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-06-04T14:27:52.000Z","updated_at":"2025-06-04T17:07:12.000Z","dependencies_parsed_at":"2025-06-04T21:42:54.411Z","dependency_job_id":null,"html_url":"https://github.com/derekmeegan/mark_venaglia_edge_functions","commit_stats":null,"previous_names":["derekmeegan/mark_venaglia_edge_functions"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/derekmeegan/mark_venaglia_edge_functions","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/derekmeegan%2Fmark_venaglia_edge_functions","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/derekmeegan%2Fmark_venaglia_edge_functions/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/derekmeegan%2Fmark_venaglia_edge_functions/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/derekmeegan%2Fmark_venaglia_edge_functions/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/derekmeegan","download_url":"https://codeload.github.com/derekmeegan/mark_venaglia_edge_functions/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/derekmeegan%2Fmark_venaglia_edge_functions/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":267620509,"owners_count":24116796,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-07-29T02:00:12.549Z","response_time":2574,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["browserbase","playwright","supabase","typescript","webscraping"],"created_at":"2025-06-10T02:00:19.586Z","updated_at":"2026-04-16T14:04:17.737Z","avatar_url":"https://github.com/derekmeegan.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Venaglia Edge Functions\n\nThis repository contains Supabase Edge Functions for web scraping and email handling, deployed using GitHub Actions.\n\n## Overview\n\nThe repository includes two main edge functions:\n\n1. **scrape-reviews**: A Deno-based edge function that scrapes TripAdvisor reviews using Playwright and Browserbase, then stores the data in a Supabase database.\n2. **send-email**: A simple edge function that processes contact form submissions and sends emails using SendGrid.\n\n## Technologies Used\n\n- [Deno](https://deno.land/) - The JavaScript/TypeScript runtime used for edge functions\n- [Supabase](https://supabase.com/) - Backend-as-a-Service platform for hosting the edge functions\n- [Playwright](https://playwright.dev/) - Browser automation library for web scraping\n- [Browserbase](https://browserbase.com/) - Headless browser infrastructure for web scraping\n- [SendGrid](https://sendgrid.com/) - Email delivery service\n- [GitHub Actions](https://github.com/features/actions) - CI/CD for automatic deployment\n\n## Edge Functions\n\n### scrape-reviews\n\nThis function scrapes TripAdvisor reviews for a specific attraction:\n\n- Uses Playwright with Browserbase for headless browser automation\n- Scrapes multiple pages of reviews (configurable)\n- Extracts detailed review data including:\n  - Reviewer information (name, profile, avatar)\n  - Review content (title, text, rating)\n  - Metadata (date, trip type, helpful votes)\n- Stores the scraped data in a Supabase database table named \"reviews\"\n- Handles pagination and error cases\n\n#### Environment Variables Required:\n- `BROWSERBASE_API_KEY` - API key for Browserbase\n- `BROWSERBASE_PROJECT_ID` - Project ID for Browserbase\n- `SUPABASE_URL` - URL of your Supabase project\n- `SUPABASE_ANON_KEY` - Anonymous key for Supabase API access\n\n### send-email\n\nThis function processes contact form submissions:\n\n- Receives form data (name, email, subject, message)\n- Forwards the information via SendGrid to a specified email address\n- Handles CORS and provides appropriate responses\n\n#### Environment Variables Required:\n- `SENDGRID_API_KEY` - API key for SendGrid email service\n\n## Deployment\n\nThe edge functions are automatically deployed to Supabase using GitHub Actions when changes are pushed to the main branch.\n\n### GitHub Actions Workflow\n\nThe deployment workflow:\n1. Triggers on push to main branch or manual workflow dispatch\n2. Sets up the Supabase CLI\n3. Deploys all functions to the specified Supabase project\n\n#### Environment Variables Required for Deployment:\n- `SUPABASE_ACCESS_TOKEN` - Access token for Supabase\n- `PROJECT_ID` - Supabase project ID\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fderekmeegan%2Fmark_venaglia_edge_functions","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fderekmeegan%2Fmark_venaglia_edge_functions","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fderekmeegan%2Fmark_venaglia_edge_functions/lists"}