Ralti is a spreadsheet-first workspace application. The web client uses Next.js and React. The installed iOS shell renders that same responsive application in a persistent system WebView and adds device integrations; Android currently retains the earlier Flutter interface. These clients use the same Node.js API for authorization, validation, persistence, and background work. The public marketing website is a separate deployment from the authenticated application.
Follow a change from idea to saved record#
- A client selects a workspace and submits a typed operation or asks for an AI proposal.
- The API verifies identity, membership, role, request scope, and the expected workspace revision.
- The domain engine validates the entire operation batch, including references between operations.
- A database transaction persists the accepted changes, revision, activity, and undo information.
- Clients receive the updated state; background jobs process eligible events and search indexing.
| Layer | Responsibility |
|---|---|
| Interface | Navigation, editing, review, and presentation |
| Domain | Types, invariants, operations, and risk |
| Persistence | Transactions and database boundaries |
| Background work | AI, email, workflows, and search |
AI interpreters stage proposals. Their tools can read permitted context, prepare draft batches, and validate the result; generation itself does not write workspace records. The normal application path commits reviewed changes through the same engine used for manual edits. Saved agents have their own explicitly configured control mode and stricter operation scope.
Treat the checked-in domain types and route handlers as the implementation contract. “Space” and “item” remain internal names for sheets and records in several API payloads; changing the UI label does not rename those wire fields.