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

# Lumovi on a phone

> A server’s page lays itself out for a narrow screen. On a phone it reads everything you can read, and makes a short list of changes.

Lumovi served from a cluster works in a phone’s browser, and a tablet’s. There’s nothing to install and nothing to turn on: the page lays itself out for the room it has. The desktop app is unchanged, since its window is never narrower than 1024 pixels.

| The page’s width | What changes |
| - | - |
| 1024 px and up | Nothing: the sidebar, a list, and a detail beside it |
| 640 to 1023 px | The sidebar is a drawer. A detail opens over the list. Lists stay tables |
| Under 640 px | One column: lists as rows, a detail as a page of its own, menus and dialogs as sheets from the bottom. And [fewer changes](#what-a-phone-changes) |

It’s the width that decides, not the device. A phone held sideways is usually wider than 640 pixels and gets the middle layout, and a narrow browser window on a computer gets a phone’s.

Wherever the page is used by touch, whatever you press is at least 44 pixels high and nothing needs a hover. Nothing scrolls sideways except a strip of tabs.

## Finding your way

* **The sidebar is a drawer.** The menu button in the top bar opens it. Choosing a page closes it, and so does a tap beside it.
* **Cluster and Namespace** are two chips under the top bar. Each opens a sheet to choose from.
* **Search** in the top bar opens the command palette.
* There are no back and forward buttons of Lumovi’s own: the browser’s do that.

<Frame caption="The overview on a phone.">
  <img className="block dark:hidden mx-auto" style={{ maxWidth: "320px" }} loading="lazy" src="https://cdn.jsdelivr.net/gh/Lumovi/Lumovi@main/docs/screenshots/phone-overview-light-1x.webp" alt="Lumovi from a cluster, on a phone: the overview of production, in all namespaces. Nodes ready 3/4 with 1 not ready, 28 pods running with 8 unhealthy, workloads healthy 8/12 with 4 degraded, and 12 warnings in the last hour; then CPU at 41%, 11.4 of 27.5 cores in use, and memory at 52%." />

  <img className="hidden dark:block mx-auto" style={{ maxWidth: "320px" }} loading="lazy" src="https://cdn.jsdelivr.net/gh/Lumovi/Lumovi@main/docs/screenshots/phone-overview-dark-1x.webp" alt="Lumovi from a cluster, on a phone: the overview of production, in all namespaces. Nodes ready 3/4 with 1 not ready, 28 pods running with 8 unhealthy, workloads healthy 8/12 with 4 degraded, and 12 warnings in the last hour; then CPU at 41%, 11.4 of 27.5 cores in use, and memory at 52%." />
</Frame>

## Lists

Under 640 pixels a list has no table. Each object is two lines: its name and status, then the first facts of its kind and its age. A pod’s second line says "2/2 ready · 0 restarts", a Job’s how many completed, a CronJob’s when it runs next. With every namespace listed, each row starts with its own.

<Frame caption="A list on a phone: each row takes two lines.">
  <img className="block dark:hidden mx-auto" style={{ maxWidth: "320px" }} loading="lazy" src="https://cdn.jsdelivr.net/gh/Lumovi/Lumovi@main/docs/screenshots/phone-pods-light-1x.webp" alt="Pods on a phone, in production across all namespaces: 38, with chips for Failing 5, Warning 3, Running 28 and Completed 2. Each pod takes two lines, its name and status, then its namespace, containers ready, restarts and age; failing pods come first, two of them in CrashLoopBackOff." />

  <img className="hidden dark:block mx-auto" style={{ maxWidth: "320px" }} loading="lazy" src="https://cdn.jsdelivr.net/gh/Lumovi/Lumovi@main/docs/screenshots/phone-pods-dark-1x.webp" alt="Pods on a phone, in production across all namespaces: 38, with chips for Failing 5, Warning 3, Running 28 and Completed 2. Each pod takes two lines, its name and status, then its namespace, containers ready, restarts and age; failing pods come first, two of them in CrashLoopBackOff." />
</Frame>

* **Sort** opens a sheet of what the list can be sorted by. Choose one again to turn it around; the sheet says which way in the column’s own words, like "A to Z" or "Worst first".
* **Filters** open as sheets too.
* A long name is cut in the middle, so two objects that differ only at the end stay apart.
* There’s nothing to tick: [selecting several objects](/changes/bulk) needs a larger screen.

## An object’s page

A tap on a row opens the object as a page, with **Back** to return to the list. Under its name it says its kind, namespace and cluster. Its facts are stacked, and its tables are cards.

<Frame caption="A pod’s page on a phone.">
  <img className="block dark:hidden mx-auto" style={{ maxWidth: "320px" }} loading="lazy" src="https://cdn.jsdelivr.net/gh/Lumovi/Lumovi@main/docs/screenshots/phone-pod-light-1x.webp" alt="A pod’s page on a phone: storefront-cjt7gd2jtx-75pbc in shop, Running, with Restart and the tabs Overview, Logs, Metrics, Events, Audit and YAML. Its details (when it was created, its ReplicaSet, node, IPs, QoS class, service account and restart policy), then its containers, first the init container migrate, completed." />

  <img className="hidden dark:block mx-auto" style={{ maxWidth: "320px" }} loading="lazy" src="https://cdn.jsdelivr.net/gh/Lumovi/Lumovi@main/docs/screenshots/phone-pod-dark-1x.webp" alt="A pod’s page on a phone: storefront-cjt7gd2jtx-75pbc in shop, Running, with Restart and the tabs Overview, Logs, Metrics, Events, Audit and YAML. Its details (when it was created, its ReplicaSet, node, IPs, QoS class, service account and restart policy), then its containers, first the init container migrate, completed." />
</Frame>

Its tabs are the ones a larger screen has, except **Shell** and **Map**: a shell needs a keyboard, and a map more room. As you scroll, the top bar takes the object’s name and the tabs stay in view.

On the **Logs** tab, lines wrap. **Follow** starts on and **Timestamps** off. **More** holds the rest: **Show the previous container**, **Copy logs** and **Download**.

The **YAML** tab reads. Editing it needs a larger screen.

## What a phone changes

Under 640 pixels, Lumovi reads everything you can read, and makes these changes, each behind its usual confirmation:

* **Approve or reject a change an AI assistant asks for.** See [below](#approving-an-assistant’s-change).
* **Restart** a workload.
* **Restart** a pod that has a controller to replace it.
* **Scale** a workload.
* **Cordon** and **Uncordon** a node.

Everything else that changes a cluster or Lumovi’s own settings waits for a larger screen: deleting, editing, creating, rolling back, draining, shells, [copying files](/debug/copy-files) to or from a pod, installing or upgrading a Helm release, applying right-sizing advice, and setting access or what assistants may do.

What isn’t done there isn’t shown: no greyed-out button, no menu of more, and no key or command in the palette that leads to it. Where you’d look for it, one line says where it’s done, like "Open Lumovi on a larger screen to upgrade it, roll it back or uninstall it." A dialog opened with room, then narrowed, closes, unless it’s for one of the changes above.

<Note>
  It is a rule of the phone’s interface, not a security boundary. A server can’t know how wide a screen is: turn the phone sideways, or ask the browser for the desktop site, and everything is offered again. What protects a cluster is what always does: each person’s RBAC, [Lumovi’s access](/server/access) and [read-only mode](/changes/read-only). Nothing on a phone is laxer than on a larger screen, only narrower.
</Note>

## Approving an assistant’s change

Under 640 pixels, a change an [AI assistant](/assistants/approvals) asks for doesn’t open over what you’re doing. It arrives as a line at the bottom of the page that says a change waits for you. A tap on it opens the change as a sheet, with everything the dialog shows on a larger screen: who asks and why, the cluster and its **Production** mark, the diff, the command that does the same, and how long it waits. Its title takes up to three lines; a name too long for them is shortened in its middle, with its end kept, and is whole in the change below. The line under it that says where, the kind, namespace and cluster with the **Production** mark, is always whole. Lumovi’s own dialogs, like Scale, do the same.

<Frame caption="An assistant’s change, waiting for an answer on a phone.">
  <img className="block dark:hidden mx-auto" style={{ maxWidth: "320px" }} loading="lazy" src="https://cdn.jsdelivr.net/gh/Lumovi/Lumovi@main/docs/screenshots/phone-approval-light-1x.webp" alt="An AI assistant’s change waiting on a phone, in a sheet over the overview: it asks to scale Deployment storefront to 5 replicas, in shop on production, with its reason (checkout latency has doubled and the pods are at 95% CPU). The cluster accepts it; the diff turns replicas: 3 into 5, with the equivalent kubectl command below. It waits 6:00 more, with Reject… and Approve." />

  <img className="hidden dark:block mx-auto" style={{ maxWidth: "320px" }} loading="lazy" src="https://cdn.jsdelivr.net/gh/Lumovi/Lumovi@main/docs/screenshots/phone-approval-dark-1x.webp" alt="An AI assistant’s change waiting on a phone, in a sheet over the overview: it asks to scale Deployment storefront to 5 replicas, in shop on production, with its reason (checkout latency has doubled and the pods are at 95% CPU). The cluster accepts it; the diff turns replicas: 3 into 5, with the equivalent kubectl command below. It waits 6:00 more, with Reject… and Approve." />
</Frame>

* **Approve** can’t be pressed for a moment after the sheet opens, or after it moves on to the next change that waits. A tap meant for something else, or a second tap, approves nothing.
* **Reject…** is at the left edge and **Approve** at the right.
* Dragging the sheet down, or a tap outside it, puts the change aside. That isn’t an answer: the change waits, and the line at the bottom of the page brings it back.
* Any change an assistant may ask for can be approved here, a deletion included. Where a larger screen asks you to type the object’s name first, so does a phone.

Setting an assistant up, and setting what it may do, are done on a larger screen. An assistant’s request to connect can be answered on a phone: when it sends you to Lumovi to allow it, that page opens here too.

## Notes

A note that something happened (a change was made, a change failed) shows across the bottom of the screen, above the line of changes that wait, and leaves after a few seconds.

While a sheet is open, a note is never drawn over it. It’s the sheet’s first line instead, and where several come at once it shows the newest failure, or else the newest, with "and 2 more". In a sheet that is itself about a change, the line says that it’s about a different one: "The change before: scaled cart to 5 replicas, in demo." in the sheet of an assistant’s change, "Another change: …" in one of Lumovi’s own dialogs, like Scale. It always ends with its cluster, and that end is never cut off: a line too long for one line takes a second, then a long object name and then a long cluster name are shortened in their middle, then it takes a third. Where a sheet is too short to hold the line, the note waits and shows when the sheet closes.


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