AgriciDaniel/claude-seo
View on GitHub ↗
Unique within the repo — the other 23% repeats across its own files.
Unique across all public code — a further 20% is its own but appears in other public repos too.
Tidy, but not new — the code doesn't repeat itself, yet a large share already exists across other public repos. A strong candidate for pulling from (or publishing as) a shared package.
Worth consolidating — in the code
Real, actionable duplication in this repo's source, most concrete first.
Top duplication hotspots
| Similarity | Overlap | File A | File B | Cross-repo |
|---|---|---|---|---|
| 29% | 399 | AgriciDaniel/claude-seo/extensions/banana/scripts/cost_tracker.py |
AgriciDaniel/claude-seo/scripts/dataforseo_costs.py |
same repo |
| 16% | 381 | AgriciDaniel/claude-seo/scripts/backlinks_auth.py |
AgriciDaniel/claude-seo/scripts/google_auth.py |
same repo |
| 59% | 301 | AgriciDaniel/claude-seo/extensions/dataforseo/install.sh |
AgriciDaniel/claude-seo/extensions/firecrawl/install.sh |
same repo |
| 53% | 288 | AgriciDaniel/claude-seo/extensions/banana/install.sh |
AgriciDaniel/claude-seo/extensions/firecrawl/install.sh |
same repo |
| 45% | 287 | AgriciDaniel/claude-seo/extensions/banana/install.sh |
AgriciDaniel/claude-seo/extensions/dataforseo/install.sh |
same repo |
| 61% | 284 | AgriciDaniel/claude-seo/extensions/banana/scripts/edit.py |
AgriciDaniel/claude-seo/extensions/banana/scripts/generate.py |
same repo |
| 20% | 281 | AgriciDaniel/claude-seo/scripts/crux_history.py |
AgriciDaniel/claude-seo/scripts/pagespeed_check.py |
same repo |
| 54% | 276 | AgriciDaniel/claude-seo/extensions/dataforseo/install.ps1 |
AgriciDaniel/claude-seo/extensions/firecrawl/install.ps1 |
same repo |
| 6% | 232 | AgriciDaniel/claude-seo/scripts/url_safety.py |
AgriciDaniel/claude-seo/tests/test_url_safety.py |
same repo |
| 34% | 226 | AgriciDaniel/claude-seo/tests/test_banana_cost_tracker.py |
AgriciDaniel/claude-seo/tests/test_dataforseo_costs.py |
same repo |
| 25% | 216 | AgriciDaniel/claude-seo/scripts/gsc_inspect.py |
AgriciDaniel/claude-seo/scripts/indexing_notify.py |
same repo |
Duplicate declarations
The same function, variable, class, or type name declared in more than one file — a fast copy-paste signal. Consider extracting a shared definition.
| Files | Declaration | Where |
|---|---|---|
| 5 | fn _cli |
AgriciDaniel/claude-seo/scripts/agent_ux_check.pyAgriciDaniel/claude-seo/scripts/iptc_ai_label.pyAgriciDaniel/claude-seo/scripts/render_page.py+2 more |
| 5 | fn _run |
AgriciDaniel/claude-seo/tests/test_banana_cost_tracker.pyAgriciDaniel/claude-seo/tests/test_dataforseo_costs.pyAgriciDaniel/claude-seo/tests/test_gsc_pagination.py+2 more |
| 5 | fn json |
AgriciDaniel/claude-seo/tests/test_google_api_key_safety.pyAgriciDaniel/claude-seo/tests/test_keywordseverywhere_api.pyAgriciDaniel/claude-seo/tests/test_moz_api.py+2 more |
| 4 | fn analyse |
AgriciDaniel/claude-seo/scripts/content_quality.pyAgriciDaniel/claude-seo/scripts/lcp_subparts.pyAgriciDaniel/claude-seo/scripts/metadata_template.py+1 more |
| 4 | class FakeResponse |
AgriciDaniel/claude-seo/tests/test_fetch_page_decoding.pyAgriciDaniel/claude-seo/tests/test_keywordseverywhere_api.pyAgriciDaniel/claude-seo/tests/test_moz_api.py+1 more |
| 3 | fn _configure_utf8 |
AgriciDaniel/claude-seo/hooks/validate-schema.pyAgriciDaniel/claude-seo/scripts/content_quality.pyAgriciDaniel/claude-seo/scripts/runtime.py |
| 3 | fn _sha256 |
AgriciDaniel/claude-seo/scripts/release_sign.pyAgriciDaniel/claude-seo/scripts/sync_flow.pyAgriciDaniel/claude-seo/scripts/verify_release.py |
| 3 | fn _text |
AgriciDaniel/claude-seo/tests/test_agent_mcp_permissions.pyAgriciDaniel/claude-seo/tests/test_banana_install_layout.pyAgriciDaniel/claude-seo/tests/test_manual_install_layout.py |
| 3 | fn drop_query_key |
AgriciDaniel/claude-seo/extensions/banana/scripts/edit.pyAgriciDaniel/claude-seo/extensions/banana/scripts/generate.pyAgriciDaniel/claude-seo/scripts/google_auth.py |
| 3 | fn execute |
AgriciDaniel/claude-seo/tests/test_gsc_pagination.pyAgriciDaniel/claude-seo/tests/test_gsc_query.pyAgriciDaniel/claude-seo/tests/test_gsc_totals_aggregate.py |
| 3 | fn fake_post |
AgriciDaniel/claude-seo/tests/test_google_api_key_safety.pyAgriciDaniel/claude-seo/tests/test_moz_api.pyAgriciDaniel/claude-seo/tests/test_nlp_analyze.py |
| 3 | fn normalize_url |
AgriciDaniel/claude-seo/scripts/analyze_visual.pyAgriciDaniel/claude-seo/scripts/capture_screenshot.pyAgriciDaniel/claude-seo/scripts/drift_baseline.py |
| 3 | fn raise_for_status |
AgriciDaniel/claude-seo/tests/test_google_api_key_safety.pyAgriciDaniel/claude-seo/tests/test_nlp_analyze.pyAgriciDaniel/claude-seo/tests/test_pagespeed_null_category_score.py |
| 2 | class _Exec |
AgriciDaniel/claude-seo/tests/test_gsc_pagination.pyAgriciDaniel/claude-seo/tests/test_gsc_totals_aggregate.py |
| 2 | fn _ledger_snapshot |
AgriciDaniel/claude-seo/extensions/banana/scripts/cost_tracker.pyAgriciDaniel/claude-seo/scripts/dataforseo_costs.py |
| 2 | fn _load_module |
AgriciDaniel/claude-seo/tests/test_banana_api_key_safety.pyAgriciDaniel/claude-seo/tests/test_banana_setup_mcp_atomic_write.py |
| 2 | fn _lock |
AgriciDaniel/claude-seo/extensions/banana/scripts/cost_tracker.pyAgriciDaniel/claude-seo/scripts/dataforseo_costs.py |
| 2 | fn _locked_ledger |
AgriciDaniel/claude-seo/extensions/banana/scripts/cost_tracker.pyAgriciDaniel/claude-seo/scripts/dataforseo_costs.py |
| 2 | fn _non_negative_int |
AgriciDaniel/claude-seo/scripts/fetch_page.pyAgriciDaniel/claude-seo/scripts/render_page.py |
| 2 | fn _normalize_availability |
AgriciDaniel/claude-seo/scripts/dataforseo_merchant.pyAgriciDaniel/claude-seo/scripts/dataforseo_normalize.py |
| 2 | fn _normalize_price |
AgriciDaniel/claude-seo/scripts/dataforseo_merchant.pyAgriciDaniel/claude-seo/scripts/dataforseo_normalize.py |
| 2 | fn _percentile |
AgriciDaniel/claude-seo/scripts/dataforseo_normalize.pyAgriciDaniel/claude-seo/scripts/lcp_subparts.py |
| 2 | fn _rate_limit |
AgriciDaniel/claude-seo/scripts/bing_webmaster.pyAgriciDaniel/claude-seo/scripts/moz_api.py |
| 2 | fn _read_ledger |
AgriciDaniel/claude-seo/extensions/banana/scripts/cost_tracker.pyAgriciDaniel/claude-seo/scripts/dataforseo_costs.py |
| 2 | fn _redact_google_api_key |
AgriciDaniel/claude-seo/extensions/banana/scripts/edit.pyAgriciDaniel/claude-seo/extensions/banana/scripts/generate.py |
Docs & prose
Near-identical documentation — often translations (e.g. README.md ⇄ README_zh-CN.md) or mirrored guides. Usually intentional, not cleanup — listed separately so it doesn't inflate the code signal above.
Top duplication hotspots
| Similarity | Overlap | File A | File B | Cross-repo |
|---|---|---|---|---|
| 99% | 2122 | AgriciDaniel/claude-seo/extensions/banana/references/prompt-engineering.md |
AgriciDaniel/claude-seo/skills/seo-image-gen/references/prompt-engineering.md |
same repo |
| 97% | 1261 | AgriciDaniel/claude-seo/extensions/dataforseo/skills/seo-dataforseo/SKILL.md |
AgriciDaniel/claude-seo/skills/seo-dataforseo/SKILL.md |
same repo |
| 81% | 649 | AgriciDaniel/claude-seo/extensions/banana/skills/seo-image-gen/SKILL.md |
AgriciDaniel/claude-seo/skills/seo-image-gen/SKILL.md |
same repo |
| 5% | 581 | AgriciDaniel/claude-seo/CHANGELOG.md |
AgriciDaniel/claude-seo/README.md |
same repo |
| 100% | 430 | AgriciDaniel/claude-seo/extensions/banana/references/post-processing.md |
AgriciDaniel/claude-seo/skills/seo-image-gen/references/post-processing.md |
same repo |
| 60% | 423 | AgriciDaniel/claude-seo/extensions/banana/references/gemini-models.md |
AgriciDaniel/claude-seo/skills/seo-image-gen/references/gemini-models.md |
same repo |
| 7% | 394 | AgriciDaniel/claude-seo/README.md |
AgriciDaniel/claude-seo/docs/COMMANDS.md |
same repo |
| 4% | 358 | AgriciDaniel/claude-seo/CHANGELOG.md |
AgriciDaniel/claude-seo/CLAUDE.md |
same repo |
| 7% | 349 | AgriciDaniel/claude-seo/CLAUDE.md |
AgriciDaniel/claude-seo/README.md |
same repo |
| 4% | 342 | AgriciDaniel/claude-seo/CHANGELOG.md |
AgriciDaniel/claude-seo/docs/MIGRATION-v1-to-v2.md |
same repo |
| 7% | 336 | AgriciDaniel/claude-seo/README.md |
AgriciDaniel/claude-seo/skills/seo/SKILL.md |
same repo |
| 9% | 290 | AgriciDaniel/claude-seo/CLAUDE.md |
AgriciDaniel/claude-seo/docs/COMMANDS.md |
same repo |
| 3% | 288 | AgriciDaniel/claude-seo/CHANGELOG.md |
AgriciDaniel/claude-seo/skills/seo/SKILL.md |
same repo |
| 9% | 268 | AgriciDaniel/claude-seo/docs/COMMANDS.md |
AgriciDaniel/claude-seo/skills/seo/SKILL.md |
same repo |
| 87% | 266 | AgriciDaniel/claude-seo/extensions/banana/references/mcp-tools.md |
AgriciDaniel/claude-seo/skills/seo-image-gen/references/mcp-tools.md |
same repo |
| 87% | 262 | AgriciDaniel/claude-seo/extensions/banana/references/seo-image-presets.md |
AgriciDaniel/claude-seo/skills/seo-image-gen/references/seo-image-presets.md |
same repo |
| 9% | 260 | AgriciDaniel/claude-seo/CLAUDE.md |
AgriciDaniel/claude-seo/skills/seo/SKILL.md |
same repo |
| 100% | 250 | AgriciDaniel/claude-seo/agents/seo-dataforseo.md |
AgriciDaniel/claude-seo/extensions/dataforseo/agents/seo-dataforseo.md |
same repo |
| 100% | 241 | AgriciDaniel/claude-seo/agents/seo-image-gen.md |
AgriciDaniel/claude-seo/extensions/banana/agents/seo-image-gen.md |
same repo |
| 2% | 232 | AgriciDaniel/claude-seo/CHANGELOG.md |
AgriciDaniel/claude-seo/docs/COMMANDS.md |
same repo |
Largest files
Largest files
| LOC | File | Status |
|---|---|---|
| 1219 | AgriciDaniel/claude-seo/CHANGELOG.md | indexed |
| 1136 | AgriciDaniel/claude-seo/tests/test_url_safety.py | indexed |
| 996 | AgriciDaniel/claude-seo/scripts/url_safety.py | indexed |
| 904 | AgriciDaniel/claude-seo/scripts/google_auth.py | indexed |
| 748 | AgriciDaniel/claude-seo/docs/COMMANDS.md | indexed |
| 748 | AgriciDaniel/claude-seo/scripts/render_page.py | indexed |
| 665 | AgriciDaniel/claude-seo/scripts/pagespeed_check.py | indexed |
| 661 | AgriciDaniel/claude-seo/tests/test_render_page.py | indexed |
| 611 | AgriciDaniel/claude-seo/scripts/bing_webmaster.py | indexed |
| 609 | AgriciDaniel/claude-seo/scripts/backlinks_auth.py | indexed |