XISLABS

Case study · Document platform · Built with Claude Code

OuterDocs: PandaDoc replaced by a contractor's own document platform

A US commercial contractor ran its proposals, RFPs and contracts on PandaDoc, Google Drive and a CRM that did not talk to each other. We built their own document platform. A rep now gets a finished request for proposal from one click on a deal, and AI checks every page against the design it came from.

DealSample Contracting Co.Generate RFPGenerating RFPCopy the masterFill from the bidReview each pageOpen the documentCancel
Illustration
Client
US commercial construction contractor with three brands
Industry
Construction
Engagement
April 2026 to today, with releases to production most days
Our team
One developer working with Claude Code
Client's team
The founder as product owner and designer, and the developer of their CRM
What we built
Document platform (web app and API), PandaDoc migration, CRM integration, AI document generation and review
Built with
Claude Code
AI in the product
Claude reviews every page; a separate writing model fills the text
Status
Live
  • 3,670PandaDoc documents moved in, with their signing certificates
  • 69master templates across three brands
  • About 6 minfrom one click on a deal to a finished, reviewed RFP
  • 0files lost moving 15,846 files off Google Drive

The problem

Every bid the contractor sends starts in their CRM, gets estimated, and ends as a branded document: a request for proposal for the estimators, a construction proposal for the client, then a contract. That work was spread across PandaDoc for the documents, Google Drive for the files, a project board for status and the CRM for the deal.

Staff retyped the same facts into each one, and the documents drifted from the company's own design. The company decided not to renew PandaDoc, which set four goals:

  • Keep everything already signed. Every PandaDoc document and template, with its signed PDF and signing certificate, searchable and openable.
  • Look exactly like the company's designs. Each document type and brand as a master template that matches the designer's files.
  • Work from the CRM. One click on a deal makes a correct document without retyping, and its status flows back to the deal.
  • Run the business on it. Signing, approvals, roles and workspaces good enough for the whole team to leave PandaDoc.

What we built

A page editor for business documents.

Text, tables, images, fields and signature blocks placed exactly on the page. Pricing tables have optional items, and variables fill from the deal.

1,879 frontend tests

Sample Contracting Co.ProposalItemPriceSignatureSign hereFieldsClient nameProject addressBid totalStart date
Illustration

The full PandaDoc history, moved in.

A sync engine downloaded every document and template and sorted each one into the company's 21 document types. Signed copies keep their signing certificates beside them.

3,670 documents · 499 certificates

DocumentsProposalSignedRFPContractSignedProposalWork orderSignedSignedCertificate
Illustration

The company's designs as editable masters.

The designer works in HTML. An importer reads each design into the editor block by block, with the same fonts, colours and positions.

69 masters · 97% of words in place

Signing, approvals and roles.

Signing links and reminders, view-only documents, approval rules with thresholds, and five built-in roles plus custom ones.

115 database changes, none of them destructive

One click from the CRM.

“Generate RFP” on a deal picks the brand, workspace and master, sends the bid's data and shows live progress with a Cancel button. The document opens with no second login.

Status returns to the CRM as it changes

DealSample Contracting Co.Generate RFPGenerating RFPCopy the masterFill from the bidReview each pageOpen the documentCancel
Illustration

Off Google Drive with nothing lost.

Every file moved into the platform's own storage in the folder layout people knew. Each copy was checked by size and checksum before it was linked.

15,846 files · 0 failed

How an RFP is made

6 steps. Use the arrows to go through them.

Sample Contracting Co.ProposalScope
Illustration. Proposal: itemized cost and scope
Sample Contracting Co.Request for proposal
Illustration. RFP: cover
Sample Contracting Co.Scope of work12345
Illustration. RFP: scope of work

How the AI is kept in check

A master is a fixed design filled with an example project's words. Real bids do not fit that shape, so the platform writes the bid into the master and then checks the result. Three rules apply to every change the AI makes:

  • Nothing invented. Every number, sum, date and address it writes must appear in the bid's data. Otherwise it is dropped.
  • Nothing lost. A rewrite may replace the master's example wording, but never a line already written for this bid.
  • Only measured problems get more room. A block grows or shrinks only when the printed page shows its text cut off.

These rules came out of testing. We ran the review on five real bids, looked at every page, and turned each mistake into a rule with a test.

Sample Contracting Co.Scope of work1 Lightingempty gap12 CeilingsReplace ceiling tiles in the mainhall and...2
Illustration · Before review
Sample Contracting Co.Scope of work1 Lighting2 CeilingsReplace ceiling tiles in the mainhall and both corridors.12
Illustration · After review

Illustration of a real fix from the review.

Results

BeforeNow
Documents in PandaDoc, files in Google Drive, status on a project board, deals in the CRMOne document platform linked to the CRM
Staff retyped the same facts into each toolOne click on a deal fills the document from the deal's data
Each RFP assembled by handA finished RFP in about six minutes, with every page reviewed
Documents drifted from the company's design69 master templates read in from the designer's own files
A PandaDoc renewal coming upPandaDoc can be retired, with 3,670 documents and 499 certificates kept

Figures measured on 11 November 2026.

Under the hood: stack, models and timeline

Stack: React, Vite and TanStack on the front end. FastAPI and PostgreSQL on the back end. Supabase storage, Playwright for printing, hosted on Railway and Vercel.

Models: Claude Opus 5.5 designs new documents and reviews each page. A lower-cost model writes the bulk of the text. Every document records what its own model calls cost.

Measured cost: the page review costs $1.46 to $1.65 per RFP and the writing $0.15 to $0.17, measured on two real bids on 11 November 2026.

How the two apps connect: the document platform and the client's CRM stay separate products with their own databases. They talk through an API key for the CRM's requests, signed webhooks for status, a one-time sign-in hand-off and one shared workspace switcher.

Timeline:

WhenPhaseWhat shipped
Apr to MayFoundationsPandaDoc sync engine, first document builder and data model
Jun to JulThe builderTables, attachments, roles, templates by type, AI document building, importing a PDF as an editable copy
Aug to SepA real productA reference library of 23 designs, companies, brands, workspaces and roles, sign-up and Google sign-in, signing emails
OctRedesign and migrationThe founder's new interface, approvals, view-only documents, the PandaDoc archive viewer, the migration plan
NovIntegration and AI qualityGenerate RFP from the CRM, 69 exact masters, storage off Google Drive, single sign-in, the page review

By the numbers: 3,359 commits, 3,587 backend tests and 1,879 frontend tests.

How it was built: one developer worked with Claude Code across the whole stack. Twice-weekly client meetings were transcribed and broken into items, and most items shipped within a day. Each day ended with a written update.

Have a tool you want to stop renewing?

Tell us what it does for you today on a 30-minute call. You leave with a plan and a cost, in writing.

Book a discovery call