Back to skills
extension
Category: Development & EngineeringAPI key required

Built at GrowthX

Submit your project to Built at GrowthX — the community builder showcase for GrowthX members. Requires a GrowthX API key.

personAuthor: gxt-adminhubclawhub

Built at GrowthX — Project Submission

Submit a project to Built at GrowthX, the community builder showcase for GrowthX members.

When to Use

Activate this skill when the user wants to:

  • Push, submit, or share a project to Built at GrowthX
  • Post a project to the GrowthX builder showcase
  • Publish their build on GrowthX

Getting an API Key

If the user hasn't configured their API key yet, direct them to:

  1. Go to Built at GrowthX on the GrowthX platform
  2. Navigate to their profile / API key settings
  3. Click Generate API Key — the raw key is shown once, copy it immediately
  4. Set the key in OpenClaw config: add it under skills.entries.growthx-bx-submit.apiKey in ~/.openclaw/openclaw.json, or set the GROWTHX_API_KEY environment variable

The key is tied to the user's GrowthX membership. If their membership lapses, the key stops working.

API Endpoint

POST https://backend.growthx.club/api/v1/bx/projects/agent

Authentication

Send the API key in the x-api-key header:

x-api-key: <GROWTHX_API_KEY>

Request Body (JSON)

Required fields:

| Field | Type | Constraints | |-------|------|-------------| | name | string | Max 100 characters. The project name. | | tagline | string | Max 200 characters. A short one-liner about the project. |

Optional fields:

| Field | Type | Default | Constraints | |-------|------|---------|-------------| | description | string | "" | Max 2000 characters. Longer project description. | | category | string | "SaaS" | e.g. SaaS, Fintech, Marketplace, EdTech, HealthTech, AI/ML, Developer Tools, E-commerce | | stack | string[] | [] | Tech stack tags, e.g. ["React", "Node.js", "MongoDB"] | | url | string | null | Project URL (must be a valid URI) | | status | string | "shipped" | One of: shipped, idea, prototyping, beta | | buildathon | string | null | Name of a buildathon if this project was built during one |

Example Request

curl -X POST "https://backend.growthx.club/api/v1/bx/projects/agent" \
  -H "Content-Type: application/json" \
  -H "x-api-key: $GROWTHX_API_KEY" \
  -d '{
    "name": "TaskFlow",
    "tagline": "AI-powered task management for remote teams",
    "description": "TaskFlow uses AI to automatically prioritize and assign tasks based on team capacity and deadlines.",
    "category": "SaaS",
    "stack": ["React", "Node.js", "OpenAI", "PostgreSQL"],
    "url": "https://taskflow.app",
    "status": "shipped"
  }' | jq .

Success Response (201)

{
  "project": {
    "_id": "...",
    "name": "TaskFlow",
    "tagline": "AI-powered task management for remote teams",
    "status": "shipped",
    "creator": { "name": "...", "avatar_url": "..." },
    "weighted_votes": 0,
    "raw_votes": 0
  }
}

Agent Behavior

When the user asks to submit a project, follow these steps in order:

Step 1 — Detect Projects in the Workspace

Scan standard project files in the current workspace to discover what the user has built. Only read these files:

Project manifest files:

  • package.jsonname, description, keywords, homepage, repository
  • pyproject.toml / setup.py / setup.cfgname, description, urls
  • Cargo.tomlname, description, repository, keywords
  • go.mod — module name
  • pubspec.yamlname, description, homepage

Documentation:

  • README.md — project title (first # heading) and opening paragraph
  • git remote -v — repository URL

Monorepo detection:

For monorepos, check for workspace configs (workspaces in root package.json, pnpm-workspace.yaml, turbo.json, nx.json) or subdirectories with their own manifest files. Each workspace package with its own name/description is a candidate project.

How to infer fields:

| Field | How to Infer | |-------|-------------| | name | name field from manifest file, or first heading in README | | tagline | description field from manifest, or first sentence of README | | description | Summarize from README content and manifest description (1-3 sentences) | | stack | Dependencies and devDependencies from manifest (e.g. react → "React", express → "Express", django → "Django") | | url | homepage field from manifest, or repository URL from git remote | | category | Infer from dependencies and README (e.g. stripe → "Fintech", next → "SaaS", ML libraries → "AI/ML") | | status | Default to "shipped". If README explicitly says WIP/prototype/beta, use that instead. |

Step 2 — Present Discovered Projects

Show the user what you found. If multiple projects were detected (e.g. monorepo packages), list them and ask which one to submit:

I found these projects in your workspace:

  1. project-name — short description
  2. other-project — short description

Which one would you like to submit to Built at GrowthX?

If only one project is detected, present its details directly and ask to confirm.

Step 3 — Fill in Missing Details

For the selected project, show what was auto-detected and ask the user to fill in or correct anything:

  • name and tagline are required — if the tagline can't be inferred, ask for it
  • Show the auto-detected stack, category, url, description, and status and let the user adjust
  • Default status to "shipped" unless README or context suggests it's still in progress

Step 4 — Confirm and Submit

Show a final summary of all fields that will be sent:

Submitting to Built at GrowthX:

  • Name: TaskFlow
  • Tagline: AI-powered task management for remote teams
  • Category: SaaS
  • Stack: React, Node.js, OpenAI, PostgreSQL
  • URL: https://taskflow.app
  • Status: shipped

Submit this?

Only after the user confirms, make the API call using curl with the x-api-key header.

Step 5 — Report Result

On success, tell the user their project was submitted and share the project link if available. On failure, explain the error (see below).

Error Handling

| Status | Meaning | What to Tell the User | |--------|---------|----------------------| | 401 | Invalid or revoked API key | "Your API key is invalid or has been revoked. Please generate a new one from the Built at GrowthX settings." | | 403 | Membership not active | "Your GrowthX membership is not active. An active membership is required to submit projects." | | 400 | Validation error (missing name/tagline, field too long, etc.) | Show the specific validation error from the response body. |