Sample documents
Skadi's document system renders 10 document types from a single
component library. Every render goes through /api/render-pdf —
server-side headless Chromium with self-hosted Source Serif 4, oxblood
single-accent palette, and PDF/UA-friendly tagging.
The same TSX components also drive the in-app live preview that
underwriters see while editing — what's described below is exactly what
your insured receives.
The 10 document types
Quote
For: Broker → Insured / Risk Manager The summary doc you share with the insured. Modern Minimal cover hero (insured name + policy period + total premium + OUR LAYER) followed by Polished Classic detail (Items I–VIII, Schedule of Underlying with NAIC# and claims-made flags, premium decomposition, forms list with title + form# + edition).
- Two-tier: Modern Minimal cover + Polished Classic detail
- Tower diagram alongside the limits table (never replacing it)
- "OUR LAYER" callout with state-disclosure block
- 30-day validity; trailing UW CTA
Binder
For: Broker → Insured (post-bind confirmation) Confirms coverage is in force pending policy issuance. Includes the full operative bind statement (8 elements per Couch §40 + Lopez/Ahmed line of cases) on the detail page — not just the headline. Subjectivities surface as "Conditions Precedent" with explicit "BIND IS CONDITIONAL" framing.
- "BIND IS CONDITIONAL" notice + 8-element operative bind block
- NAIC# rendered alongside carrier identification
- Subjectivities with status pills + due-by dates
- Typeset signature block with e-sign timestamp
Premium Indication
For: Broker (pre-quote, non-binding) Pre-quote price guidance. Stamped INDICATION; no rate/mil column; non-binding fine-print disclosure block calling out 10-day validity and subject-to-full-UW caveat. Cannot be bound from this document.
- INDICATION watermark (warning amber, -12° rotation)
- No rate/mil column; simplified premium summary
- 10-day validity stamped; bind explicitly disclaimed
- Non-binding fine-print block at footer
Watermark: INDICATION
Declarations Page
For: Insured / Counsel / Auditor (legal core of policy) Items I–VIII per compliance lock-in. Producer / Surplus-Lines Broker, Retained Limit / SIR, Audit Period, and Service of Suit explicit. Schedule of Underlying with mandatory columns: Carrier · NAIC# · Policy# · Period · Coverage · Per-Occ · Aggregate · Attachment · SIR · ★ claims-made flag.
- Items I–VIII (not VI — compliance flagged six as light)
- "OUR LAYER" leading row (replaces ambiguous dotted-line)
- State-disclosure block at prescribed font size (CA 12pt, FL 14pt)
- "Limits table controls" disclaimer alongside tower diagram
Amended Declarations
For: Issued for every endorsement that modifies the dec Per-endorsement replacement of the dec page. Adds a "supersedes prior declarations as of [effective date]" header + endorsement summary panel (sequence, category, premium change, new total premium, pro-rata factor). Composes the standard DeclarationsPage so layout stays in lockstep.
- "Supersedes prior declarations" effective-date callout
- Endorsement summary panel (sequence, category, deltas)
- Same Items I–VIII shell as the base dec
Redline Declarations
For: Broker → Insured (renewal / substantive endorsement) Diff between prior period and current. Strikethrough + insertion markers on every changed field (named insured, address, period, NAICS, our layer, total premium, producer). Default-on — most legacy carriers cannot ship this because their PAS cannot reconstruct historical state cleanly. Skadi can: every transaction snapshots the full policy state.
- Diff against prior period — strikethrough + highlight
- RENEWAL DRAFT watermark
- Default-on
- Powered by per-transaction policy snapshots
Watermark: RENEWAL DRAFT
Historical (As-of-Date) Declarations
For: Claims adjuster (post-FNOL coverage reconstruction) Reconstructs the dec page as of any historical transaction sequence. Watermarked SPECIMEN with a prominent "HISTORICAL RECONSTRUCTION — NOT AUTHORITATIVE" banner. Powered by policy_state_at(policy_id, sequence) RPC.
- SPECIMEN watermark + HISTORICAL RECONSTRUCTION banner
- Filename prefix: Skadi_HistoricalDec_…
- For claims-adjuster post-FNOL workflow only
- Not for distribution to insured / broker
Watermark: SPECIMEN
Full Policy Package
For: Insured (issuance) Cover + Declarations + every endorsement / coverage part / schedule / notice rendered from the form_templates JSONB. Forms with title + form# + edition (form# alone is dangerous at claim time per compliance review).
- Cover + Dec + N forms in a single PDF
- Form titles + numbers + editions all surfaced
- BlockRenderer schema unchanged across the migration
Renewal Comparison (Side-by-side)
For: Broker → Insured (renewal default) Two-column "Expiring | Renewal" rendering — Chubb / Travelers' standard for 15 years. Changed cells highlighted with oxblood-soft background. Print-readable at 600dpi (where strikethrough fails). Includes optional underwriter-narrative block ("From your underwriter") explaining what changed and why.
- Two-column "Expiring | Renewal" comparison — default for renewals
- Optional underwriter-narrative block from the renewing UW
- Replaces strikethrough as default; Redline remains as alternate
Watermark: RENEWAL DRAFT
Loss Position (companion)
For: Receiving broker (transfer-at-renewal) · claims adjuster Pairs with Historical Dec at the same transaction sequence. Loss summary (open/closed/reopened counts + paid/case/IBNR/incurred totals) + per-claim detail + optional exposure history. Eliminates the manual-Guidewire-screenshot workflow at transfer.
- Pairs with Historical Dec on the same transaction sequence
- Per-claim detail with paid · case · IBNR · incurred
- Optional exposure history surface (payroll/revenue/fleet over time)
Watermark: SPECIMEN
Live preview
Authenticated underwriters can browse all document types in the in-app
preview at /admin/document-preview. Each variant is rendered
with a sample-data fixture (Acme Manufacturing, $4M xs $1M layer, NAICS
561) and is configurable across all seven jurisdictions and eight watermark
states.
Watermark vocabulary
| Watermark | State | Color cue |
DRAFT | Pre-issuance UW work product | Neutral ink |
SPECIMEN | Sample documents (never bindable) | Accent oxblood |
QUOTED | Terms offered, not yet bound | Accent oxblood |
BOUND | Coverage in force (archival copies) | Accent oxblood |
INDICATION | Non-binding premium estimate | Warning amber |
EXPIRED | Coverage period ended without renewal | Warning amber |
VOID | Cancelled / never on risk | Warning amber |
RENEWAL DRAFT | Pre-issuance renewal work product | Warning amber |
Compliance lock-ins
Every issued document carries the state-prescribed surplus-lines
disclosure at the prescribed font size. CA 12pt bold (CIC §1764.1), FL
14pt bold first-page (F.S. 626.924), NY Reg 41 Part 27.5, TX 28 TAC §15.2,
plus generic fallback for other jurisdictions. The full per-state matrix
lives in src/documents/components/StateDisclosureBlock.tsx.
Architecture
Server-side render pipeline: SPA hook → POST /api/render-pdf
(Vercel Function, Node 22, Fluid Compute) → SSR via React 19
renderToStaticMarkup → headless Chromium
(@sparticuz/chromium-min + playwright-core)
→ pdf-lib metadata normalization (deterministic
/CreationDate + /ID derived from a SHA-256 of
the input) → application/pdf binary with content-disposition friendly
filename (e.g., Skadi_Quote_QU-2026-12345_Acme-Manufacturing.pdf).
Embedded JSON sidecar
Every rendered PDF carries a structured-JSON file attached via the PDF 1.7
EmbeddedFile API. The sidecar's contentHash
matches the PDF's /ID array, so the binding between the PDF
and its structured payload is cryptographically verifiable. Read the
sidecar with any standards-compliant PDF tool (Adobe, Foxit, pdf-lib);
your ingest tooling can ignore the rendered PDF entirely and consume the
structured representation directly.
Partner endpoint POST /api/partner/quote-pdf
Partner-API endpoint authenticated with HMAC-SHA256
(X-API-Key + X-Timestamp + X-Signature) —
same pattern the Edge Functions use. Content-negotiated by Accept
header:
Accept: application/pdf → rendered PDF binary with embedded JSON sidecar Accept: application/json → ACORD 137 (quote/indication) or ACORD 75 (binder) envelope
Full contract: the API reference documents both
endpoints, including the content-negotiation matrix and error catalog.
Want sample PDFs?
Reach out to partner-eng@skadispecialty.com
with your evaluation context. We'll generate a sample binder + dec page
for your house template (NAICS, layer geometry, jurisdiction) — usually
same-day during evaluation.