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

# Building from Web

> Use the full Bloom workspace to create, edit, and preview apps from your browser.

The **web version of Bloom** gives you the complete workspace for building, testing, and managing your app, all without installing anything locally. It's the most powerful way to work with Bloom, offering full access to code structure, backend tools, and real-time preview.

<Frame>
  <img src="https://mintcdn.com/bloom-eafef039/FFPKMkGhN_cDZ48F/images/preview-generation.jpg?fit=max&auto=format&n=FFPKMkGhN_cDZ48F&q=85&s=93c16c5ed9f6b4e2257434246f2bbcc8" alt="Bloom web workspace" width="3022" height="1563" data-path="images/preview-generation.jpg" />
</Frame>

## When to use the web app

<CardGroup cols={2}>
  <Card title="Starting a new project" icon="seedling">
    The web workspace is ideal for creating your first version and setting up core features.
  </Card>

  <Card title="Reviewing your code" icon="code">
    Browse your app's structure and understand how components connect to backend functions.
  </Card>

  <Card title="Backend configuration" icon="database">
    Managing environment variables, API keys, and deployment settings is easiest on web.
  </Card>

  <Card title="Debugging issues" icon="bug">
    Access logs, backend dashboard, and all diagnostic tools in one place.
  </Card>

  <Card title="Team collaboration" icon="users">
    Share your screen during meetings or work alongside teammates on larger displays.
  </Card>

  <Card title="Complex features" icon="puzzle-piece">
    When building sophisticated logic, data models, or integrations, the web workspace provides more screen space and tools.
  </Card>
</CardGroup>

## Creating your first app

<Steps>
  <Step title="Open Bloom in your browser" icon="browser">
    Navigate to [bloom.diy](https://bloom.diy) and sign in to your account.

    If you don't have an account yet, sign up with Google, GitHub, or email.
  </Step>

  <Step title="Click 'New App'" icon="plus">
    From your dashboard, click the **New App** button to start creating.

    <Frame>
      <img src="https://mintcdn.com/bloom-eafef039/FFPKMkGhN_cDZ48F/images/new-app-button.png?fit=max&auto=format&n=FFPKMkGhN_cDZ48F&q=85&s=e82134775ac0909389d1e5411661f340" alt="New App Button" width="478" height="214" data-path="images/new-app-button.png" />
    </Frame>
  </Step>

  <Step title="Describe what you want to build" icon="message">
    In the prompt, describe your app idea in natural language.

    <Accordion title="Prompting tips" icon="lightbulb">
      **Be specific about:**

      * The main purpose (e.g., "habit tracker," "recipe manager")
      * Key features (e.g., "daily check-ins," "photo uploads")
      * User flows (e.g., "users can create, edit, and delete entries")

      **Good example:**

      ```
      Build a daily journal app where users can write entries, 
      add photos, and tag entries by mood. Include a calendar 
      view showing which days have entries.
      ```

      **Less helpful example:**

      ```
      Make a journal app
      ```
    </Accordion>
  </Step>

  <Step title="Bloom generates your app" icon="wand-magic-sparkles">
    Bloom creates your full-stack app:

    * **Frontend** — Expo project with screens and UI components
    * **Backend** — Convex functions, database schema, and API endpoints
    * **Authentication** — OAuth configuration ready to enable
    * **Preview** — Your app running live in the right panel

    This usually takes 2-10 minutes depending on complexity.
  </Step>

  <Step title="Preview your app" icon="eye">
    Once generation completes, you'll see your app running in the preview panel.

    <Check>
      Click through the screens
    </Check>

    <Check>
      Test core functionality
    </Check>

    <Check>
      Identify what works and what needs refinement
    </Check>
  </Step>

  <Step title="Iterate and refine" icon="rotate">
    Use the chat to request changes:

    * "Add a search bar to the main screen"
    * "Change the primary color to blue"
    * "Let users upload profile photos"
    * "Add a settings screen with dark mode toggle"

    Each iteration updates your app and shows changes in the preview.
  </Step>
</Steps>

### Choosing a model

You can choose which AI model Bloom uses to generate your code. The model selector is to the right of the **+** button in the bottom left corner of the chat input.

<Frame>
  <img src="https://mintcdn.com/bloom-eafef039/6Jj6W1TQ2_0nANBi/images/select-model-web.png?fit=max&auto=format&n=6Jj6W1TQ2_0nANBi&q=85&s=418cab91cf821dd4c61e1c0a01e57570" alt="Model selector on web" width="940" height="761" data-path="images/select-model-web.png" />
</Frame>

**Available models:**

| Model              | Cost   | Best for                                    |
| ------------------ | ------ | ------------------------------------------- |
| **Auto** (default) | Varies | Bloom picks the best model for each request |
| **MiniMax M2.5**   | \$     | Lighter, faster generations                 |
| **Gemini 3.1 Pro** | \$\$   | Balanced speed and quality                  |
| **Sonnet 4.6**     | \$\$   | Balanced speed and quality                  |
| **GPT 5.3 Codex**  | \$\$\$ | Complex, high-quality generations           |
| **Opus 4.6**       | \$\$\$ | Complex, high-quality generations           |

**Auto** is selected by default and works well for most requests. Higher-tier models (\$\$, \$\$\$) produce more sophisticated results but use more credits per generation.

## Working with the preview

### Testing your app

The live preview lets you interact with your app as if you're using it on a real device:

<CardGroup cols={2}>
  <Card title="Click and navigate" icon="hand-pointer">
    Tap buttons, fill out forms, navigate between screens—everything is interactive.
  </Card>

  <Card title="Test user flows" icon="route">
    Walk through complete user journeys from start to finish to verify functionality.
  </Card>

  <Card title="Check responsiveness" icon="mobile">
    Resize the preview to see how your app adapts to different screen sizes.
  </Card>

  <Card title="Verify real-time updates" icon="arrows-rotate">
    For apps with live data, open multiple browser windows to test sync across devices.
  </Card>
</CardGroup>

### Switching between web and mobile preview

The preview toolbar includes a toggle that lets you switch between a **web layout** and a **mobile device frame**. Use it to verify that your app looks and feels right on both platforms without leaving the workspace.

<Frame caption="The web/mobile toggle in the preview toolbar">
  <img src="https://mintcdn.com/bloom-eafef039/YuFkGmz9291JO9eH/images/preview-switcher.png?fit=max&auto=format&n=YuFkGmz9291JO9eH&q=85&s=62e5f91b003a8d0094f95c665d6abfea" alt="Preview switcher" width="656" height="188" data-path="images/preview-switcher.png" />
</Frame>

<Tabs>
  <Tab title="Web preview">
    The web preview shows your app in a full-width browser layout. This is the best way to check responsive design, wide layouts, and desktop interactions.

    <Frame caption="Web preview active">
      <img src="https://mintcdn.com/bloom-eafef039/YuFkGmz9291JO9eH/images/preview-web-active.png?fit=max&auto=format&n=YuFkGmz9291JO9eH&q=85&s=1e55336f755bf946d656e97ff3893edf" alt="Web preview" width="978" height="1024" data-path="images/preview-web-active.png" />
    </Frame>
  </Tab>

  <Tab title="Mobile preview">
    The mobile preview wraps your app in an iPhone device frame so you can see exactly how it will appear on a phone. Use this to check touch targets, scroll behavior, and mobile navigation.

    <Frame caption="Mobile preview active">
      <img src="https://mintcdn.com/bloom-eafef039/YuFkGmz9291JO9eH/images/preview-mobile-active.png?fit=max&auto=format&n=YuFkGmz9291JO9eH&q=85&s=8acb6b4a4b29749e095446ea023dd831" alt="Mobile preview" width="983" height="1024" data-path="images/preview-mobile-active.png" />
    </Frame>
  </Tab>
</Tabs>

<Tip>
  Switch between views frequently as you build. Some layouts look great on web but need adjustment on mobile, and vice versa.
</Tip>

### Preview on your phone

For the most accurate testing, preview your app natively on your device.

<Frame>
  <img src="https://mintcdn.com/bloom-eafef039/FFPKMkGhN_cDZ48F/images/preview-mobile.jpg?fit=max&auto=format&n=FFPKMkGhN_cDZ48F&q=85&s=4675bc770f35c6bd7d4ea9340caeb5b1" alt="Instant sharing on mobile" width="3023" height="1564" data-path="images/preview-mobile.jpg" />
</Frame>

 

<Tabs>
  <Tab title="iOS">
    **App Clip Preview**

    On iOS, Bloom uses **App Clips**, a native iOS feature that lets users run apps instantly without installation.

    <Steps>
      <Step title="Scan the QR code">
        Open your iPhone camera and point it at the QR code in the preview modal.
      </Step>

      <Step title="Tap the notification">
        iOS shows a banner to open the App Clip.
      </Step>

      <Step title="App opens instantly">
        Your app runs natively with full performance and complete functionality. No download required.
      </Step>
    </Steps>
  </Tab>

  <Tab title="Android">
    **Progressive Web App**

    On Android, shared apps run as progressive web apps (PWAs) in the browser.

    <Steps>
      <Step title="Scan the QR code or tap the link">
        Scan with your camera app or tap the share link directly.
      </Step>

      <Step title="App opens in browser">
        The app loads in your default mobile browser. You can add it to your home screen for quick access.
      </Step>
    </Steps>
  </Tab>

  <Tab title="Web">
    **Browser Preview**

    On desktop or any device with a web browser, apps open directly in the browser.

    <Steps>
      <Step title="Click the share link">
        The app runs immediately in the browser with no installation or setup.
      </Step>
    </Steps>
  </Tab>
</Tabs>

<Tip>
  Keep your phone preview open while working. It's the best way to catch issues with touch targets, font sizes, or mobile-specific interactions.
</Tip>

## Making changes

### Using the chat

The chat interface is your primary way to modify your app:

<Accordion title="Adding features">
  **Example prompts:**

  * "Add a dark mode toggle to the settings screen"
  * "Let users filter the list by category"
  * "Include a search bar at the top of the home screen"
  * "Add push notifications when someone comments"
</Accordion>

<Accordion title="Modifying UI">
  **Example prompts:**

  * "Make the buttons larger and rounded"
  * "Change the color scheme to blue and white"
  * "Add icons to the navigation tabs"
  * "Show user avatars as circles instead of squares"
</Accordion>

<Accordion title="Fixing bugs">
  **Example prompts:**

  * "The save button isn't working—can you fix it?"
  * "Users can't delete items from the list"
  * "The app crashes when I tap the profile icon"
  * "Photos aren't uploading correctly"
</Accordion>

<Accordion title="Backend logic">
  **Example prompts:**

  * "Add validation so users can't submit empty forms"
  * "Only show items created by the current user"
  * "Send an email notification when someone signs up"
  * "Automatically delete items older than 30 days"
</Accordion>

<Warning>
  Be specific in your requests. Instead of "make it better," describe exactly what you want: "increase the font size of headings to 24px."
</Warning>

### Monitoring changes

<Frame>
  <img src="https://mintcdn.com/bloom-eafef039/FFPKMkGhN_cDZ48F/images/preview-generation.jpg?fit=max&auto=format&n=FFPKMkGhN_cDZ48F&q=85&s=93c16c5ed9f6b4e2257434246f2bbcc8" alt="Generation preview" width="3022" height="1563" data-path="images/preview-generation.jpg" />
</Frame>

After requesting a change:

1. **Watch the generation progress** — Bloom shows what it's updating
2. **Preview automatically updates** — See your changes as soon as generation completes
3. **Check the logs** — Verify no new errors appeared
4. **Test the modified feature** — Confirm it works as expected

<Info>
  If a change doesn't work as you hoped, describe the issue in chat and Bloom will try again.
</Info>

## Using backend tools

### Backend Dashboard

Monitor your app's performance and health:

<CardGroup cols={3}>
  <Card title="Health metrics" icon="heart-pulse">
    Track failure rates, cache performance, and system status.
  </Card>

  <Card title="Data browser" icon="database">
    View tables, documents, and database schema.
  </Card>

  <Card title="Function inspector" icon="function">
    See all Convex functions and their organization.
  </Card>
</CardGroup>

[Learn more about the Backend Dashboard →](/backend-dashboard)

### Logs

Debug issues and monitor activity:

* **Filter by Frontend/Backend** to isolate issues
* **Search for specific errors or events**
* **Track logs since last deploy** to focus on recent changes

[Learn more about Logs →](/logs)

### Authentication

Configure user sign-in:

* **Toggle OAuth providers** (Google, GitHub, Apple)
* **Add custom OAuth credentials** for branded login
* **Copy authorized origin URLs** for setup

[Learn more about Authentication →](/authentication)

### API Connections

Integrate external services:

* **Use auto-provisioned Bloom keys** for instant setup
* **Add your own API keys** for production use
* **Manage environment variables** securely

[Learn more about API Connections →](/api-connections)

## Troubleshooting

<AccordionGroup>
  <Accordion title="Preview not updating" icon="rotate">
    **Try these steps:**

    1. Refresh the preview (click refresh icon or `Cmd/Ctrl + R`)
    2. Clear browser cache and reload the page
    3. Check if generation is still in progress
    4. Look for errors in logs that might prevent loading
    5. Try opening preview in a new tab
  </Accordion>

  <Accordion title="Changes aren't applying" icon="triangle-exclamation">
    **Possible causes:**

    * Generation encountered an error (check logs)
    * Request was too vague (try being more specific)
    * Conflicting with existing code (describe the issue)
    * Browser cache needs clearing

    If stuck, describe what you attempted and ask Bloom to try a different approach.
  </Accordion>

  <Accordion title="Can't access backend tools" icon="lock">
    **Check:**

    * You're signed in to the correct account
    * Your plan includes backend dashboard access
    * The sidebar is expanded (click hamburger menu if collapsed)
    * No browser extensions are blocking content
  </Accordion>

  <Accordion title="App running slowly" icon="gauge">
    **Performance tips:**

    1. Check Backend Dashboard for high failure rates
    2. Review logs for slow queries or functions
    3. Reduce number of database queries on each screen
    4. Optimize image sizes before uploading
    5. Consider pagination for long lists
  </Accordion>
</AccordionGroup>

## What's next?

<CardGroup cols={2}>
  <Card title="Build from mobile" icon="mobile-screen" href="/building-from-mobile">
    Learn how to create and iterate on apps from your phone.
  </Card>

  <Card title="Share your app" icon="qrcode" href="/instant-sharing">
    Generate links and QR codes to share your app instantly.
  </Card>

  <Card title="Backend Dashboard" icon="chart-line" href="/backend-dashboard">
    Dive deeper into monitoring and managing your backend.
  </Card>

  <Card title="Deploy to stores" icon="store" href="/deploying-your-app">
    Ready to publish? Learn how to deploy to app stores.
  </Card>
</CardGroup>
