{"id":51417072,"url":"https://github.com/spy4x/offer-lens","last_synced_at":"2026-07-04T20:30:34.844Z","repository":{"id":369095239,"uuid":"1288270188","full_name":"spy4x/offer-lens","owner":"spy4x","description":"OfferLens — Media Buyer's AI Co-Pilot. Analyze any landing page in 3 seconds. Get angles, hooks, ad copy, email/SMS angles, and competitive intel. Chrome Extension + Web App + MCP Server. Built for It's Today Media Build Challenge 2026.","archived":false,"fork":false,"pushed_at":"2026-07-03T16:24:25.000Z","size":94,"stargazers_count":0,"open_issues_count":5,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-07-03T16:25:07.292Z","etag":null,"topics":["affiliate-marketing","ai-copilot","chrome-extension","deepseek","deno","hono","landing-page","landing-page-analysis","llm","marketing","mcp","mcp-server","media-buying","monorepo","preact"],"latest_commit_sha":null,"homepage":"https://offer-lens.antonshubin.com","language":"TypeScript","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/spy4x.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-07-03T12:39:09.000Z","updated_at":"2026-07-03T16:21:46.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/spy4x/offer-lens","commit_stats":null,"previous_names":["spy4x/offer-lens"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/spy4x/offer-lens","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/spy4x%2Foffer-lens","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/spy4x%2Foffer-lens/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/spy4x%2Foffer-lens/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/spy4x%2Foffer-lens/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/spy4x","download_url":"https://codeload.github.com/spy4x/offer-lens/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/spy4x%2Foffer-lens/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35135341,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-04T02:00:05.987Z","response_time":113,"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":["affiliate-marketing","ai-copilot","chrome-extension","deepseek","deno","hono","landing-page","landing-page-analysis","llm","marketing","mcp","mcp-server","media-buying","monorepo","preact"],"created_at":"2026-07-04T20:30:34.215Z","updated_at":"2026-07-04T20:30:34.837Z","avatar_url":"https://github.com/spy4x.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# OfferLens — Media Buyer's AI Co-Pilot\n\nLanding page analysis AI — angles, hooks, ad copy, email/SMS, competitive intel.\nSource: [github.com/spy4x/offer-lens](https://github.com/spy4x/offer-lens)\n\n## Access\n\n- **Web App**: `https://offer-lens.${DOMAIN}`\n- **MCP**: `http://hl-offerlens-mcp:3000/mcp` (internal, via OpenWebUI)\n\n## Build\n\nBefore first deploy, build Docker images from the offer-lens source:\n\n```bash\n# From homelab repo root\ndocker compose -f stacks/offerlens/compose.yml build\n```\n\nThe `build.context` in compose.yml references `../../../offer-lens` relative to the stack directory. Ensure the offer-lens repo is cloned at `~/sync/code/offer-lens`.\n\n## Stack\n\n3 services:\n\n| Service         | Image                     | Purpose                 |\n| --------------- | ------------------------- | ----------------------- |\n| `offerlens`     | `hl-offerlens:latest`     | API + Web UI, port 8000 |\n| `offerlens-mcp` | `hl-offerlens-mcp:latest` | MCP server, port 3000   |\n| `offerlens-db`  | `postgres:16-alpine`      | Usage tracking          |\n\n## Env Vars\n\n| Var                           | Required | Default                    | Description                     |\n| ----------------------------- | -------- | -------------------------- | ------------------------------- |\n| `OFFERLENS_DEMO_API_KEY`      | Yes      | —                          | DeepSeek API key for analysis   |\n| `OFFERLENS_API_BASE`          | No       | `https://api.deepseek.com` | OpenAI-compatible base URL      |\n| `OFFERLENS_MODEL`             | No       | `deepseek-chat`            | LLM model                       |\n| `OFFERLENS_BATCH_CONCURRENCY` | No       | `5`                        | Batch concurrency               |\n| `OFFERLENS_DB_NAME`           | No       | `offerlens`                | DB name                         |\n| `OFFERLENS_DB_USER`           | No       | `offerlens`                | DB user                         |\n| `OFFERLENS_DB_PASSWORD`       | Yes      | —                          | DB password                     |\n| `OFFERLENS_MCP_SESSION_ID`    | No       | `offerlens-mcp`            | MCP session ID (auto-generated) |\n\n## Monitoring\n\nNo Gatus endpoint yet (service has own auth). Add to gatus config on cloud server once route is stable.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fspy4x%2Foffer-lens","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fspy4x%2Foffer-lens","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fspy4x%2Foffer-lens/lists"}