{"id":47625582,"url":"https://github.com/harvey-au/hover","last_synced_at":"2026-04-25T02:08:09.536Z","repository":{"id":286355038,"uuid":"960765486","full_name":"Harvey-AU/hover","owner":"Harvey-AU","description":"Check sites for broken links, slow pages, while warming cache.","archived":false,"fork":false,"pushed_at":"2026-04-04T06:20:53.000Z","size":195298,"stargazers_count":2,"open_issues_count":6,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-04T08:29:14.963Z","etag":null,"topics":["cache","cache-warmer","go","link-checker","performance","saas","shopify","web-crawler","webflow"],"latest_commit_sha":null,"homepage":"https://adapt.app.goodnative..co","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Harvey-AU.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":"Roadmap.md","authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2025-04-05T02:53:22.000Z","updated_at":"2026-04-04T06:20:33.000Z","dependencies_parsed_at":"2025-04-28T01:21:24.533Z","dependency_job_id":"fa5ec8e4-1565-4b2b-892c-0f119f1b7f2d","html_url":"https://github.com/Harvey-AU/hover","commit_stats":null,"previous_names":["harvey-au/cache-warmer","harvey-au/blue-banded-bee","harvey-au/adapt","harvey-au/hover"],"tags_count":127,"template":false,"template_full_name":null,"purl":"pkg:github/Harvey-AU/hover","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Harvey-AU%2Fhover","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Harvey-AU%2Fhover/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Harvey-AU%2Fhover/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Harvey-AU%2Fhover/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Harvey-AU","download_url":"https://codeload.github.com/Harvey-AU/hover/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Harvey-AU%2Fhover/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31477013,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-06T14:34:32.243Z","status":"ssl_error","status_checked_at":"2026-04-06T14:34:31.723Z","response_time":112,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["cache","cache-warmer","go","link-checker","performance","saas","shopify","web-crawler","webflow"],"created_at":"2026-04-01T22:46:03.399Z","updated_at":"2026-04-06T15:01:04.432Z","avatar_url":"https://github.com/Harvey-AU.png","language":"Go","readme":"# Hover 🐝\n\n[![Fly Deploy](https://github.com/Harvey-AU/hover/actions/workflows/fly-deploy.yml/badge.svg)](https://github.com/Harvey-AU/hover/actions/workflows/fly-deploy.yml)\n[![Tests](https://github.com/Harvey-AU/hover/actions/workflows/test.yml/badge.svg)](https://github.com/Harvey-AU/hover/actions/workflows/test.yml)\n[![codecov](https://codecov.io/github/harvey-au/hover/graph/badge.svg?token=EC0JW5IU7X)](https://codecov.io/github/harvey-au/hover)\n[![Go Report Card](https://goreportcard.com/badge/github.com/Harvey-AU/hover?style=flat)](https://goreportcard.com/report/github.com/Harvey-AU/hover)\n[![Go Reference](https://pkg.go.dev/badge/github.com/Harvey-AU/hover.svg)](https://pkg.go.dev/github.com/Harvey-AU/hover)\n[![Go Version](https://img.shields.io/badge/go-1.26.1-blue.svg)](https://golang.org/)\n[![License](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT)\n[![Maintenance](https://img.shields.io/badge/Maintained%3F-yes-green.svg)](https://github.com/Harvey-AU/hover/graphs/commit-activity)\n\nA comprehensive website health and performance tool that monitors site health,\ndetects broken links, identifies slow pages, and warms cache for optimal\nperformance after publishing. Integrates seamlessly with Webflow via OAuth with\nautomated scheduling and webhook-triggered crawls.\n\nKeep your site fast and healthy with continuous monitoring and intelligent cache\nwarming.\n\nBuilt by the Good Native team in Castlemaine, Victoria, Australia.\n\n## Key Features\n\n### Site Health Monitoring\n\n- 🔍 Broken link detection across your entire site\n- 🚨 Identify 404s, timeouts, and redirect chains\n- 🐌 Detect slow-loading pages and performance bottlenecks\n- 📈 Track broken links and performance over time\n- ⚡ Lightning fast speed, without being blocked or spamming your site\n\n### Cache Warming\n\n- 🔥 Smart warming with automatic retry on cache MISS\n- 🥇 Priority processing - homepage and critical pages first\n- ⚡ Improved initial page load times after publishing\n- 🤖 Robots.txt compliance with crawl-delay honouring\n\n### Automation \u0026 Integration\n\n- 🔄 Scheduled crawls (6/12/24/48 hour intervals) per site\n- 🚀 Webflow OAuth integration with auto-crawl on publish webhooks\n- 📊 Real-time dashboard with live job progress via WebSockets\n- 🔔 Slack notifications via DMs when jobs complete or fail\n- 🔐 Multi-organisation support with Supabase Auth and RLS\n- 🔌 RESTful API for platform integrations\n- 🏷️ Technology detection (CMS, CDN, frameworks)\n\n## Quick Start\n\n```bash\n# Clone the repository\ngit clone https://github.com/Harvey-AU/hover.git hover\ncd hover\n\n# Set up tracked Git hooks once per clone\n# Future worktrees inherit this shared hooks path automatically\nbash scripts/setup-hooks.sh\n\n# Start development environment\n# Windows:\ndev              # Clean output (info level)\ndev debug        # Verbose output (debug level)\n\n# Mac/Linux:\n./dev.sh         # Clean output (info level)\n./dev.sh debug      # Verbose output (debug level)\n```\n\nOne command starts everything:\n\n- ✅ Checks prerequisites (Docker + Supabase CLI)\n- 🐳 Starts local Supabase database\n- 🔄 Auto-applies migrations\n- 📝 Generates `.env.local` on first run (from `supabase status`)\n- 🔥 Hot reloading on port 8847\n- 📊 Displays helpful URLs for homepage, dashboard, and Supabase Studio\n- 🚀 Completely isolated from production\n- 🔇 Clean logging by default, verbose mode available\n\n**Then log in:** navigate to `http://localhost:8847/dev/auto-login` — signs you\nin as the dev seed user instantly, no OAuth flow needed. See\n[Local Authentication](docs/development/DEVELOPMENT.md#local-authentication) for\ndetails.\n\n`.env.local` is generated automatically by `dev.sh` — do not commit it.\n\n## Status\n\n**~65% Complete** - Stage 4 of 7 (Core Authentication \u0026 MVP Interface)\n\n**Recent milestones:**\n\n- ✅ Webflow OAuth integration with per-site scheduling and webhooks (v0.23.0)\n- ✅ Slack notifications and real-time dashboard updates (v0.20.x)\n- ✅ Multi-organisation support with context switching (v0.19.0)\n- ✅ Security and compliance testing with CI/CD (Go Report Card: A)\n\n**In progress:** Google Analytics integration, payment infrastructure, platform\nSDK\n\nSee [Roadmap.md](./Roadmap.md) for detailed progress tracking.\n\n## Tech Stack\n\n- **Backend**: Go 1.26 with PostgreSQL (Supabase)\n- **Frontend**: Vanilla JavaScript with data-binding (no build process)\n- **Infrastructure**: Fly.io (app + DB), Cloudflare CDN, Supabase (auth +\n  realtime)\n- **Monitoring**: Sentry (errors), Grafana Cloud (traces), Codecov (coverage)\n\n## Documentation\n\n- [Getting Started](docs/development/DEVELOPMENT.md)\n- [OpenCode Desktop Setup](docs/development/OPENCODE_DESKTOP.md)\n- [API Reference](docs/architecture/API.md)\n- [Architecture Overview](docs/architecture/ARCHITECTURE.md)\n- [Supabase Realtime](docs/development/SUPABASE-REALTIME.md)\n- [Observability \u0026 Tracing](docs/operations/OBSERVABILITY.md)\n- [All Documentation →](docs/)\n\n## Support\n\n- [Report Issues](https://github.com/Harvey-AU/hover/issues)\n- [Security Policy](SECURITY.md)\n- Email: \u003chello@teamharvey.co\u003e\n\n## License\n\nMIT - See [LICENSE](LICENSE)\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fharvey-au%2Fhover","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fharvey-au%2Fhover","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fharvey-au%2Fhover/lists"}