Overview
Norn is a contract document intelligence platform that transforms static documents into reusable, fillable, signable templates with governed lifecycle management. It bridges the gap between starting from scratch in Word every time and paying for a full contract lifecycle management suite.
Norn operates in three modes: Import existing documents (PDF, DOCX, ODT, TXT, Markdown), Compose contracts from scratch with a built-in rich text editor, or Fill existing templates and send them for signature. The result is a complete document workflow — from authoring through signing to governed archival — in a single tool.
Where the existing Mimir Labs tools operate on enterprise data structures, Norn operates on the documents that govern the relationships between the organizations those data structures serve. Contracts, service agreements, statements of work, and compliance documents define the legal and commercial context within which enterprise data exists.
Architectural Role
Norn extends the Mimir Labs platform lifecycle into the contractual domain:
- Ratatosk: discover and define meaning in enterprise data
- Ragnarok: migrate data into aligned structures
- Bifrost: maintain alignment across systems
- Jormungandr: enforce canonical governance
- Norn: govern the documents that define business relationships
The relationship between Norn and the data platform is bidirectional. Contract data flows into the enterprise through manifest export, and enterprise data can inform contract generation through template field pre-population.
Application Modes
Template Mode
Import an existing document and convert it into a reusable template. Norn extracts text, detects candidate fields via heuristic pattern matching, and allows manual field promotion. The source document is preserved; fields are overlaid as a separate layer.
Compose Mode
Write a contract from scratch using the built-in rich text editor. Formatting toolbar supports bold, italic, underline, headings (H1–H3), bullet and numbered lists, and table insertion. Fields are inserted inline via the "+ Field" button — each becomes a fillable marker in the document body.
Five built-in contract starters are included:
- Mutual Non-Disclosure Agreement — Standard mutual NDA with configurable terms
- Statement of Work — Project scope, deliverables, timeline, and compensation
- Master Services Agreement — Framework for ongoing professional services
- Employment Agreement — Standard employment terms with compensation
- Blank Document — Start from an empty page
Users can also select text in the editor and promote it directly to a field.
Fill Mode
Open an existing template, fill field values through a form dialog, and export or send for signature. Formula fields compute automatically. Signature and initials fields open a capture dialog. Completed documents export as PDF.
Document Import
Norn accepts multiple input formats:
| Format | Method | Text Extraction |
|---|---|---|
| QPdfDocument + Tesseract OCR | Native extraction first, OCR fallback at 300 DPI | |
| DOCX | XML parsing (word/document.xml) | Direct extraction |
| ODT | XML parsing (content.xml) | Direct extraction |
| TXT, MD | Direct file read | Split on page breaks or line count |
For PDF ingestion:
- Loads the PDF via Qt's QPdfDocument
- Computes a SHA-256 hash of the source document (integrity baseline)
- Extracts text from every page immediately (native extraction first, Tesseract OCR fallback)
- If a
.norn.jsontemplate file exists alongside the document, auto-loads it
OCR Processing
Each page of the ingested PDF is rendered to a high-resolution image (300 DPI) and processed through the active OCR engine. The OCR layer is abstracted behind the IOcrEngine interface:
| Method | Purpose |
|---|---|
initialize(dataPath, language) | Load OCR model data |
recognize(image) | Full-page OCR with structured output |
recognizeRegion(image, rect) | Region-specific OCR for promoted selections |
engineName() | Display identifier |
Two engines are available:
- Tesseract (Free tier) — local CLI-based OCR, no data leaves the machine
- Google Document AI (Pro+ tiers) — cloud OCR with superior accuracy for handwriting and complex layouts
Heuristic Field Detection
The FieldDetector analyzes extracted text to identify candidate fields using pattern matching:
| Pattern | Detection Rule | Field Type | Confidence |
|---|---|---|---|
| Blank lines | ___________ (3+ underscores) | Text | 0.70 |
| Date patterns | Date:, MM/DD/YYYY, Effective Date: | Date | 0.80 |
| Signature patterns | Signature:, Authorized Representative: | Signature | 0.85 |
| Checkbox patterns | [ ], [X] | Checkbox | 0.75 |
| Label:Value patterns | Company: ___, Name: ___ | Text | 0.60 |
All detections are suggestions. None are committed to the template without operator review.
Field System
Field Types
| Type | Widget | Use Case |
|---|---|---|
| Text | Free-form input | Names, addresses, company names, custom clauses |
| Date | Date picker (ISO 8601) | Effective dates, expiration dates |
| Signature | Draw / type / upload capture | Legally binding signatures |
| Initials | Draw / type / upload capture | Page-level acknowledgment |
| Checkbox | Boolean toggle | Opt-in/opt-out, service selections |
| Radio | Grouped one-of-N | Mutually exclusive choices |
| Dropdown | Combo selection | Predefined option lists |
| Currency | Numeric with symbol | Line item prices, totals, fees |
| Number | Plain numeric | Quantities, percentages, counts |
| Formula | Computed (read-only) | Line totals, subtotals, tax, grand total |
Field Operations
- Detect — Run heuristic pattern matching on extracted text
- Promote — Select text and convert it to a fillable field
- Split — Divide a field horizontally or vertically
- Resize — Edit the field's source text to change its scope
- Demote — Convert a field back to static text
Signatory Assignment
Each field can be assigned to a signatory by name and email. When a document is sent for signing, each recipient sees only their assigned fields. Supports parallel (all at once) and sequential (ordered) signing.
Signature Capture
Norn provides three methods for capturing signatures and initials:
- Draw — Freehand drawing on a canvas with mouse, touch, or stylus input. Pressure-sensitive when using a stylus.
- Type — Type a name rendered in a script font. Multiple font options available (Dancing Script, Great Vibes, Segoe Script, etc.).
- Upload — Import an existing signature image (PNG, JPG).
Captured signatures are stored per-contact in the CRM and rendered directly into exported PDFs at the field's bounding rectangle. The same signature can be reused across multiple contracts for the same contact.
Document Sending
Documents can be sent to one or more signatories via Norn's managed mailbox:
- Fill a document (leaving signatory-assigned fields blank)
- Assign fields to signatories by name and email
- Choose signing order: parallel (all at once) or sequential (in order)
- Send — each signatory receives a branded email with a secure signing link
Signatory Experience
Recipients click the link and land on a standalone signing page. No account required — access is token-based. The page shows:
- The document name and their role
- Only their assigned fields (all others are read-only)
- A legal consent statement
- A submit button
After submission, the signatory's token is invalidated. For sequential signing, the next signatory is automatically notified.
Completion Flow
When all signatories have signed:
- Document status transitions to "completed"
- The document owner receives a completion notification email
- The final document is available for export and archival
Security
- Signatory tokens are single-use and time-limited (default: 7 days)
- Signatories can only submit values for fields assigned to them (server-enforced)
- Every access logs IP address and user agent
- The original template data is stored server-side; signatories never receive the full template
Formula Engine
Formula fields are computed from other field values using a built-in recursive descent parser. Formulas are defined during template authoring and evaluated automatically during document filling.
Syntax
Field references use curly braces with the field's label:
{Quantity} * {Unit Price}
{Subtotal} + {Tax}
ROUND({Subtotal} * 0.07, 2)
SUM({Line 1 Total}, {Line 2 Total}, {Line 3 Total})
Supported Operations
| Category | Syntax | Example |
|---|---|---|
| Arithmetic | + - * / | {Qty} * {Price} |
| Parentheses | ( ) | ({Subtotal} + {Tax}) * 1.0 |
| SUM | SUM(a, b, c) | SUM({Line 1}, {Line 2}, {Line 3}) |
| MIN / MAX | MIN(a, b) | MIN({Bid 1}, {Bid 2}) |
| ROUND | ROUND(expr, places) | ROUND({Subtotal} * 0.07, 2) |
| Literals | Numbers | {Subtotal} * 0.07 |
Formulas evaluate in dependency order with multi-pass resolution (up to 3 passes) for chains. Currency fields are automatically formatted with the configured currency symbol and thousands separators.
Template Format
Templates are stored as .norn.json files — JSON documents containing:
- Metadata: name, version, author, creation/update timestamps
- Source binding: PDF path and SHA-256 hash (integrity verification)
- Source type:
"pdf","text", or"composed"(from-scratch documents include an HTML body) - Field definitions: each field includes type, label, position, signatory assignment, and validation
- Version history: up to 50 prior version snapshots with timestamps and change notes
- Components: references to child templates stitched into composite documents
Templates are portable. They can be shared, versioned, and archived independently of the source document.
Template Versioning
Every save creates a version snapshot. Users can:
- View version history with timestamps, field counts, and change notes
- Revert to any prior version (current state is automatically snapshotted before revert)
- Version numbers auto-increment on each save (e.g., 1.0 → 1.1 → 1.2)
The template file carries its complete history — no external version control required.
Composite Templates (Stitching)
Templates can be composed from multiple child templates to create composite documents:
- Addendums: attach supplementary terms to a master agreement
- Exhibits: reference schedules, price lists, or specification documents
- Amendments: layer changes onto an existing contract without modifying the original
Components are ordered, labeled (e.g., "Exhibit A", "Amendment 1"), and resolved at fill/export time. Each component retains its own fields. Components are referenced by file path — the same exhibit can be shared across multiple master agreements, and updates propagate automatically.
Licensing and Feature Gating
Norn uses a tiered licensing model with server-side enforcement. Usage limits are checked before every contract creation and document send.
| Tier | Price | Contracts/Month | OCR Engine | Send for Signing | Additional |
|---|---|---|---|---|---|
| Free | $0/mo | 5 | Tesseract (local) | No | 3 templates, PDF export |
| Pro | $99/mo | 50 | Google Doc AI | Yes | Unlimited templates, 3 seats |
| Business | $399/mo | 250 | Google Doc AI | Yes | API access, 10 seats, priority support |
| Enterprise | $1,499/mo | Unlimited | Google Doc AI | Yes | SSO, SLAs, unlimited seats, Ratatosk integration |
All tiers include: import, compose, field detection, field promotion, formula engine, governed archive, lite CRM, template versioning, and composite templates.
Lite CRM
Norn includes a lightweight contact and contract record management system:
Contacts are auto-populated from filled template fields. When a user fills in "Client Name," "Signer Email," and "Company," the CRM creates or updates a contact record automatically. Saved signatures and initials are stored per-contact for reuse.
Contract Records track the lifecycle of each generated document:
- Draft (created, not yet sent)
- Sent (transmitted for signature)
- Viewed (recipient opened the signing link)
- Signed (all signatures collected)
- Expired (signing deadline passed)
- Archived (moved to long-term governed storage)
The CRM is JSON-backed (no database required) and persists in a single file alongside the archive.
Document Archive
All documents — signed contracts, unsigned drafts, and templates — are stored in a governed archive.
Compliance Controls
Immutability. Signed contracts cannot be modified after archival. The file hash is computed at archive time and verified on every retrieval.
Access Logging. Every access — view, download, export, delete request — is logged with timestamp, user identifier, and action type. The access log is append-only.
Retention Enforcement. Signed contracts carry a configurable retention period (default: 7 years). Deletion requests are denied until the retention period expires. Denied requests are logged.
Integrity Verification. On-demand or batch SHA-256 hash verification detects any file corruption or unauthorized modification.
Storage Backends
| Backend | Status | Use Case |
|---|---|---|
| Local filesystem | Active | Single-user, Free/Pro tiers |
| Remote VPS | Ready (inactive) | Team access, Business/Enterprise tiers |
Platform Integration
Ratatosk Manifest Export
Norn can export filled contract data as a Ratatosk-compatible manifest:
- Contact fields map to
crm_entities/crm_contacts(CRM taxonomy) - Contract metadata maps to a
norn_contractstable (Sales taxonomy) - All filled field values become additional columns with Mimisbrunnr-aligned naming
The manifest follows the standard Ratatosk format and can be loaded directly for governance review. From there, Ragnarok can migrate the data into Yggdrasil ERP, or Jormungandr can validate it against the canonical model.
Enterprise Direct Ingestion
Enterprise tier enables direct Yggdrasil API ingestion, bypassing the Ratatosk review step for trusted, recurring contract workflows (e.g., auto-provisioning a customer record when an MSA is signed).
Account Management
Norn accounts are managed through the Mimir Labs platform at app.mimirlabs.net:
- Authentication: Same credentials as the Mimir Labs portal. JWT-based with 7-day sessions.
- Entitlements: Per-user product entitlements track tier, usage, and feature gates.
- Provisioning: Purchases automatically create or upgrade entitlements via webhook. Downgrades and cancellations are handled gracefully with usage period preservation.
- Account API:
GET /api/norn/accountreturns current tier, usage vs. limits, and feature gates.
Security Model
Norn is designed for environments where document confidentiality is critical.
- OCR processing is local by default (Tesseract). No document content leaves the machine.
- Google Document AI processing (Pro+) sends page images to Google's API. Users supply their own API key and accept Google's data processing terms.
- No document content is transmitted to Mimir Labs infrastructure at any tier.
- Signature request emails contain only metadata and a signing link — never document content.
- Signatory tokens are single-use, time-limited, and field-scoped.
- Connection credentials for the remote archive are encrypted and stored locally.
- The archive access log provides a complete audit trail for compliance review.
Technology Stack
| Component | Technology | Rationale |
|---|---|---|
| Desktop | C++17 / Qt 6 Widgets | Cross-platform, native PDF rendering, local OCR |
| Web App | Next.js 15 / React 19 / TypeScript | Server-side extraction, responsive UI |
| PDF Rendering | Qt Pdf + QPdfWriter / QPainter | 300 DPI rendering, no external dependencies |
| Compose Editor | QTextEdit (desktop) | Rich text with inline field markers |
| OCR (Free) | Tesseract 5.x CLI | Free, local, no library linking required |
| OCR (Premium) | Google Document AI | Superior accuracy, handwriting support |
| Signature Capture | QPainter paths (desktop), HTML Canvas (web) | Freehand + typed + uploaded |
| Nodemailer (SMTP) | Branded signature request and completion emails | |
| Persistence | JSON files (local), PostgreSQL (server) | Portable templates, governed entitlements |
| Integrity | SHA-256 (Qt Cryptographic) | Document fingerprinting and archive verification |
Platform Significance
Norn addresses the document layer that the rest of the Mimir Labs platform does not cover.
Enterprise data has structure, governance, and enforcement. Enterprise documents — the contracts, agreements, and compliance artifacts that define the legal framework around that data — typically have none of these properties. They are static files passed between parties with no structural awareness, no version control, and no governed lifecycle.
Norn makes documents structurally aware. It identifies the points where human input is required, preserves those points as reusable templates, captures signatures with legal equivalence, and governs the resulting documents through their lifecycle. When combined with the broader Mimir Labs platform, it creates a closed loop: contracts define relationships, data flows through those relationships, governance ensures alignment, and the archive preserves the record.
Copyright 2024–2026 Mimir Labs LLC. All rights reserved.