{"_id":"@bilkobibitkov/page-roast","name":"@bilkobibitkov/page-roast","dist-tags":{"latest":"0.1.0"},"versions":{"0.1.0":{"name":"@bilkobibitkov/page-roast","version":"0.1.0","description":"Brutally honest landing-page CRO audits — bring your own Gemini key. npx page-roast <url>","type":"module","main":"./dist/index.cjs","module":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"bin":{"page-roast":"bin/page-roast.js"},"scripts":{"build":"tsup","test":"vitest run","typecheck":"tsc --noEmit","prepublishOnly":"pnpm run build && pnpm run test"},"engines":{"node":">=18.0.0"},"dependencies":{"@bilkobibitkov/ai-tool-kit":"link:../AI-Tool-Kit","picocolors":"^1.1.0"},"devDependencies":{"@types/node":"^22.0.0","tsup":"^8.0.0","typescript":"^5.5.0","vitest":"^3.0.0"},"publishConfig":{"access":"public","provenance":true},"license":"MIT","author":{"name":"Stanislav Bibitkov"},"repository":{"type":"git","url":"git+https://github.com/StanislavBG/page-roast.git"},"homepage":"https://github.com/StanislavBG/page-roast#readme","bugs":{"url":"https://github.com/StanislavBG/page-roast/issues"},"keywords":["bilko","cro","landing-page","audit","gemini","byok","cli"],"_id":"@bilkobibitkov/page-roast@0.1.0","gitHead":"2e9ad489f148771c313af370472f76c2e784dfef","_nodeVersion":"22.22.1","_npmVersion":"10.9.4","dist":{"integrity":"sha512-kYARZKEA8TsbkgRcRi6EWJB0HQ7NpwlviqRsLaMpw5W468iZV+RsGE4kBdFOZOjx+5s68c2fED+WTAzBQQK+EA==","shasum":"bd23b428be1a3c87c964dafa9c658a23ddbfec2f","tarball":"https://registry.npmjs.org/@bilkobibitkov/page-roast/-/page-roast-0.1.0.tgz","fileCount":13,"unpackedSize":130638,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCID7LLpx2J4IckwR/0jSvxS3DbBOaBBwukn9YeA1nQmCJAiEAuLInJCY9yyin3HTa3XP2FTrd14wT+dnfOW5m7NuaS4s="}]},"_npmUser":{"name":"bilkobibitkov","email":"BilkoBibitkov2000@gmail.com"},"directories":{},"maintainers":[{"name":"bilkobibitkov","email":"BilkoBibitkov2000@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/page-roast_0.1.0_1778397701794_0.3320921506870711"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-10T07:21:41.635Z","0.1.0":"2026-05-10T07:21:41.948Z","modified":"2026-05-10T07:21:42.212Z"},"maintainers":[{"name":"bilkobibitkov","email":"BilkoBibitkov2000@gmail.com"}],"description":"Brutally honest landing-page CRO audits — bring your own Gemini key. npx page-roast <url>","homepage":"https://github.com/StanislavBG/page-roast#readme","keywords":["bilko","cro","landing-page","audit","gemini","byok","cli"],"repository":{"type":"git","url":"git+https://github.com/StanislavBG/page-roast.git"},"author":{"name":"Stanislav Bibitkov"},"bugs":{"url":"https://github.com/StanislavBG/page-roast/issues"},"license":"MIT","readme":"# page-roast\n\n> Brutally honest landing-page CRO audits — bring your own Gemini key.\n\n[![license](https://img.shields.io/npm/l/@bilkobibitkov/page-roast.svg)](./LICENSE)\n\n## Quick start\n\n```bash\n# Set your key once\nexport GEMINI_API_KEY=your_key_here\n\n# Score a page\nnpx @bilkobibitkov/page-roast https://yoursite.com\n\n# Roast mode — savage summary only\nnpx @bilkobibitkov/page-roast https://yoursite.com --mode=roast\n\n# A/B compare two pages\nnpx @bilkobibitkov/page-roast https://a.com --mode=compare --compare-with=https://b.com\n\n# JSON output for piping\nnpx @bilkobibitkov/page-roast https://yoursite.com --json | jq .scores\n```\n\n## Programmatic use\n\n```ts\nimport { roastPage } from '@bilkobibitkov/page-roast';\n\nconst result = await roastPage({\n  url: 'https://yoursite.com',\n  apiKey: process.env.GEMINI_API_KEY!,\n  mode: 'score',  // 'score' | 'compare' | 'roast'\n});\n\nconsole.log(result.scores?.total_score);   // 72\nconsole.log(result.scores?.grade);         // \"B\"\nconsole.log(result.roastLines);            // [roast, fix1, fix2, fix3, edge]\n```\n\n## CLI flags\n\n| Flag | Default | Notes |\n|---|---|---|\n| `--gemini-key=<key>` | env | Overrides env vars |\n| `--mode=score\\|compare\\|roast` | `score` | Audit mode |\n| `--compare-with=<url2>` | — | Required for `--mode=compare` |\n| `--json` | false | Machine-readable output |\n| `--no-color` | false | Disable color |\n| `--quiet` | false | Suppress progress messages |\n| `--help` | — | Show usage |\n\n## BYOK env vars\n\nChecked in this order:\n\n| Var | Notes |\n|---|---|\n| `BILKO_PAGE_ROAST_API_KEY` | Most specific — use to scope a key to this tool |\n| `GEMINI_API_KEY` | Standard Google AI Studio key |\n| `GOOGLE_API_KEY` | Fallback |\n| `--gemini-key=<key>` | CLI flag overrides all env vars |\n\n## Scoring system\n\n100 points across 4 sections (25 each):\n\n- **Hero Section** — headline clarity, subheadline, CTA visibility, visual hierarchy\n- **Social Proof** — testimonials, trust logos, quantified proof, risk reversal\n- **Clarity & Persuasion** — 5-second test, benefits over features, readability, objection handling\n- **Conversion Architecture** — CTA frequency, friction reduction, urgency/scarcity, page speed signals\n\nGrade scale: A+ (90–100) → F (0–39)\n\n## Security\n\nThe page fetcher has SSRF protection: blocks `localhost`, all private IPv4 ranges (`10.x`, `172.16–31.x`, `192.168.x`, `169.254.x`), IPv6 loopback, and performs DNS rebinding checks before connecting.\n\n## Changelog\n\nSee [CHANGELOG.md](./CHANGELOG.md).\n\n## License\n\nMIT — see [LICENSE](./LICENSE).\n\n---\n\nBuilt by [Bilko](https://bilko.run). Free, ad-free, no signup.\n[Repo](https://github.com/StanislavBG/page-roast) · [Issues](https://github.com/StanislavBG/page-roast/issues)\n","readmeFilename":"README.md","_rev":"1-3986f4b5f6130654a0a01abd4222a5fd"}