RistmarkStart free

Documentation

Project overview

Ristmark turns plain Word, RTF, PDF and image documents into structured, reusable templates, then generates clean output from them — on demand in the app, or programmatically via the /v1 API. It also helps you consolidate related templates: compare their differences, choose a base and create a review draft while keeping the source documents available.

This page is a concise, technical orientation to how it’s built. For the product-facing pitch, see the trust model; for the block-by-block authoring surface, see the block reference.

The core bet: keep AI out of the load-bearing parts

The architecture’s organizing principle is “spend AI at migration; keep it out of editing and generation.” At import, AI rebuilds each page’s layout from a picture of the page and labels the variable text spans — always with a per-field confidence score, so a low-confidence field flags itself instead of silently passing as correct. After that, editing, layout, pagination and rendering are handled entirely by code: the same template + data always produces the same PDF and HTML, with no model in that path to drift.

The pipeline

Normalize → recognize → author → generate, roughly mapping to four workspace libraries:

  1. Normalize (doc-ingest, LibreOffice) — every upload is normalized to DOCX (RTF and the other Office formats are converted first), rendered to PDF and rasterized to page images. This step is deterministic and AI-free.
  2. Reconstruct and recognize (ai, in Beta) — a vision model rebuilds each page’s layout as blocks from those images, then a bounded pass classifies spans as variable vs. boilerplate, names the variable ones and reports a confidence score per field. For Word and RTF sources a deterministic parser reads the DOCX structure alongside and flags where the two disagree (it is a cross-check, not the template). PDF and image sources give the model only the picture — the lower-fidelity visual reconstruction (Beta) tier described in Trust & confidence. Once a template is approved, no model touches it again.
  3. Author — the recognized result becomes an editable template in the canonical block format (template-schema): a tree of typed blocks (text, table, layout containers, printed form controls (tick-boxes and fill-in lines), and more — see the block reference) with a {{ }} data-binding language. You review confidence-flagged fields, correct what’s wrong, and edit freely in the template editor — a corrected field is remembered and auto-applied the next time the same pattern is seen.
  4. Generate (doc-engine) — a deterministic, framework-free rendering engine lays out and paints a template against a data payload to PDF, HTML or DOCX. No AI runs at generation time; the same template + data pair always renders identically, whether triggered from the app, a spreadsheet-generate run, or the keyed /v1 API.

Consolidation (Beta)

Consolidation is in Beta: matching is text-based and its accuracy has not been validated. The consolidation library compares distinct words in reconstructed templates to suggest groups. Every pair in a suggested group must meet the matching threshold and respect dismissed-pair exclusions. Shared wording is a discovery signal; it does not establish equivalent meaning, layout or a safe merge.

The user selects source documents and a base, then reviews an explicit plan. Simple supported value differences can become fields with separate names; changed clauses, layout differences and unsupported content lead to manual consolidation. The plan exposes actual source differences and content not included in the base. Creation checks that the source documents still match the reviewed plan.

The result enters Review, with its provenance and proposed changes. Originals remain available. Existing results can be resumed, and changed sources can produce a fresh suggestion.

How it’s exposed

  • The template editor (the authed app) covers migrate → review → edit → generate → consolidate end to end — see Getting started.
  • The keyed /v1 API generates single documents and bounded batches programmatically — see Generating with the /v1 API.
  • Generate from a spreadsheet renders one document per row of an uploaded CSV/Excel file — see that guide.
  • The product is multi-tenant by design (tenant isolation, roles, a pluggable auth provider) and self-serve, with usage metered per plan — see Pricing & limits.