Skip to main content
The Project module renders a customer’s onboarding project — its milestones, tasks, progress, and editable fields — and lets the customer update them. Use the pre-assembled component, drop to the headless hook, or compose your own layout from primitives. Everything here reads connection + auth from <StatisfyProvider> (except the standalone createProjectClient).

ProjectModule

The pre-assembled, ready-to-render project view.
It renders a header, a progress meter, a milestone journey, and the task list — and writes edits back through the gateway, scoped to the session’s customer.

Headless: useProject

For full control of the layout, use the hook. It resolves the project (by id, or via config when you omit the id), exposes the data, and provides optimistic mutations.

UseProjectResult

updateTask / updateProject apply your change optimistically (the UI updates immediately), then reconcile with the server’s full response — and roll the row back if the request fails. They reject on failure so you can show an inline error.
Send only the fields you’re changing (a diff), and only editable fields. A non-editable or unknown key is rejected with 400 not_editable; a bad value with 400 invalid_option / 400 invalid_type.

Composable primitives

Build a bespoke layout from the same building blocks ProjectModule uses. Each is schema-driven and styled with the SDK’s theme. There’s also a formatFieldValue helper that returns the display string for a value + schema (handy outside React).

Standalone client: createProjectClient

When you want project data outside React (or your own state layer), use the client directly. It doesn’t need the provider — pass config explicitly.

Data shapes

See the API Reference for endpoints, headers, and error codes.