> ## Documentation Index
> Fetch the complete documentation index at: https://metalworks.lab2a.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Build a startup: end to end

> Walk one real idea from a single sentence to a launch plan — demand research, positioning, design, a build spec, and launch copy, in order, with one report behind all of it.

This is the whole thing in one page: take an idea, find out if people want it, and turn it
into everything you need to launch. Each step is one slash command in Claude Code — or one
Python call. They all read from the **one demand report** you produce first, so every
recommendation traces back to a real quote you can open.

Install the [Claude Code plugin](/docs/claude-code), or `pip install "metalworks[research]"`
and set one provider key (see [Installation](/docs/installation)). Then walk the five steps
below.

## 1. Is there demand?

Start with one sentence about your idea. metalworks reads real conversations — Reddit, Hacker
News, the web, or [your own data](/docs/sources) — and gives you a go/no-go plus the actual
needs people voiced.

<CodeGroup>
  ```text Claude Code theme={null}
  /demand-report an affordable, jitter-free focus supplement for developers
  ```

  ```python Python theme={null}
  from metalworks import Metalworks

  mw = Metalworks()
  research = mw.research(
      "an affordable, jitter-free focus supplement for developers",
      subreddits=["Nootropics", "Supplements"],   # omit to let it pick
  )
  report = research.demand

  print(report.demand_summary)          # e.g. "Strong demand — 312 distinct voices..."
  for c in report.ranked_clusters:
      print(c.distinct_author_count, "people:", c.claim)
  ```
</CodeGroup>

If the demand is thin, it says so here — and the later steps stay honest about it instead of
inventing an opportunity. Everything below runs on this `report`.
→ [Demand research](/docs/demand-research)

## 2. Find your angle and your competitors

<CodeGroup>
  ```text Claude Code theme={null}
  /position-wedge
  /market-landscape
  ```

  ```python Python theme={null}
  positioning = mw.positioning(research)
  print(positioning.positioning_statement)   # who it's for, and why it's different

  land = mw.landscape(research)
  for rival in land.competitor_map.competitors:
      for gap in rival.gaps:                  # an opening, backed by a real complaint
          print(rival.name, "misses:", gap.claim)
  ```
</CodeGroup>

Your positioning is built from the unmet needs in the report; each competitor gap is a real
complaint someone posted. → [Positioning](/docs/positioning) · [Competitors](/docs/competitors)

## 3. Turn it into a build plan

metalworks writes the **spec**, not the product. From the demand it picks the surface to build
on (web? mobile? CLI? — with a one-line reason), maps the demand to a feature list, sketches the
screens you need, and scaffolds a project your own coding agent (Claude Code, Cursor, etc.) builds.

<CodeGroup>
  ```text Claude Code theme={null}
  /build-spec
  ```

  ```python Python theme={null}
  spec = mw.build_spec(research, positioning)        # surface="auto" → picks + explains it
  print(spec.surface, "—", spec.surface_rationale)   # web? mobile? CLI? — and why
  for feature in spec.features:
      print(feature.title, "—", feature.rationale)   # each tied to real demand

  mw.scaffold(spec, research, "./my-startup")        # writes the build harness
  ```
</CodeGroup>

The scaffold includes a frozen list of the real quotes behind every feature, so whatever
your agent builds stays true to what people actually asked for. → [Build spec](/docs/build-spec)

## 4. Distribution

<CodeGroup>
  ```text Claude Code theme={null}
  /distribution-strategy
  /distribution-assets
  /distribution-data-report
  /distribution-geo
  ```

  ```python Python theme={null}
  strategy = mw.channel_strategy(research)    # test→focus channel experiments, every channel grounded
  assets = mw.channel_assets(research)        # channel-shaped drafts (never posts)
  report = mw.data_asset(research)            # a corpus-derived data report — real counts + permalinks

  geo = mw.geo(research)                       # GEO / LLM-citability: real threads + answer briefs
  plan = mw.distribution_plan(research)        # pushes + streams, sequenced from a playbook
  ```
</CodeGroup>

Distribution copy is drafting-only — metalworks never posts anything. Each claim in a draft is
backed by a quote; the GEO stream lists the real threads to cite so people and AI search
engines find you. → [Distribution](/docs/distribution) · [GEO / LLM-citability](/docs/distribution-geo)

## That's the loop

One idea → one grounded report → positioning, design, a build plan, distribution. Because it
all reads from the same report, **every recommendation links back to a real quote you can
open and read for yourself.** That's the difference between this and a tool that just makes
things up — see [why you can trust the output](/docs/how-it-works).

Run `metalworks init` first and metalworks **remembers** all of this — each run is saved under
`.metalworks/` and later steps chain off its `report_id` instead of re-running research. See
[Projects & memory](/docs/projects).

New to the plugin? See the [Claude Code plugin](/docs/claude-code) for installing it and
what each command does. Driving it from your own app or agent? The same flow runs through the
[CLI](/docs/cli) and [MCP tools](/docs/mcp-tools).
