Backlink kit
Manual-only backlink footer and directory submission workflow for any web product repo. Use only when the user explicitly invokes `backlink-kit` or `$backlink-kit`; do not use implicitly for generic SEO, backlink, footer, directory, or submission tasks.From its SKILL.md
npx -y skills add Leonewu/backlink-kit --skill backlink-kitAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
13.4 KB, ~3.3k tokens by cl100k_base, as published. Nobody here has run it
Backlink Kit
Purpose
Use this skill from inside a web product project to:
- infer product submission facts from the repo;
- merge and maintain a footer backlink carousel without losing existing external badges;
- generate directory submission Markdown and a local copy-friendly HTML page;
- update directory hrefs after submissions are approved.
This is manual-only. If the user did not explicitly say backlink-kit or $backlink-kit, do not use this skill.
If the user only asks for submission materials, listing URLs, or backlink research, do not create new visible site UI.
Product Discovery
Run from the project root when possible.
- Read repo instructions first (
AGENTS.md,CLAUDE.md, or equivalent). - Infer product facts from existing source before asking:
- product name: SEO constants, metadata helpers, app config, landing page H1, package name, README;
- canonical URL/domain: SEO constants, sitemap/robots, env examples, deployment config, README;
- tagline/short copy: landing page hero, metadata descriptions, README;
- logo/screenshot: favicon, app icon, OG image, landing image;
- support email: SEO constants, footer, contact page, env examples;
- key features: landing page sections, pricing/features pages, README.
- If product name or website URL cannot be confidently inferred, ask the user before generating materials or directory URLs.
- For generated copy, always include a long description with a
Key features include:section and bullet list.
Existing Backlink Merge Rules
Do not overwrite or drop existing footer links.
Before editing, search the repo for current backlink/footer data:
rg -n "Featured on|Listed on|footerBacklinks|backlink|badge|turbo0|findly|showmebest|newtool|startupfa|toolfame|openhunts|agenthunter|acidtools|productwing|fazier|unitelist|producthunt|uneed|peerlist|peerpush|launchigniter|twelve\.tools|wired\.business" .
Then:
- Preserve all existing external badges and custom links unless the user explicitly asks to remove them.
- Dedupe by directory identity, not by exact URL. For example
turbo0.com/andturbo0.com/item/product-slugare the same directory entry. - If a known directory entry already exists, update only the
href/target when needed; preserve a working badge URL, label, and custom styling. - If the project already has unrelated partner/outbound badges, keep them in the same managed list or a clearly named extra list.
- Never replace a user-supplied approved listing URL with a guessed one.
- Verify any new dark badge URL returns an actual image. If it returns HTML, 404, or a broken image, use the known original badge or a text fallback.
- If no existing footer, backlink strip, featured-on section, or partner badge area exists, ask before creating a new visible footer carousel. A new carousel changes public UI and needs explicit approval.
Footer Implementation Rules
Adapt to the project's framework and design system. Do not assume Next.js or a particular router.
Before creating a new visible footer carousel, summarize the proposed placement and ask for approval unless the user explicitly requested that new carousel. If an existing footer/backlink area exists, merge or update in place.
Recommended behavior:
- Show the backlink footer on public marketing/content pages.
- Hide it from app/workbench/auth/admin pages unless the project already exposes a global footer there.
- Render the list twice for infinite marquee: first group accessible, duplicate group
aria-hidden="true". - Set duplicate links
tabIndex={-1}. - Use
target="_blank"andrel="noopener noreferrer"for third-party directory links. - Default badges to muted/gray in dark themes; on hover/focus of the strip, restore true badge color.
- Pause animation on hover/focus.
- Respect
prefers-reduced-motionwith a static scrollable list. - Keep stable dimensions so slow remote badges cannot collapse the marquee.
Example data shape:
export type FooterBacklink = {
name: string;
label: string;
href: string;
badgeSrc?: string;
kind?: "badge" | "text";
};
Example image attributes:
<img src={badgeSrc} alt={label} loading="eager" decoding="async" fetchPriority="low" />
Directory URL Rules
Generate these as candidate URLs from product name and website domain, but warn the user to verify them after submission. Some directories create opaque IDs that cannot be inferred.
Definitions:
productSlug: lowercase product name in kebab-case, for exampleBetter Dating Photos->better-dating-photos.domain: canonical host without protocol orwww, for examplebetterdatingphotos.com.domainStem: domain without TLD and dots, for examplebetterdatingphotos.com->betterdatingphotos.productHuntPostId,peerlistHandle,peerlistProjectId, andlaunchRank: platform-assigned values that cannot be inferred safely. Reuse them only when found in an existing approved link or platform-provided embed snippet.
| Directory | Candidate target rule | Badge | Notes |
|---|---|---|---|
| Turbo0 | https://turbo0.com/item/{productSlug} | https://img.turbo0.com/badge-listed-dark.svg | Product page, not homepage |
| Findly.tools | https://findly.tools/{productSlug}?utm_source={productSlug} | https://findly.tools/badges/findly-tools-badge-dark.svg | Product page |
| yo.directory | https://yo.directory/ | https://cdn.prod.website-files.com/65c1546fa73ea974db789e3d/65e1e171f89ebfa7bd0129ac_yodirectory-featured.png | Use homepage until listing URL is known |
| ShowMeBestAI | https://showmebest.ai | https://showmebest.ai/badge/feature-badge-dark.webp | No trailing slash |
| NewTool.site | https://newtool.site/item/{productSlug} | https://newtool.site/badges/newtool-dark.svg | Product page |
| Startup Fame | https://startupfa.me/s/{domain}?utm_source={domain} | https://startupfa.me/badges/featured/dark.webp | May require opaque suffix such as -546; verify approved URL |
| Dang.ai | https://dang.ai/ | https://assets.dang.ai/badges/dang-verified-dark.png | Use homepage until listing URL is known |
| Submit AI Tools | https://submitaitools.org/ | https://submitaitools.org/static_submitaitools/images/submitaitools.png | Use homepage until listing URL is known |
| ToolFame | https://toolfame.com/item/{productSlug} | https://toolfame.com/badge-dark.svg | Product page |
| AIDirs | https://aidirs.org/ | https://aidirs.org/badges/badge-listed-dark.svg | Use homepage until listing URL is known |
| DirOnix | https://dironix.com/ | https://dironix.com/bage.png | Original badge; tested dark variants have returned HTML |
| Acid Tools | https://acidtools.com/ai/{domainStem} | https://acidtools.com/assets/images/badge-dark.png | Uses compact domain stem, not product slug |
| Product Wing | https://productwing.com/product/{domainStem} | https://productwing.com/assets/images/badge-dark.png | Uses compact domain stem |
| Dofollow.Tools | https://dofollow.tools/ | https://dofollow.tools/badge/badge_dark.svg | Use homepage until listing URL is known |
| DeepLaunch.io | https://deeplaunch.io/ | https://deeplaunch.io/badge/badge_dark.svg | Use homepage until listing URL is known |
| Fazier | https://fazier.com/launches/{domain} | https://fazier.com/api/v1//public/badges/launch_badges.svg?badge_type=launched&theme=dark | Uses full domain |
| OpenHunts Club | https://openhunts.com | https://cdn.openhunts.com/badges/club.webp | Replaces AgentHunter, which may be unreachable |
| Days Launch | https://dayslaunch.com/ | https://dayslaunch.com/badages-awards.svg | Original badge; tested dark variants have returned HTML |
| Unite List | https://unitelist.com/product/{domainStem} | https://unitelist.com/assets/images/badge-dark.png | Uses compact domain stem |
| IndieAI Directory | https://indieai.directory/ | text fallback | Use text badge unless a real badge is provided |
| Product Hunt | https://www.producthunt.com/products/{productSlug} | https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id={productHuntPostId}&theme=dark | Post ID is opaque; copy the official embed snippet after launch |
| Uneed | https://www.uneed.best/tool/{productSlug} | https://www.uneed.best/EMBED1B.png | Product page; original badge may need browser verification if automated checks hit TLS errors |
| Peerlist | https://peerlist.io/{peerlistHandle}/project/{productSlug} | https://peerlist.io/api/v1/projects/embed/{peerlistProjectId}?showUpvote=true&theme=dark | Handle and project ID are platform-assigned; automated badge checks may receive 403 |
| PeerPush | https://peerpush.net/p/{productSlug} | https://peerpush.net/p/{productSlug}/badge.png | Product-specific badge |
| LaunchIgniter | https://www.launchigniter.com/product/{productSlug}?ref=badge-{productSlug} | https://launchigniter.com/api/winner-badge/{productSlug}?rank={launchRank}&theme=dark | Use the winner badge only when the platform provides a rank |
| Twelve Tools | https://twelve.tools | https://twelve.tools/badge0-dark.svg | Homepage target observed in a live featured-on footer |
| Wired Business | https://www.wired.business | https://wired.business/badge0-dark.svg | Homepage target observed in a live featured-on footer |
Verified Better Dating Photos examples:
- Turbo0:
https://turbo0.com/item/better-dating-photos - Findly.tools:
https://findly.tools/better-dating-photos?utm_source=better-dating-photos - ShowMeBestAI:
https://showmebest.ai - NewTool.site:
https://newtool.site/item/better-dating-photos - Startup Fame:
https://startupfa.me/s/betterdatingphotos.com-546?utm_source=betterdatingphotos.com - ToolFame:
https://toolfame.com/item/better-dating-photos - Acid Tools:
https://acidtools.com/ai/betterdatingphotos - Product Wing:
https://productwing.com/product/betterdatingphotos - Fazier:
https://fazier.com/launches/betterdatingphotos.com - Unite List:
https://unitelist.com/product/betterdatingphotos - OpenHunts Club:
https://openhunts.com
Verified AI Selfie Studio examples:
- Product Hunt:
https://www.producthunt.com/products/ai-selfie-studio - Uneed:
https://www.uneed.best/tool/ai-selfie-studio - Peerlist:
https://peerlist.io/raptis/project/ai-selfie-studio - PeerPush:
https://peerpush.net/p/ai-selfie-studio - LaunchIgniter:
https://www.launchigniter.com/product/ai-selfie-studio?ref=badge-ai-selfie-studio - Twelve Tools:
https://twelve.tools - Wired Business:
https://www.wired.business
Submission Materials
Create or update files under .backlink-kit/ in the current project root. Do not place generated submission materials in docs/ unless the user explicitly asks.
Default outputs:
.backlink-kit/backlink-submission-materials.md.backlink-kit/backlink-submission-materials.html
The HTML file should be directly openable from disk and display the same Markdown-oriented content with copy buttons. The long description copy control must support:
- Markdown mode, selected by default;
- plain text mode without bullet Markdown markers.
After generating or updating the HTML file, explain that it is a local copy desk for directory submissions. Provide the path, and in an interactive desktop or browser environment open it for the user to preview. If opening is not possible, provide a clickable path and the exact command to open it.
Use the bundled script when helpful. Resolve the script relative to this SKILL.md file in the installed skill directory; do not assume a Codex-specific or user-specific absolute path.
python3 /path/to/backlink-kit/scripts/generate_submission_materials.py \
--product-name "Product Name" \
--website-url "https://example.com" \
--primary-category "AI Tool" \
--secondary-categories "AI, Productivity, Web App" \
--support-email "[email protected]" \
--logo-url "https://example.com/icon.png" \
--screenshot-url "https://example.com/og.png" \
--tagline "Short benefit-oriented tagline." \
--one-line "One sentence explaining what the product does." \
--short-description "A concise directory description." \
--long-description "A polished product description paragraph." \
--problem "The problem this product solves." \
--target-users "The users this product is for." \
--feature "Feature one: concrete user-facing benefit." \
--feature "Feature two: concrete user-facing benefit." \
--pricing "Freemium, paid, or one-time pricing summary." \
--keywords "keyword one, keyword two, keyword three" \
--anchor-text "primary backlink anchor" \
--alternative-anchor-text "secondary backlink anchor" \
--output-dir .backlink-kit
Adjust the generated copy to the actual product. Do not leave generic placeholders.
Verification
After code changes:
- Run the repo's typecheck/lint/build commands where available.
- Browser-check at least one public page and one app/workbench page if footer visibility changed.
- Verify all badge images load or degrade gracefully.
- Verify duplicate visual track links are not keyboard-focusable.
- Verify generated HTML copy buttons work; for local
file://pages, use a clipboard fallback if browser permissions blocknavigator.clipboard.
External Side Effects
Do not submit third-party forms, upload assets, send contact information, or create external side effects unless the user explicitly authorizes the specific site/action.
What ships with it: 2 files
19.2 KB alongside SKILL.md, 1 of them executable
agents/
- openai.yaml309 B
scripts/
- generate_submission_materials.pyruns18.9 KB
Gives 0 of the 12 instructions most seo skills give in ~3.3k tokens
Counted across 454 of the 460 authors here whose files we hold, read 2026-08-07
- Implement structured data using JSON-LDin 29 of 454, across 25 files
- Write unique meta descriptions under 160 charactersin 25 of 454, across 20 files
- Verify one H1 exists per pagein 24 of 454, across 15 files
- Maintain a single H1 per pagein 24 of 454, across 15 files
- Use JSON-LD format for all schema markupin 23 of 454, across 16 files
- Use descriptive anchor text for internal linksin 22 of 454, across 18 files
- Add descriptive alt text to imagesin 19 of 454, across 15 files
- Read product marketing context before auditingin 19 of 454, across 11 files
- Write unique title tags under 60 charactersin 19 of 454, across 14 files
- Add unique title and meta description per pagein 19 of 454, across 17 files
- Fetch robots.txt and sitemap.xmlin 19 of 454, across 18 files
- Place the primary keyword in the first 100 wordsin 18 of 454, across 17 files
Said here and by no other author read
- Read repo instructions first
- Infer product facts from source before asking
- Ask before generating materials if facts are missing
- Include long description and key features list
- Preserve all existing external badges and links
- Dedupe directory entries by identity
Grouped from the skills themselves: near-identical wordings counted once, and counted by distinct author, so one author publishing three of these counts once. Length counted with cl100k_base; the agent that loads this file may tokenize it differently.