Contract AI could sound certain while separating answers from their legal source.
The answer matters.
The clause behind it matters more.
I designed and built an AI contract-review workspace that keeps recommendations tied to the source—and every proposed change inspectable and reversible.

Product model, UX, frontend, and API integration.
Keep the document primary and every recommendation traceable and reversible.
Upload, clause risks, redlines, suggestions, comparison, and contextual Q&A.
An inspectable contract-review MVP built around source-grounded decisions.
01 / Trust model
Do not replace the document with a confident chat box.
Contract review is not a summarization problem. A useful recommendation must remain connected to the original language, its location, the proposed replacement, and the consequence of accepting it. Claussal treats the agreement—not the assistant—as the primary object.
02 / Review workspace
One workspace for reading, locating, and deciding.
The layout holds three levels of attention at once: the agreement outline, the document itself, and the active risk or suggestion. Reviewers can move between clauses without losing their place or accepting an AI recommendation blindly.
Document first
The central reading plane gets the largest share of the interface.
Linked evidence
Risks and suggestions point back to identifiable clauses.
Reversible action
Changes can be staged, accepted, rejected, or undone.


03 / Long-running AI
Analysis takes time.
The interface should explain what time means.
Uploading and analysing a long contract involves multiple systems and can fail at multiple points. The experience separates upload progress from analysis stages, persists the document identifier, restores interrupted sessions, and returns users to a recoverable state when the pipeline fails.
Upload
File validation, visible progress, and Drive import.
Analyse
Scanning, clauses, risks, redlines, and finalization.
Restore
Persist the document ID and resume polling after interruption.
Recover
Explicit error state, reset path, and safe retry.


04 / Implementation
The interface carries the state of the actual pipeline.
The React context coordinates upload progress, analysis stages, document restoration, selected clauses, redline decisions, and assistant messages. It connects to a FastAPI upload service and polls for completed analysis rather than simulating an instant AI response.
const uploadDocument = async (file: File) => {
setIsUploading(true)
setAnalysisStep('scanning')
const response = await apiClient.post(
'/api/v1/upload/pdf', formData,
{ onUploadProgress: updateProgress }
)
const pdfId = response.data.pdf_id
setAnalysisStep('clauses')
const result = await clausiaService
.pollForAnalysis(pdfId, setAnalysisStep)
setAnalysisResult(result)
}Explicit phases
The UI renders named analysis stages instead of a generic spinner.
Session restoration
A stored document ID lets the client recover work after reload.
Upload and polling
The frontend reflects real request progress and delayed processing.
Typed redline states
Pending, staged, accepted, and rejected decisions are represented explicitly.
05 / Current state
A working vertical slice—not a claim of legal certainty.
The MVP proves the interaction model and the connection between document upload, asynchronous analysis, clause navigation, risk review, redlines, and contextual Q&A. Before broader deployment, I would validate citation accuracy, reviewer agreement, false-positive risk rates, export fidelity, keyboard navigation, and recovery under real processing failures.
Important boundary: Claussal supports review; it does not replace legal judgment. The product should communicate model uncertainty and preserve a clear human approval step before changes leave the workspace.
Next case study
ContentOSFrom footage to ideas.