Thanks for your interest in contributing! Here's how you can help.
The most impactful contribution is adding support for new directory sites.
cp src/sites/600tools.js src/sites/your-site.jsEach adapter exports an object with:
export default {
name: 'site-name.com', // Display name
url: 'https://site.com/submit', // Submit page URL
auth: 'none' | 'email', // Authentication requirement
captcha: 'none' | 'color', // CAPTCHA type (if any)
pricing: 'free' | 'paid', // Is submission free?
async submit(product, config) {
// product: { name, url, description, long_description, email, categories, pricing }
// config: loaded from config.yaml
// Return: { success: boolean, site: string, reason?: string }
}
};# Scout the site first to understand its form
node src/cli.js scout https://site.com/submit
# Test submission with your own product
node src/cli.js submit your-site- One site per PR (easier to review)
- Include the site's DA/DR if known
- Note if it's free or paid
- Note review time if known
The scout (src/scout/discover.js) auto-discovers submit forms. If a site uses unusual form patterns, improve the detection logic.
- Pure ESM (no CommonJS)
- Node.js 18+
- No TypeScript (keep it simple)
- Use
delay()andhumanType()frombrowser.jsfor human-like interaction
- Include the site URL you were trying to submit to
- Include any error messages
- Note if the site has CAPTCHA, login walls, or Cloudflare protection
By contributing, you agree that your contributions will be licensed under the MIT License.