This tutorial uses PRISM file-based routing: every folder under src/app/ becomes a URL, with nested layouts and server-side loaders.
Read the routing docs →Components come from bext/ui — a faithful shadcn/ui port for bext and PRISM, styled through route_css tokens.
Explore bext/ui →A server action handles the form POST, validates it, and returns a result — no API to write.
To mutate data, export an action alongside the component. On a POST, bext runs the action server-side before re-rendering the page; whatever it returns arrives as the actionData prop.
export async function action({ request }) {
const form = await request.formData();
const name = String(form.get("name") ?? "").trim();
if (!name) return { error: "Name is required." };
return { ok: true, name };
}The form is a plain <form method=\"post\"> — it works even with JavaScript off. Submit it in the preview to watch the action run and the page re-render.