Editing a setting
SimulatedEvery keystroke updates the preview immediately and is persisted to the platform's own backend on a short debounce. Validation runs locally so it is instant, and again on the server so the client is never the only guard.
- In this platform:
- Any configuration section, e.g. /consumer-portal/configure/return-reasons
- In production:
- rebound-admin-app (Consumer Portal), MyReBound (Customer Support Portal), retail-portal admin (Retail Portal), Postman (Headless API — no UI exists today)
- 1
Types into a field, or toggles a switch.
- Handled by
- The section page calls useWorkspace.update(recipe), which structurally clones the workspace and applies the change.
- Configuration read
- The whole workspace document
- Received by
- Browser only — no request yet
- Processing
- buildSetupReport() re-runs against the new document
- Section status, blocking issues and the sidebar dots all recompute
- Front end reacts
- Preview re-renders from the new configuration on the same frame. The save indicator shows “Unsaved changes”.
- 2
Stops typing for 700 ms.
- Handled by
- The debounced writer inside the workspace store.
- Configuration read
- The whole workspace document
- Request
- PUT/api/workspace
The complete Workspace object
- Received by
- Portals Platform (Next.js route handler)
- Processing
- configRepository.put() writes the document and stamps updatedAt
- buildSetupReport() runs server-side and is returned alongside
- Response
- { workspace, report }
- Front end reacts
- Save indicator shows “Saved”. The server's report replaces the local one.
- Downstream
- Nothing outside the platform — editing is not publishing
Whole-document writes are deliberate: the setup report spans every portal, so partial writes would let the client observe an inconsistent state.
Persistence is in-memory in this deployment. On a serverless runtime each cold start re-seeds from the baseline. Mounting a database-backed ConfigRepository is a single-file change.