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

# UI Review: Loupe

> Check the pages a merge request changes in a real running app, with desktop and mobile screenshots on every MR/PR.

Loupe opens the pages a merge request or pull request (MR/PR) changes and checks them like a user would. It runs your app on a machine you connect, then posts screenshots and any problems it found on the MR/PR.

## Why use Loupe

* **Catch broken UI before merge.** Loupe checks the running app, not the source: broken flows, crashes and blank pages, clipped or overlapping layout, phone layouts, wrong data, and missing empty, loading or error states.
* **See the change without running it.** Reviewers get desktop and mobile screenshots of the changed pages, with no branch checkout.
* **Spot what moved.** Each page is compared with the target branch, and every visible change is numbered.
* **One place to act.** Real problems show as findings in the same review as your code findings.
* **Works on your stack.** Next.js, Nuxt, SvelteKit, Remix, Astro and Vite apps, and server apps such as Rails, Django, Laravel and ASP.NET, on every code host Review supports.

## Before you start

* A repository connected in [Review setup](https://docs.cloudthinker.io/guide/code-review/setup.md).
* A **Linux** machine with a checkout of that repository, Node and Bun installed, and about 11 GB of free memory for a run. It can be a server, a VM or a CI runner. macOS and Windows machines can't run Loupe, so use a Linux one. Loupe runs on it as a shared [Worker](https://docs.cloudthinker.io/guide/workers.md).
* **Allow Workers** turned on in workspace settings. It's on unless a workspace Admin turned it off.
* The workspace Admin role to connect the machine and turn Loupe on. See [Roles](https://docs.cloudthinker.io/guide/security/roles.md).
* A test account for your app, if its pages sit behind a sign-in. Don't use your own account.

## Set up Loupe

**1. Open the Loupe row**

Go to **Review → Settings**. In the **General** section, find **Loupe** and click **Set up**. A sheet opens with three steps: **Connect a machine**, **Check your app** and **Ready**.

**2. Connect a machine**

Run the two lines the sheet shows in your repository folder on the Linux machine. They install the CloudThinker CLI and start the machine. If the command expires, click **Get a new command**. To reuse a shared Worker, pick it under **Run it on**.

**Success state:** the sheet moves on by itself once the machine is online, then lists what the machine has. Fix any item marked **Not found** and click **Check again**.

**3. Check your app**

Click **Check my app**. CloudThinker prepares your app, signs in with the test account and opens a few pages. It takes about 3–5 minutes. If it asks a question, reply in the chat inside the sheet.

Loupe goes live only after it signs in and sees your pages. If it could only see public pages, choose **Use public pages only** or **Add a test account**.

**4. Review what it saw**

Keep the sheet open. When the check ends, Loupe turns on for the repository and shows the pages it opened. If it doesn't turn on by itself, click **Turn on Loupe**.

**Success state:** the sheet reads **Ready on** your repository, and the Loupe row shows **Ready**.

To pause Loupe, open the **Loupe actions** menu on the row and select **Turn off**. Your setup is kept, so you can turn it back on later.

## What you see on the MR/PR

Every new MR/PR that changes your app's pages gets one **Loupe** note: each checked page at desktop and mobile size, with its numbered changes from the target branch. Each push updates the same note. Problems show as findings in the review. When Loupe can't run, the note says why and what to do next.

## How it works

1. Review starts on a new MR/PR, and Loupe starts at the same time on your connected machine.
2. Loupe starts this MR/PR's version of your app and the target branch's version, side by side, isolated from the rest of your machine.
3. It opens the changed pages at desktop and mobile size and walks the flows the change touches.
4. It posts the Loupe note and files any problem as a finding.

## Troubleshooting

> [accordion] An MR/PR has no Loupe note
>
> Check that the Loupe row shows **Ready** and that Loupe is on for that repository. Loupe checks MRs/PRs that change your app's pages, so a change with no UI files gets no note. The MR/PR branch must also live in the same repository, not a fork.

> [accordion] The note says the Worker is offline
>
> The machine stopped. Start it again on the machine, or pick another shared Worker in **Review → Settings**. The Loupe row shows **Needs attention** until the machine is back. Loupe checks the next push again.

> [accordion] The note says the machine can't run Loupe
>
> Use a Linux machine with a recent kernel (6.2 or newer). Start it from your project folder, not your home folder.

> [accordion] The note says the workspace is out of credits
>
> Upgrade the plan or wait for the quota to renew. See [usage and credits](https://docs.cloudthinker.io/guide/billing/usage.md). Loupe checks the next push again.

> [accordion] The sheet stays on Waiting for the machine
>
> The command may have expired: click **Get a new command**. If the machine went offline, run the command again. Also allow outbound HTTPS on port 443 from the machine.

## Related

> [card] [Self-Hosted Sandbox (Workers)](https://docs.cloudthinker.io/guide/workers.md)
>
> Connect and manage the machine Loupe runs on

> [card] [Review Setup](https://docs.cloudthinker.io/guide/code-review/setup.md)
>
> Connect your Git provider and repositories

> [card] [Review Workspace](https://docs.cloudthinker.io/guide/code-review/review-workspace.md)
>
> Triage and settle the findings Loupe files

> [card] [Review Troubleshooting](https://docs.cloudthinker.io/guide/code-review/troubleshooting.md)
>
> Fix common Review problems


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.