diff --git a/apps/fabro-web/app/components/environment-form.tsx b/apps/fabro-web/app/components/environment-form.tsx
index 5d5a9b5f2..514d0b987 100644
--- a/apps/fabro-web/app/components/environment-form.tsx
+++ b/apps/fabro-web/app/components/environment-form.tsx
@@ -250,11 +250,13 @@ export function EnvironmentFormFields({
onChange={(e) => patch({ provider: parseProvider(e.target.value) })}
className={INPUT_CLASS}
>
- {Object.values(EnvironmentProvider).map((provider) => (
-
- ))}
+ {Object.values(EnvironmentProvider)
+ .filter((provider) => provider !== EnvironmentProvider.LOCAL)
+ .map((provider) => (
+
+ ))}
diff --git a/apps/fabro-web/app/routes/settings-environments.tsx b/apps/fabro-web/app/routes/settings-environments.tsx
index 500a4e3c0..cde43bfac 100644
--- a/apps/fabro-web/app/routes/settings-environments.tsx
+++ b/apps/fabro-web/app/routes/settings-environments.tsx
@@ -23,6 +23,10 @@ import { useToast } from "../components/toast";
// in the UI instead of letting the delete fail with a 409.
const PROTECTED_ID = "default";
+// `local` is a reserved, in-memory environment (present only when the local
+// sandbox provider is enabled). It cannot be edited or deleted.
+const RESERVED_ID = "local";
+
const MENU_ITEM_CLASS =
"flex w-full items-center gap-2 px-3 py-2 text-left text-sm text-fg-3 transition-colors data-focus:bg-overlay data-focus:text-fg data-focus:outline-hidden disabled:cursor-not-allowed disabled:opacity-60";
@@ -153,6 +157,11 @@ function EnvironmentRow({
{environment.id}
{environment.provider}
+ {environment.id === RESERVED_ID ? (
+ reserved
+ ) : environment.id === PROTECTED_ID ? (
+ protected
+ ) : null}
{resourcesSummary(environment)} · network {environment.network.mode}
@@ -184,6 +193,14 @@ function resourcesSummary(environment: Environment): string {
return parts.length > 0 ? parts.join(" · ") : "Default resources";
}
+function StatusTag({ children }: { children: string }) {
+ return (
+
+ {children}
+
+ );
+}
+
function RowMenu({
environment,
disabled,
@@ -193,6 +210,7 @@ function RowMenu({
disabled: boolean;
onDelete: () => void;
}) {
+ const reserved = environment.id === RESERVED_ID;
const protectedFromDelete = environment.id === PROTECTED_ID;
return (