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

# Best practices

> Dos and don'ts for writing effective prompts

## Do this

### Be specific about data fields

<CodeGroup>
  ```text Do this theme={null}
  Track contacts with:
  - Full name
  - Email address
  - Phone number
  - Company name
  - Job title
  - LinkedIn profile URL
  ```

  ```text Don't do this theme={null}
  Track contact information
  ```
</CodeGroup>

### Specify field types when it matters

<CodeGroup>
  ```text Do this theme={null}
  Track deals with:
  - Deal name (text)
  - Amount (currency)
  - Close date (date)
  - Probability (percentage)
  - Status (new, negotiating, won, lost)
  ```

  ```text Don't do this theme={null}
  Track deals with name, amount, date, probability, status
  ```
</CodeGroup>

Common field types to specify:

* **Currency**: "amount (currency)" or "price in dollars"
* **Date**: "due date" or "close date"
* **Percentage**: "probability (percentage)"
* **Options**: "status (option A, option B, option C)"
* **Yes/No**: "is active (yes/no)" or "completed (checkbox)"

### Describe relationships clearly

<CodeGroup>
  ```text Do this theme={null}
  Build a project system where:
  - Projects have a name and description
  - Each project has multiple tasks
  - Tasks have a title, due date, and status
  - Each task is assigned to one user
  ```

  ```text Don't do this theme={null}
  Track projects, tasks, and users
  ```
</CodeGroup>

### Request specific visualizations

<CodeGroup>
  ```text Do this theme={null}
  Add a dashboard with:
  - Total revenue card
  - Number of deals card
  - Pie chart showing deals by status
  - Line chart showing monthly revenue trend
  ```

  ```text Don't do this theme={null}
  Add a dashboard with some charts
  ```
</CodeGroup>

### Define options explicitly

<CodeGroup>
  ```text Do this theme={null}
  Status options: draft, pending review, approved, rejected
  Priority levels: low, medium, high, critical
  ```

  ```text Don't do this theme={null}
  Add status and priority fields
  ```
</CodeGroup>

***

## Don't do this

### Don't reference other products

<CodeGroup>
  ```text Don't do this theme={null}
  Build something like Asana
  Make it work like Notion
  Copy the Salesforce pipeline
  ```

  ```text Do this instead theme={null}
  Build a task manager with:
  - Projects containing tasks
  - Tasks with title, assignee, due date, status
  - Kanban board view
  - List view with filters
  ```
</CodeGroup>

Why: Gainable doesn't know what features you want from those products. Describe the specific features you need.

### Don't use vague design terms

<CodeGroup>
  ```text Don't do this theme={null}
  Make it modern
  Keep it clean
  Professional looking
  ```

  ```text Do this instead theme={null}
  Use the corporate theme
  Use blue and gray colors
  Use a sidebar navigation layout
  ```
</CodeGroup>

### Don't request everything at once

<CodeGroup>
  ```text Don't do this theme={null}
  Build a complete CRM with leads, contacts, companies,
  deals, tasks, emails, calendar, reports, dashboards,
  team management, permissions, notifications, and
  mobile app with offline support.
  ```

  ```text Do this instead theme={null}
  Build a deal tracker with:
  - Deals (name, amount, status, close date)
  - Contacts (name, email, linked to deal)
  - Dashboard with deal totals

  (Then add more features in subsequent prompts)
  ```
</CodeGroup>

### Don't assume Gainable knows your domain

<CodeGroup>
  ```text Don't do this theme={null}
  Build a standard e-commerce checkout flow
  Add the usual project management features
  ```

  ```text Do this instead theme={null}
  Build checkout with:
  - Cart review step
  - Shipping address form
  - Payment method selection
  - Order confirmation page
  ```
</CodeGroup>

***

## Updating existing apps

When modifying an app you've already built:

### Reference existing elements

<CodeGroup>
  ```text Good theme={null}
  Add a due date field to the Task model
  ```

  ```text Less clear theme={null}
  Add due dates
  ```
</CodeGroup>

### Specify where to make changes

<CodeGroup>
  ```text Good theme={null}
  On the deals page, add a filter dropdown for status
  ```

  ```text Ambiguous theme={null}
  Add filtering
  ```
</CodeGroup>

### Build on what exists

<CodeGroup>
  ```text Good theme={null}
  Add a chart showing Tasks grouped by status
  ```

  ```text Creates confusion theme={null}
  Add a chart showing items by category
  (What items? What category?)
  ```
</CodeGroup>

***

## Screenshot and annotate — your secret weapon

Sometimes words aren't enough. Instead of trying to describe exactly what's wrong or what you want changed, you can **take a screenshot of your app and annotate it** with drawings, arrows, and text to show the agent exactly what you mean.

### How it works

1. Click the **camera icon** in the chat input toolbar

<Frame>
  <img src="https://mintcdn.com/gainable/F4mHtn-Y58puYSFi/images/screenshot-icon.png?fit=max&auto=format&n=F4mHtn-Y58puYSFi&q=85&s=9da0c12eb3ae10f5ca4c0848d57c7b9b" alt="Screenshot button in the chat toolbar" width="2108" height="1608" data-path="images/screenshot-icon.png" />
</Frame>

2. **Allow** the browser to capture your current tab when prompted

<Frame>
  <img src="https://mintcdn.com/gainable/F4mHtn-Y58puYSFi/images/screenshot-allow.png?fit=max&auto=format&n=F4mHtn-Y58puYSFi&q=85&s=c075cda08e552cebc55142c44aaef8c5" alt="Browser permission dialog to capture the tab" width="1482" height="1053" data-path="images/screenshot-allow.png" />
</Frame>

3. The **Annotate Screenshot** editor opens — use the toolbar to:
   * **Draw** freehand circles, underlines, or highlights
   * **Add arrows** pointing to specific elements
   * **Add text** labels explaining what to change
   * **Draw rectangles** to highlight areas of interest

4. Add a **written description** in the text field below the screenshot

5. Click **send** to submit the annotated screenshot with your instructions

<Frame>
  <img src="https://mintcdn.com/gainable/F4mHtn-Y58puYSFi/images/screenshot-annotate.png?fit=max&auto=format&n=F4mHtn-Y58puYSFi&q=85&s=9298392e4396f9f198ac56a74f01dcf7" alt="Screenshot annotation editor with drawing tools, arrows, and text" width="2863" height="1618" data-path="images/screenshot-annotate.png" />
</Frame>

### When to use it

* **Something looks wrong** — circle it and say "this should be blue, not red"
* **Layout issues** — draw arrows showing where elements should move
* **Missing elements** — point to where a button or field should appear
* **Exact positioning** — show precisely where you want a chart or component placed

<Tip>
  Annotated screenshots are the fastest way to communicate visual changes. A quick circle and arrow with "move this here" is worth a thousand words.
</Tip>

***

## Asking questions vs requesting builds

Gainable can answer questions about your project without making changes.

### To ask a question

```text theme={null}
How does the task filtering work?
What fields does the Deal model have?
Where is the dashboard code?
```

### To request a change

```text theme={null}
Add a due date field to tasks
Change the dashboard to show monthly data
Fix the filter to include all statuses
```

<Tip>
  Start questions with "how", "what", "where", or "explain" to get information without triggering a build.
</Tip>

***

## Recovery from mistakes

If something wasn't built correctly:

### Be specific about what's wrong

<CodeGroup>
  ```text Clear theme={null}
  The deal amount is showing without the dollar sign.
  Format it as currency.
  ```

  ```text Vague theme={null}
  The amounts look wrong
  ```
</CodeGroup>

### Describe what you expected

<CodeGroup>
  ```text Clear theme={null}
  The chart should show deals grouped by status, but
  it's showing them grouped by company. Change it to
  group by status.
  ```

  ```text Vague theme={null}
  The chart is wrong
  ```
</CodeGroup>

***

## Quick reference

| Situation       | Best Practice                               |
| --------------- | ------------------------------------------- |
| Defining data   | List all fields with types                  |
| Connecting data | Explicitly state relationships              |
| Adding charts   | Name the chart type and what data it shows  |
| Adding features | Use feature names (kanban, chat, filter)    |
| Styling         | Reference theme names or specific colors    |
| Updating        | Reference existing elements by name         |
| Fixing issues   | Describe what's wrong and what you expected |

## Learn more

<CardGroup cols={2}>
  <Card title="Examples" icon="lightbulb" href="/prompting/examples">
    See real prompts in action
  </Card>

  <Card title="Common patterns" icon="copy" href="/prompting/common-patterns">
    Templates for common app types
  </Card>
</CardGroup>
