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

# Creating Your First Project

> Step-by-step guide to create your first project in Bringits Stream UI

<Info>
  **Prerequisites**:

  * Access to Bringits Stream UI
  * Organization dashboard access
  * Understanding of [key concepts](/stream/quickstart/intro) (projects, steps, commands, variables)
</Info>

This guide walks you through creating your first project in Bringits Stream UI, from initial setup to running your first data extraction workflow.

## Creating a New Project

### Accessing Bringits Stream UI

<Steps>
  <Step title="Open Bringits Stream UI">
    Access the Bringits Stream UI from your organization's dashboard or navigate directly using the provided Bringits Stream URL.
  </Step>

  <Step title="Navigate to Projects">
    From the main sidebar menu, select **"Projects"** to display the Projects list with existing projects and their details.
  </Step>

  <Step title="Create New Project">
    Click **"Create new project +"** located in the upper-right corner of the Projects page.
  </Step>
</Steps>

### Project Creation Dialog

When you click "Create new project +", a dialog appears with two options:

| Option               | Description                                                                       |
| -------------------- | --------------------------------------------------------------------------------- |
| **Project Name**     | Enter a descriptive, unique name for your project                                 |
| **Import JSON file** | Upload an existing project configuration file to create a project from a template |

<Tip>
  Use descriptive project names that clearly indicate the project's purpose. This makes it easier to find and manage projects later.
</Tip>

After entering a project name and clicking **"Create"**, you'll be taken to the project editor where you can configure additional settings.

## Project Settings

Once your project is created, you can configure it using the **Project Settings** panel on the right side of the editor.

### Basic Settings

| Field                       | Description                                                  |
| --------------------------- | ------------------------------------------------------------ |
| **Project ID**              | Auto-generated unique identifier for the project (read-only) |
| **Type**                    | Toggle between **Real time** and **Lazy** execution modes    |
| **Project Name**            | Editable project name                                        |
| **Project Group**           | Assign the project to a group for organization               |
| **Publish Removed Results** | Toggle to control whether removed results are published      |
| **Creator**                 | Shows the user who created the project (read-only)           |

### Advanced Settings

Expand the **Advanced Settings** section to access:

| Setting                       | Description                                               |
| ----------------------------- | --------------------------------------------------------- |
| **Fingerprint Distributions** | Toggle to enable fingerprint distribution for the project |

### Project Groups

Projects can be organized using **Project Groups**. Groups are managed separately from the **Groups** section in the sidebar, where you can create groups with a name, description, and assign members.

<Note>
  Project Groups help manage large numbers of projects. Consider creating groups by team, use case, or project type.
</Note>

### Variable Management

Bringits Stream supports predefined variables at the project level. For detailed information about variable types, see the [Introduction to Projects](/stream/quickstart/intro#variable-types).

**Project-level variables** (`@{PROJECT_ID}`, `@{RUN_ID}`, `@{START_TIMESTAMP}`) are global variables accessible across all steps.

**Secrets** (`%{SINK_DB_PASSWORD}`, `%{PROXY_PASSWORD}`) provide encrypted storage for API keys and credentials.

**Session tracking** (`#{UUID}`) maintains state across multi-step flows.

## Creating Your First Step

### Adding a Step

Within your project's **Scraping flow** tab, you'll see the workflow canvas. To add a new step:

<Steps>
  <Step title="Click the Plus Button">
    Click the **"+"** button below the existing step (or in the empty canvas for new projects) to add a new step.
  </Step>

  <Step title="Configure Step Settings">
    When a step is selected, the **Step Configuration** panel appears on the right side. Configure the required fields.
  </Step>
</Steps>

### Step Configuration Fields

| Field               | Description                                      | Required |
| ------------------- | ------------------------------------------------ | -------- |
| **Step ID**         | Auto-generated unique identifier (read-only)     | -        |
| **Name**            | Descriptive identifier for the step              | Yes      |
| **Description**     | Step description (up to two lines)               | Yes      |
| **Repeatable**      | Toggle to make the step run on a schedule        | No       |
| **Technology Used** | Select the technology type (HTTP, Browser, etc.) | Yes      |

### Repeatable Settings

When **Repeatable** is enabled, configure the interval:

* **Manual interval** - Set a specific interval value in seconds
* **Smart interval** - Let the system optimize the execution schedule

<Warning>
  When changing or deleting a project, all repeatable jobs for that project's steps are stopped. Child steps that are removed have their repeatable jobs automatically stopped.
</Warning>

### Step Advanced Settings

Expand the **Advanced Settings** section within step configuration to access:

| Setting              | Description                                               |
| -------------------- | --------------------------------------------------------- |
| **Exclude values**   | Add values separated by commas to exclude from processing |
| **Miss Tolerance**   | Set an integer value for error handling tolerance         |
| **Fingerprint Type** | Select a fingerprint type or "No Fingerprint Type"        |

### Variable Scope in Steps

Steps support various variable scopes:

* `${event_id}` - Event-specific variables
* `#{UUID}` - Session identifiers for maintaining state
* `#{DATE(TIMESTAMP)}` - Dynamic date/time parameters
* `@{PROJECT_ID}`, `@{RUN_ID}` - Runtime parameters inherited from project level

## Adding Commands to Your Step

### Command Categories

The left sidebar displays available command categories that you can drag into your step:

* **Android** - Mobile automation commands
* **Browser** - Web browser automation (open, click, navigate)
* **Execution\_flow** - Flow control commands
* **Generate** - Data generation commands
* **HTTP** - HTTP request commands
* **Interaction** - User interaction simulation
* **Parse** - Data parsing and extraction
* **Sink** - Output destination commands
* **Validation** - Data validation commands
* **Ws** - WebSocket commands

### Adding a Command

Click on a command in the left sidebar to expand its options, then drag or click to add it to your step. Alternatively, use the **Tool Center** button within the step to browse and add commands.

### HTTP Command Configuration

When you add an HTTP command and select it, the **HTTP Command** panel appears with these options:

| Parameter                    | Description                                      |
| ---------------------------- | ------------------------------------------------ |
| **Command Type**             | Select the specific HTTP command variant         |
| **Body**                     | Request body content                             |
| **Bypass Status Code**       | Status codes to bypass error handling            |
| **Headers**                  | Key-value pairs for request headers              |
| **Headers Options**          | Toggle for additional header settings            |
| **Is Http2**                 | Toggle to use HTTP/2 protocol                    |
| **Proxy Settings**           | Toggle to configure proxy usage                  |
| **Proxy Connection Timeout** | Timeout for proxy connection (milliseconds)      |
| **Timeout**                  | Maximum wait time for the request (milliseconds) |
| **Tls Settings**             | Toggle to configure TLS settings                 |

<Info>
  Each command has an info icon (ℹ️) that explains its purpose, available parameters, and usage examples.
</Info>

### Example: Parse Commands

Bringits Stream includes several Parse commands for data extraction:

#### JSONPathCommand

Extracts data from JSON responses using JSONPath expressions:

```json theme={null}
{
  "command": "JSONPathCommand",
  "params": {
    "jsonPath": "$.data.items[*].title",
    "input": "@{PREVIOUS_OUTPUT}"
  }
}
```

#### GetTextContentsCommand

Retrieves text content from DOM elements:

```json theme={null}
{
  "command": "GetTextContents",
  "params": {
    "elementsLocator": {
      "selector": ".article-title",
      "timeout": 10000
    }
  }
}
```

Features:

* **CSS Selectors** - Target elements using standard selectors
* **Filtering** - Filter by innerText, hasChildren, or index
* **Chained Locators** - Use `continueWith` for nested searches
* **Returns Array** - Text content from all matching elements

#### GetAttributesCommand

Extracts attributes from DOM elements for detailed scraping operations:

```json theme={null}
{
  "command": "GetAttributes",
  "params": {
    "elementsLocator": {
      "selector": "a.article-link",
      "timeout": 10000
    },
    "attributes": ["href", "title"]
  }
}
```

## Connecting a Sink

### Supported Sink Types

The SINK command allows publishing messages directly from any step. Bringits Stream supports various output destinations:

**RabbitMQ (Message Queue)**:

* Publish messages directly to a RabbitMQ exchange
* No Redis storage required
* Data sent as part of the message itself
* Primary method for robot communication

### Configuring a Sink

<Steps>
  <Step title="Add SINK Command">
    From the **Sink** category in the left sidebar, drag the SINK command into your step. Typically, this is the final command in the last step of your workflow.
  </Step>

  <Step title="Configure Exchange and Routing Key">
    Select the SINK command and configure the exchange name and routing key in the command panel.
  </Step>

  <Step title="Verify Consumption">
    Run the project and confirm messages are being consumed successfully from the message queue.
  </Step>
</Steps>

### Key Differences

* **No Orchestrator Flow** - Direct publishing bypasses the bringits-stream-orchestrator
* **No Redis Storage** - All data included in the message
* **Immediate Publishing** - Messages sent as soon as the step completes

<Tip>
  Test your sink configuration with a simple message before running the full workflow to ensure proper routing and consumption.
</Tip>

## Running Your Project

### Activating the Project

<Steps>
  <Step title="Save Configuration">
    Click **"Save project"** in the top-right corner to save all steps and commands.
  </Step>

  <Step title="Activate Project">
    Toggle the project status from **"Inactive"** to **"Active"** using the status toggle in the project header.
  </Step>

  <Step title="Monitor Execution">
    The system begins executing steps based on configured intervals. Monitor the execution to verify proper operation.
  </Step>
</Steps>

**Execution Behavior**:

* Each step runs as a repeatable job based on its interval configuration
* Variable interpolation occurs before each execution
* Parent-child relationships - Child steps inherit context from parent executions
* Automatic scheduling - No manual triggering required once active

### Testing and Debugging Your Project

For comprehensive testing and debugging guidance, see the [Debugging Your Project](/stream/quickstart/project-debug) guide.

<Info>
  The Bringits Stream ecosystem includes debugging tools and sandbox environments for testing projects before production deployment.
</Info>

## Next Steps

Now that you've created your first project, explore:

* [Debugging Your Project](/stream/quickstart/project-debug) - Learn testing and troubleshooting techniques
* [Monitor Your Stream](/stream/quickstart/project-monitor) - Track project performance
* [HTTP Commands](/stream/commands/http) - Deep dive into HTTP request configuration
* [Browser Commands](/stream/commands/browser) - Web automation capabilities
* [Parse Commands](/stream/commands/parse) - Data extraction techniques
