How to Submit a Tool to FckSignups: The Complete Technical Workflow

Submit a tool to FckSignups by clicking the "Submit a tool" button on the site, which sends your tool details to a Cloudflare Worker that validates the input and creates a labeled GitHub issue for maintainer review.

FckSignups is an open-source directory that catalogs free, no-signup tools accessible directly in the browser. When you submit a tool to FckSignups, your entry flows through a structured pipeline from the React frontend through Cloudflare Workers to GitHub Issues, enabling maintainers to review and approve submissions efficiently.

How the Frontend Modal Captures Submission Data

The submission process begins in src/constants/ModalConfigs.tsx, which defines the "Submit a tool" modal interface. This component renders a form that captures six required fields: tool name, description, URL, tags, GitHub repository link, and category.

When you complete the form and click submit, the modal sends a POST request to the Cloudflare Worker endpoint at https://fcksignups-submit.abdullahalkafajy.workers.dev/submit-tool with the following JSON payload structure:

{
  "name": "Excalidraw",
  "description": "A virtual whiteboard for sketching diagrams.",
  "url": "https://excalidraw.com",
  "tags": ["drawing","whiteboard","collaboration"],
  "github": "https://github.com/excalidraw/excalidraw",
  "category": "design"
}

Cloudflare Worker Processing and Validation

The Cloudflare Worker defined in cloudflare-worker/worker.ts routes submission requests to handleSubmitTool in cloudflare-worker/urlHandlers/handleSubmitTool.ts. This handler performs critical validation before creating any repository issues.

Input Validation and Formatting

The handleSubmitTool function first parses the incoming JSON and validates required fields, ensuring URLs are well-formed and all mandatory data is present. This prevents malformed submissions from cluttering the repository's issue tracker.

After validation, the worker constructs a detailed GitHub issue body containing:

  • A markdown table displaying all submitted metadata
  • An XML-style <SUBMISSION> tag containing semicolon-delimited data for automation scripts

Creating the GitHub Issue

The worker authenticates with the GitHub API using a personal access token stored in environment variables (GITHUB_TOKEN), then creates an issue in the BraveOPotato/FckSignups repository. The issue receives the title [Tool Submission Request] {tool_name} and is automatically labeled tool-submission. If no GitHub repository link is provided, the worker adds an additional no-repo-link label.

// cloudflare-worker/urlHandlers/handleSubmitTool.ts
export async function handleSubmitTool(request: Request, env: Env, origin: string) {
  const sub = validate(await request.json());
  const issueBody = `## Tool Submission

| Field | Value |
|-------|-------|
| **Name** | ${sub.name} |
| **Description** | ${sub.description} |
| **URL** | ${sub.url} |
| **Tags** | ${sub.tags.join(", ")} |
| **GitHub** | ${sub.github || "—"} |
| **Category** | ${sub.category} |

<SUBMISSION>${sub.name};;${sub.description};;${sub.url};;${sub.tags.join(",")};;${sub.github || "—"};;${sub.category}</SUBMISSION>`;
  
  await fetch(`https://api.github.com/repos/${env.GITHUB_REPO_OWNER}/${env.GITHUB_REPO_NAME}/issues`, {
    method: "POST",
    headers: {
      Authorization: `Bearer ${env.GITHUB_TOKEN}`,
      "Content-Type": "application/json",
      Accept: "application/vnd.github+json"
    },
    body: JSON.stringify({ 
      title: `[Tool Submission Request] ${sub.name}`, 
      body: issueBody, 
      labels: ["tool-submission"] 
    })
  });
  return jsonResponse({ ok: true }, 200, origin);
}

Automated Tool Integration Pipeline

Once the GitHub issue is created, maintainers can process the submission manually or use the automation script in management_tools/addToolAutomation.py. This script parses the <SUBMISSION> tag from the issue body to extract structured data without manual copying.

The automation splits the tag content by double semicolons (;;) to retrieve the name, description, URL, tags, GitHub link, and category. It then fetches additional metadata (like star count and license information) via the GitHub API and appends the complete tool record to tools.json.


# management_tools/addToolAutomation.py

issueBridge = GitHubIssueBridge(issue_url)
fields = issueBridge.getAutomationString().split(";;")

# fields => [name, description, url, tags, github, category]

new_tool = {
    "id": slugify(fields[0]),
    "name": fields[0],
    "url": fields[2],
    "github": fields[4],
    "category": fields[5],
    # license and stars fetched via GitHubRepoBridge

}

Alternative: Manual Submission via Issue Template

If you prefer not to use the web interface, you can submit directly through GitHub by using the issue template located at .github/ISSUE_TEMPLATE/request-to-add-a-tool.md. This template mirrors the modal's field structure, ensuring you provide all necessary information for the maintainers to evaluate your submission.

Summary

  • Frontend Interface: The submission modal in src/constants/ModalConfigs.tsx collects tool metadata and POSTs to a Cloudflare Worker endpoint.
  • Validation Layer: The handleSubmitTool function validates inputs and formats data with a special <SUBMISSION> tag for automation.
  • GitHub Integration: Validated submissions create labeled issues in the BraveOPotato/FckSignups repository via the GitHub API.
  • Automation Support: The addToolAutomation.py script can parse submission tags to automatically populate tools.json with new tools.
  • Manual Fallback: Users can submit tools directly through the GitHub issue template at .github/ISSUE_TEMPLATE/request-to-add-a-tool.md.

Frequently Asked Questions

What information do I need to submit a tool to FckSignups?

You must provide the tool's name, description, direct URL, relevant tags, category, and optionally the GitHub repository URL. All fields except the GitHub link are mandatory, as enforced by the validation logic in handleSubmitTool.

How long does it take for a submitted tool to appear on the site?

After you submit a tool to FckSignups, the Cloudflare Worker creates a GitHub issue immediately. The actual listing time depends on when maintainers review the issue and run the addToolAutomation.py script to update tools.json, as there is no automatic deployment on issue creation.

Can I submit a tool without a GitHub repository?

Yes. While providing a GitHub repository is recommended, it is not required. If you omit the GitHub URL, the Cloudflare Worker will apply the no-repo-link label to the issue instead of rejecting the submission, allowing proprietary or closed-source tools to be considered.

What happens if my submission fails validation?

If your submission is missing required fields or contains malformed URLs, the handleSubmitTool function returns an error response without creating a GitHub issue. The frontend modal typically displays this error, prompting you to correct the information before retrying the submission to FckSignups.

Have a question about this repo?

These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:

Share the following with your agent to get started:
curl -s "https://instagit.com/install.md"

Works with
Claude Codex Cursor VS Code OpenClaw Any MCP Client

Maintain an open-source project? Get it listed too →