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

# Design, test, and export your first survey

> Import or build a questionnaire, test the link, review the responses, and download the raw data.

Welcome! This tutorial walks you through everything you need to ship your first questionnaire in Smartinterview: building it, testing it, reviewing the answers, and exporting the raw data.

## 1. Create a new survey

A hands-on, end-to-end walkthrough of the Smartinterview builder. By the end of this document, you will know how to:

* Create a survey from scratch or import one from an existing PDF / DOCX
* Design every type of question the platform supports
* Add AI-driven conversational (smartquestion) blocks with follow-ups
* Localise question text and navigation buttons into any of 10 languages
* Configure display conditions and URL variables
* Test the survey in three different ways before sharing it
* Generate synthetic test data
* Visualise responses in the Data tab
* Export raw data to Excel, CSV, or JSON
* Deploy and share the survey (direct link or embedded iframe)

***

## 1. Creating a survey

From the dashboard, click **+ New survey**. You are dropped into the builder with:

* An empty questions list
* A default `End Screen` already wired at the bottom
* The "No created questions yet" empty state in the centre panel, showing two buttons: **+ Create question** and **Import a file**

### 1a. Create questions from scratch

1. Click **+ Create question**.
2. A new question appears in the list (named `Q1`) and the editor opens.
3. Type the question title directly in the centre canvas.
4. Click **+ Create question**.
5. A new question appears in the list (named `Q1`) and the editor opens.
6. Type the question title directly in the centre canvas.

### 1b. Import an existing questionnaire (PDF / DOCX)

If you already have a questionnaire written, you do not need to re-type it.

1. Click **Import a file** in the empty state (or **+ Add question** then "Import" if you already have other questions).
2. Drag-and-drop or choose a `.pdf` or `.docx` file (max 25 MB).
3. Click **Importer** and wait for the "Importation en cours…" toast.
4. When the import finishes, every question the LLM detected appears in the builder with the right type already selected:
   | Detected type          | What you get                                 |
   | ---------------------- | -------------------------------------------- |
   | `radio`                | Radio Group with the choices from the source |
   | `dropdown`             | Dropdown                                     |
   | `checkbox_group`       | Checkbox Group                               |
   | `boolean`              | Yes/No checkbox                              |
   | `number`               | Number input                                 |
   | `scale`                | Slider with the detected min / max           |
   | `likert`               | Checkbox Table with Likert columns           |
   | `long_text` or `vocal` | smartquestion (AI voice + follow-ups)        |
   | `text`                 | Short text                                   |
5. Skip-logic conditions and min/max ranges are preserved when they're explicitly stated in the source document.

> **Tip:** the import uses AI. For complicated layouts it's worth opening each question afterwards and verifying both the title and the control type match what you expected.

***

## 2. The builder at a glance

![Builder interface](https://auth.smartinterview.ch/storage/v1/object/public/documents/Builder.png)

Once you create a survey you land on the builder. The interface has three main regions:

* **Header** — a single `Settings` toggle on the left and a four-button segmented toggle for the builder modes. `Deploy` opens a pop-up with the shareable links; it is not a tab.
* **Center panel** — everything you design or preview for the currently selected question. Its content changes with the mode selected in the header.
* **Right panel** — the question list, the controls palette (expert mode only), and the Endings list (welcome/end screens).
* When you click **Data**, the Questions panel auto-collapses to give the response table room to breathe.

## 3. Writing the question title

Click anywhere in the large title area and start typing. Smartinterview uses a Notion-like WYSIWYG editor with a floating **bubble toolbar** that appears when you select text:

Click anywhere in the large title area and start typing. Smartinterview uses a Notion-like WYSIWYG editor with a floating **bubble toolbar** that appears when you select text:

| Button              | What it does                             |
| ------------------- | ---------------------------------------- |
| H1 / H2 / H3        | Headings (for long multi-line questions) |
| **B / *I* / ~~S~~** | Bold, italic, strikethrough              |
| T                   | Font family + size                       |
| 🎨                  | Text colour                              |
| ≡                   | Alignment (left / centre / right)        |
| 🖼                  | Insert image                             |
| 🌐                  | Translate (see section 4)                |

The editor accepts inline images (drag-and-drop or paste a URL) and supports keyboard shortcuts for bold/italic/underline (`⌘B`, `⌘I`, `⌘U`).

## 4. Translating a question (10 languages)

Smartinterview stores a primary language per question and any number of translations alongside it.

Smartinterview stores a primary language per question and any number of translations alongside it.

1. Write the question in whatever language feels most natural — this becomes the **primary** language.
2. Select any portion of the question title so the bubble toolbar appears.
3. Click the 🌐 icon on the far right of the toolbar.
4. A hover menu lists every supported language:
   * Français (FR) ★ principale
   * English (EN)
   * Deutsch (DE)
   * Español (ES)
   * العربية (AR)
   * हिन्दी (HI)
   * Português (PT)
   * Português (BR)
   * ไทย (TH)
   * 中文 (ZH)
   * 日本語 (JA)
   * Français (FR) ★ principale
   * English (EN)
   * Deutsch (DE)
   * Español (ES)
   * العربية (AR)
   * हिन्दी (HI)
   * Português (PT)
   * Português (BR)
   * ไทย (TH)
   * 中文 (ZH)
   * 日本語 (JA)
5. Click the target language. Smartinterview calls the translation API and writes the result to `uischema.options.translations[<lang>]`.
6. The editor view automatically switches to the newly-translated version so you can verify and fine-tune it inline.
7. Click the 🌐 icon again and pick `★ principale` to go back to the original — no second API call.
8. Click the target language. Smartinterview calls the translation API and writes the result to `uischema.options.translations[<lang>]`.
9. The editor view automatically switches to the newly-translated version so you can verify and fine-tune it inline.
10. Click the 🌐 icon again and pick `★ principale` to go back to the original — no second API call.

Respondents see the version that matches their URL locale (`/fr/…`, `/en/…`, `/de/…`, etc). If a translation isn't set for their locale, they fall back to the primary language.

***

## 5. Adding answer blocks

Every question can contain one or more **answer blocks**. In expert mode the full palette is visible on the right. In simple mode only the most common blocks are shown to keep the UI approachable.

### 5a. The full block catalogue

| Group        | Block               | Use it when                                                     |
| ------------ | ------------------- | --------------------------------------------------------------- |
| **Yes / No** | Checkbox            | Single yes/no or opt-in                                         |
|              | Toggle              | Yes/no but in switch form                                       |
| **Choices**  | Radio Group         | Single choice from a short list                                 |
|              | Dropdown            | Single choice from a long list                                  |
|              | Checkbox Group      | Multi-select from a short list                                  |
|              | **Checkbox Table**  | Matrix: multi-select across rows × columns (Likert scales etc.) |
|              | **Open Text Table** | Matrix: free text in each row × column cell                     |
| **Text**     | Short Text          | One-line free text                                              |
| **Number**   | Number              | Numeric value                                                   |
|              | Slider              | Scale / NPS (`0-10`, `1-5`, etc.)                               |
| **AI**       | **smartquestion**   | Conversational AI-powered interview with follow-ups             |
| **Special**  | Welcome Screen      | First-screen landing with a Start button                        |
|              | End Screen          | Thank-you screen                                                |
| **Redirect** | Redirection         | Auto-redirect to another URL                                    |

### 5b. Adding a block

1. Pick a question in the right-hand list.
2. Click any block in the **Controls** palette. It's inserted at the bottom of the current question.
3. Hover over the new block — a toolbar appears on the top-right corner with a pencil (edit) and a trash (delete) icon.
4. Click the pencil to open the edit popover where you can:
   * Change the block type (within the same group)
   * Rename the label
   * Toggle `Required`
   * See the internal response ID (e.g. `ctrl1`)
5. Click the trash to delete the block.

### 5c. Matrix blocks (Checkbox Table & Open Text Table)

Both matrix blocks open with a default 2 rows × 3 columns grid and an inline editor bar:

```text theme={null}
[+ Row] [+ Column]   [R: Row 1 ×]  [R: Row 2 ×]   [C: Column 1 ×]  [C: Column 2 ×]  [C: Column 3 ×]
```

* **+ Row** / **+ Column** — grow the matrix. New rows get a fresh property key on the schema so answers stay separated.
* **R:/C: chips** — click any chip to rename the row or column inline. Hit Enter to commit, Escape to revert.
* **×** on hover — delete a row or column (the last one is protected so the matrix is never empty).

Checkbox cells behave like a multi-select per row. Text cells accept free text at every intersection.

### 5d. Smartquestion (AI conversational block)

Adding a smartquestion converts the question into an AI-driven interview. Respondents see:

* A large circular microphone button in the middle of the screen
* A small **"I prefer to write"** checkbox under it

They can either **speak** (click the mic, talk, click again to stop; the platform transcribes on the fly) or **type** (toggle the checkbox and a text box appears). Either way, the AI then generates follow-up questions — the full Q/R chain is stored on the answer.

As soon as you select a question that contains a smartquestion, an **AI config panel** slides in on the right with these fields:

* **Question** — the visible prompt (mirrors the question title)
* **Contexte** — the persona / instructions passed to the AI (e.g. "You are a market research specialist investigating brand perception…"). This is what steers the follow-ups.
* **Mode** — optional tags (Vérification noms propres, Relances AI)
* **Mode de réponse**
  * **Vocale** — voice only
  * **Vocale ou texte** — voice with a "I prefer to write" fallback (default)
  * **Texte** — text only
  * **Vidéo** — video recording
* **Relances** — number of AI follow-ups, 1 to 4 (default 2)
* **Langue** — the interview language, or `None (user locale)` to auto-match

In **expert mode**, the inline smartquestion card collapses to a simple mic-only visual so you don't see the same config twice — the side panel is the source of truth.

***

## 6. Editing navigation buttons (Next / Previous)

Below every question preview, the builder shows a **Next Question** button (and a **Previous** button when the question is not the first in the order). Both labels are click-to-edit:

1. Click directly on the label.
2. Type your replacement text.
3. Hit Enter to commit (or click outside). Escape cancels.

Labels are saved per question under `uischema.options.navigation.{nextLabel, previousLabel}` and respondents see them exactly as written. If you leave a label empty it falls back to the locale-wide default (`Next Question` in English, `Question suivante` in French, etc.).

***

## 7. Display conditions (skip logic)

Click **Conditions** at the bottom of the right panel to configure when a question is shown. You can chain rules like:

```text theme={null}
Show this question WHEN
  Q1.ctrl1 == "choice1"
  AND Q2.ctrl1 > 5
```

Conditions reference earlier questions by their response ID and support the comparison operators `==`, `!=`, `>`, `<`, `>=`, `<=`. Imported questionnaires preserve any conditions the original document expressed.

***

## 8. Paramètres tab

Click **Paramètres** in the header to jump to survey-level settings:

### 8a. Variables URL

Define named variables that can be passed via the survey URL (`?gender=F&age=25`) and referenced in display conditions or the End Screen return URL template. Each variable has a name, a type (`text`, `number`, `boolean`, `object`), and an optional default value.

### 8b. Expert features

A single toggle that enables the full expert palette, the expert smartquestion editor, and the Preview / Widget tabs. Keep it off for authors who only need the simple-mode blocks.

***

## 9. Testing the survey

There are three complementary ways to QA a survey before sharing it.

### 9a. Test mode (inside the builder)

Click the **Test** button in the header's mode toggle. The currently selected question renders exactly as a respondent sees it, with a working **Next Question** button that navigates the whole flow. The end screen, the welcome screen, and any smartquestion follow-ups all fire normally.

Test mode is perfect for checking styling, slider defaults, matrix layouts, and the mic interaction without any network latency.

### 9b. Deploy → Test link

Click **Deploy** in the header. A small pop-up lists one direct link per supported locale:

![Deploy screen](https://auth.smartinterview.ch/storage/v1/object/public/documents/Deploy.png)

```text theme={null}
FR   https://www.smartinterview.ch/fr/<survey-id>
EN   https://www.smartinterview.ch/en/<survey-id>
DE   https://www.smartinterview.ch/de/<survey-id>
```

Toggle **Mode test** on at the top of the dialog and each link is augmented with `?user_id=test_<random>`. Because each `test_<random>` is treated as a brand-new respondent, you can:

* Take the same survey multiple times from the same browser
* Skip the "already completed" end-screen cache that real respondents would see on a repeat visit
* Separate QA answers from real ones later (all `user_id` values starting with `test_` are still written to the database but are easy to filter out)

Every time you toggle Mode test on, a fresh `user_id` is generated — copy the link, take the survey, toggle off and back on for the next run.

> **Warning:** a link without `?user_id=` remembers completion in `localStorage`. If you take a real link twice in the same browser the second visit lands directly on the end screen. Always use Mode test during QA.

### 9c. Generating synthetic test data

Once you have a test link, 2–3 runs is usually enough to light up every question in the Data tab:

1. Open the link in an **Incognito / Private window** to avoid cookie bleed.
2. Fill only the required fields (red asterisk). Optional fields can be skipped.
3. On smartquestion blocks, type a short answer so the AI has something to follow up on. Two or three sentences produce a realistic Q/R thread.
4. For each synthetic respondent, flip **Mode test** off and on in the Deploy dialog so you get a new `user_id`, then copy the updated link.

***

## 10. Reviewing responses (Data tab)

Click **Data** in the header. The Questions panel collapses and the centre fills with a pivoted table:

![Dataset](https://auth.smartinterview.ch/storage/v1/object/public/documents/Dataset.png)

* One **row** per unique `user_id`.
* One **column** per non-special question, in builder order.
* `—` marks a question the respondent didn't reach or didn't answer.
* The first two columns (`#` + `Respondent`) are sticky-left, so they stay pinned while you scroll horizontally through many questions.

### 10a. Filtering

Above the table, a chip bar lets you narrow the view:

```text theme={null}
Filtrer par question :  [All (N)] [Q1 (n)] [Q2 (n)] [Q3 (n)] …
```

* **All** — show every question (default). The number is the respondent count.
* **Qx** — show only that one column. Other columns are hidden, rows remain.

### 10b. AI / smartquestion cells

For conversational questions, the cell renders the **full Q/R conversation** stacked inline:

```text theme={null}
R: I was looking for better pricing.
Q: Can you clarify what you mean by "better"?
R: The competition is 20% cheaper.
Q: What features matter most to you?
R: Speed and reliability.
```

Original follow-up questions are in italic grey (marked `Q:`). Respondent answers are in solid text (marked `R:`).

### 10c. Personas

![Personas](https://auth.smartinterview.ch/storage/v1/object/public/documents/Personas_2.png)

## The Generate personas button creates scenarios to help anticipate the launch of an AI survey. Click the Save icon to store them so they appear in the dataset.

## 11. Exporting raw data

At the top-right of the Data tab, click **Télécharger / Download** for a dropdown of export formats:

| Format            | What you get                                                                                                                 |
| ----------------- | ---------------------------------------------------------------------------------------------------------------------------- |
| **Excel (.xlsx)** | A multi-sheet workbook. One sheet lists every respondent with their answers, one sheet per question if you need to dig.      |
| **CSV**           | A flat file with one row per respondent. Multi-value fields are pipe-joined. Opens cleanly in pandas / R / Stata.            |
| **JSON**          | The raw answer blobs exactly as stored in the database. The most lossless format — use it if you're building an integration. |

Under the hood, the button calls:

```text theme={null}
GET /api/survey/<survey-id>/export?format=excel|csv|json
```

Only the survey owner (or a member of the owning company) can call it, so your data is not publicly reachable.

For programmatic access to responses per question, there's also:

```text theme={null}
GET /api/survey/<survey-id>/answers?question_id=<question-id>
```

/

which returns structured Q/R parts. This is exactly what the Data tab reads internally, so it's handy when you want to debug what the platform sees for a specific submission.

***

## 12. Deploying & sharing

Once the survey is ready for real respondents:

1. Make sure every question has a meaningful title (and translations if your audience is multilingual).
2. Click **Deploy** in the header.
3. Copy the link for the locale you want to share. Note that the link starts with the locale path segment (`/fr/`, `/en/`, `/de/`) — the survey UI (Next button text, end screen strings, error messages) auto-localises based on that segment.
4. Share the link on your own channel (email, panel provider, QR code, Slack…).
5. Optionally append tracking parameters:
   ```text theme={null}
   https://www.smartinterview.ch/en/<survey-id>?gender=F&age=25&source=linkedin
   ```
   Any parameter declared under **Paramètres → Variables URL** becomes available inside display conditions and the End Screen return URL template.

### Embedding in your own site (expert mode)

If you prefer to host the survey inside your own site:

1. Enable expert mode in **Paramètres → Expert features**.
2. Switch to the **Widget** tab that appears.
3. Customise width, height, and theme.
4. Copy the generated `<iframe>` snippet and paste it into your site.
5. The iframe posts a `smartinterview:complete` message to the parent window when the respondent finishes — use it to trigger any follow-up logic on your side.

***

## 13. Sharing / collaboration

* Invite teammates from the **Inviter un membre** button in the dashboard sidebar. Company members inherit RLS permissions and can edit every survey owned by the company.
* All builder edits are auto-saved two seconds after the last change; the header displays `Dernière sauvegarde : HH:mm` so you always know the latest save time.

***

## 14. Troubleshooting cheat sheet

| Symptom                                                        | What to check                                                                                                                                                  |
| -------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| "Aucune réponse manquante" error on a slider I haven't touched | The slider auto-seeds its default value on mount. If you still see the error, hard-refresh the tab — the cache may be stale.                                   |
| End screen appears immediately on a test link                  | You visited the link previously without `?user_id=...`. Either clear `localStorage` for that origin or copy a fresh **Mode test** link from the Deploy dialog. |
| Imported questions "disappear" after refresh                   | The questions are staged in the browser's draft state. Wait two seconds for the auto-save indicator to turn green before refreshing.                           |
| Next button shows in the wrong language                        | Someone set a per-question custom label that overrides the URL locale. Open each question in Edit mode and clear the Next / Previous button text.              |
| Matrix has too many rows after testing                         | Delete extra rows from the builder's matrix editor (`×` on hover). At least one row and one column are preserved.                                              |
| smartquestion doesn't generate follow-ups                      | Check the AI config panel on the right: `Contexte` must be non-empty, and `Relances` must be ≥ 1.                                                              |

***
