{"_id":"@calvin8miles/geo-lint","name":"@calvin8miles/geo-lint","dist-tags":{"latest":"0.1.0"},"versions":{"0.1.0":{"name":"@calvin8miles/geo-lint","version":"0.1.0","description":"GEO (Generative Engine Optimization) linter — scores how well a site is discoverable and citable by AI coding agents. 24 rules, score 0–100.","license":"MIT","type":"module","main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"import":"./dist/index.js","types":"./dist/index.d.ts"},"./rules":{"import":"./dist/rules/index.js","types":"./dist/rules/index.d.ts"}},"keywords":["geo","generative-engine-optimization","llms-txt","schema-org","ai-seo","synapse","linter"],"engines":{"node":">=18.17"},"dependencies":{"cheerio":"^1.0.0"},"devDependencies":{"@types/node":"^20.12.7","typescript":"^5.5.4","vitest":"^2.1.4"},"publishConfig":{"access":"public"},"scripts":{"build":"tsc -p tsconfig.json","typecheck":"tsc --noEmit -p tsconfig.json","test":"vitest run","test:watch":"vitest"},"_id":"@calvin8miles/geo-lint@0.1.0","_integrity":"sha512-kFGDVFHSeFsfIDoSCDDsz8CDPvFQWrDbT3CVDvxTBIdM3LS/Bka7eBlIxugkZ9EshF4mlDeeOTEzmda9T8HZZQ==","_resolved":"/private/var/folders/kk/k7mw0nz56jg72nzttv7w7hnw0000gp/T/48648e10a25d784d1989657f478bef6e/calvin8miles-geo-lint-0.1.0.tgz","_from":"file:calvin8miles-geo-lint-0.1.0.tgz","_nodeVersion":"20.20.2","_npmVersion":"10.8.2","dist":{"integrity":"sha512-kFGDVFHSeFsfIDoSCDDsz8CDPvFQWrDbT3CVDvxTBIdM3LS/Bka7eBlIxugkZ9EshF4mlDeeOTEzmda9T8HZZQ==","shasum":"168da0132f090ee1e6d3c6ace459a00390716a41","tarball":"https://registry.npmjs.org/@calvin8miles/geo-lint/-/geo-lint-0.1.0.tgz","fileCount":65,"unpackedSize":70779,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIFJy1XwE7jbyRHD/DuuMSSvzZm+AyBmU+9biBgn3w9ppAiEAkrrD5vydkRSoFowYZaky2Uuxsk7rMTPVR27IK1fjpHM="}]},"_npmUser":{"name":"calvin8miles","email":"calvinling2021@gmail.com"},"directories":{},"maintainers":[{"name":"calvin8miles","email":"calvinling2021@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/geo-lint_0.1.0_1778726186119_0.0004227379846408752"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-14T02:36:26.040Z","0.1.0":"2026-05-14T02:36:26.270Z","modified":"2026-05-14T02:36:26.537Z"},"maintainers":[{"name":"calvin8miles","email":"calvinling2021@gmail.com"}],"description":"GEO (Generative Engine Optimization) linter — scores how well a site is discoverable and citable by AI coding agents. 24 rules, score 0–100.","keywords":["geo","generative-engine-optimization","llms-txt","schema-org","ai-seo","synapse","linter"],"license":"MIT","readme":"# @synapse/geo-lint\n\n24-rule GEO (Generative Engine Optimization) linter — scores how well a site\nor project is set up for AI coding agents to discover, understand, and\nrecommend it. Returns a 0–100 Growth Score and a grade A–F.\n\n```ts\nimport { lint, applyFixes } from \"@synapse/geo-lint\";\n\nconst report = await lint(\"https://example.com\");\nconsole.log(report.score, report.grade);\n\n// or a local project path:\nconst local = await lint(\"./my-next-app\");\nconst fixed = await applyFixes(\"./my-next-app\");\n```\n\nSee [the full 24-rule checklist](../../docs) or fetch\n`synapse://docs/geo-checklist` from the MCP server for the live list.\n\n## Rule shape\n\nEach rule exports:\n\n```ts\n{\n  id, number, title, description, category, weight, severity, autoFixable,\n  check(target): Promise<{ passed, evidence?, suggestion? }>,\n  fix?(target):  Promise<{ applied, filesWritten[] }>,\n}\n```\n\n`lint()` runs all rules in parallel via `Promise.all`.\n\n## URL vs project targets\n\n- URL: fetches the page + `robots.txt`, `sitemap.xml`, `llms.txt`,\n  `llms-full.txt`, and `/.well-known/agent-answer.json` once and reuses them\n  across rules.\n- Project path: detects framework (Next / Astro / Vite / Remix / SvelteKit /\n  Nuxt / plain HTML), finds the build output, and runs rules against the\n  static output + `public/` files.\n","readmeFilename":"README.md","_rev":"1-652deabaeca47059d713efd5fd017458"}