<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type="text/xsl" href="rss.xsl"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>IntentText Blog</title>
        <link>https://dotit.uts.qa/blog</link>
        <description>IntentText Blog</description>
        <lastBuildDate>Fri, 12 Jun 2026 00:00:00 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <item>
            <title><![CDATA[1.0: IntentText Is Now @dotit — Plus Arabic Keywords That Round-Trip]]></title>
            <link>https://dotit.uts.qa/blog/v1-dotit-rebrand</link>
            <guid>https://dotit.uts.qa/blog/v1-dotit-rebrand</guid>
            <pubDate>Fri, 12 Jun 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Today the IntentText packages hit 1.0.0 under a new npm scope: @dotit/core, @dotit/pdf, and @dotit/mcp. Same format, same .it extension, same code — direct lineage from @intenttext 4.3.x, which is now deprecated on npm with pointer messages to the new names.]]></description>
            <content:encoded><![CDATA[<p>Today the IntentText packages hit <strong>1.0.0</strong> under a new npm scope: <strong><code>@dotit/core</code></strong>, <strong><code>@dotit/pdf</code></strong>, and <strong><code>@dotit/mcp</code></strong>. Same format, same <code>.it</code> extension, same code — direct lineage from <code>@intenttext</code> 4.3.x, which is now deprecated on npm with pointer messages to the new names.</p>
<div class="language-bash codeBlockContainer_fmjG theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_yWK0"><pre tabindex="0" class="prism-code language-bash codeBlock_iKbv thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_GP9I"><div class="token-line" style="color:#393A34"><span class="token function" style="color:#d73a49">npm</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">install</span><span class="token plain"> @dotit/core      </span><span class="token comment" style="color:#999988;font-style:italic"># the format: parse, render, merge, query, trust</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">npm</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">install</span><span class="token plain"> @dotit/pdf       </span><span class="token comment" style="color:#999988;font-style:italic"># optional: server-side PDFs (issue → seal → PDF)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">npm</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">install</span><span class="token plain"> </span><span class="token parameter variable" style="color:#36acaa">-g</span><span class="token plain"> @dotit/mcp    </span><span class="token comment" style="color:#999988;font-style:italic"># the MCP server for AI agents</span><br></div></code></pre></div></div>
<p>1.0 is a statement, not just a version bump: the line grammar, the 38 canonical keywords, and the trust model are stable. And this release ships the feature we've wanted since the beginning — documents that aren't just readable in any language, but <strong>written</strong> in any language.</p>
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_SaGr" id="arabic-keywords-as-written">Arabic keywords, as written<a href="https://dotit.uts.qa/blog/v1-dotit-rebrand#arabic-keywords-as-written" class="hash-link" aria-label="Direct link to Arabic keywords, as written" title="Direct link to Arabic keywords, as written" translate="no">​</a></h2>
<p>The keyword grammar is now Unicode (<code>\p{L}</code> words), so domain keywords in Arabic — or any script — parse as typed, queryable blocks exactly like ASCII ones:</p>
<div class="language-text codeBlockContainer_fmjG theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_yWK0"><pre tabindex="0" class="prism-code language-text codeBlock_iKbv thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_GP9I"><div class="token-line" style="color:#393A34"><span class="token plain">مصروف: كراسي مكتب | المورد: ايكيا | فئة: أثاث | date: 2026-06-12</span><br></div></code></pre></div></div>
<p>That's a typed block with keyword <code>مصروف</code>, queryable by Arabic property (<code>فئة = أثاث</code>) and by ISO date range.</p>
<p>But custom keywords were never the hard part. The hard part was semantics — and that's what the <strong>33 registered Arabic aliases</strong> deliver. <code>عنوان</code> is <code>title</code>. <code>قسم</code> is <code>section</code>. <code>مهمة</code> is <code>task</code>. <code>صف</code> is <code>row</code>, <code>أعمدة</code> is <code>columns</code>, <code>مؤشر</code> is <code>metric</code>, <code>توقيع</code> is <code>sign</code>, <code>اعتماد</code> is <code>approve</code>, <code>تجميد</code> is <code>freeze</code>. An Arabic document gets full canonical behavior — totals rows, contact cards, signatures, deadline logic — and one query (<code>type:task</code>) finds tasks across languages.</p>
<p>The detail that makes this real: <strong>aliases now round-trip as written.</strong> <code>documentToSource</code> re-emits the keyword the author used (<code>block.keywordAlias</code>) instead of normalizing to canonical English. An Arabic document stays Arabic through every parse → serialize cycle. <code>abstract:</code> stays <code>abstract:</code>. Table keywords (<code>أعمدة</code>/<code>صف</code>, <code>headers</code>) are preserved too.</p>
<p>This matters most for trust. A sealed document's hash covers the exact bytes — if serialization rewrote <code>توقيع</code> as <code>sign</code>, the seal would break on the first round-trip. Now it doesn't. Sealed Arabic documents keep their hash.</p>
<h2 class="anchor anchorTargetStickyNavbar_SaGr" id="dates-are-iso-8601">Dates are ISO 8601<a href="https://dotit.uts.qa/blog/v1-dotit-rebrand#dates-are-iso-8601" class="hash-link" aria-label="Direct link to Dates are ISO 8601" title="Direct link to Dates are ISO 8601" translate="no">​</a></h2>
<p>One language did get standardized: dates. Date-bearing properties (<code>date</code>, <code>due</code>, <code>at</code>, <code>expires</code>, <code>issued</code>) are canonically <code>YYYY-MM-DD</code> (or full ISO timestamps), and the semantic validator now flags locale formats with a <code>DATE_NOT_ISO</code> warning.</p>
<p><code>09/03/2026</code> is ambiguous — March 9th or September 3rd, depending on who's reading — and it breaks the query engine's date-range comparisons, which work out of the box with ISO values. Write the content in any language; write the dates in ISO.</p>
<h2 class="anchor anchorTargetStickyNavbar_SaGr" id="escaping-that-survives-round-trips">Escaping that survives round-trips<a href="https://dotit.uts.qa/blog/v1-dotit-rebrand#escaping-that-survives-round-trips" class="hash-link" aria-label="Direct link to Escaping that survives round-trips" title="Direct link to Escaping that survives round-trips" translate="no">​</a></h2>
<p><code>|</code> is the reserved property delimiter, and <code>\|</code> has always parsed correctly into a literal pipe. But the serializer emitted it back <em>unescaped</em> — so re-parsing split it as a property delimiter. Data corruption, two round-trips in.</p>
<p>Fixed. The serializer now re-escapes <code>\</code> and <code>|</code> in content and property values, so escape round-trips are a fixpoint: parse → serialize → parse gives you the same document, every time.</p>
<h2 class="anchor anchorTargetStickyNavbar_SaGr" id="a-fuzz-tested-parser">A fuzz-tested parser<a href="https://dotit.uts.qa/blog/v1-dotit-rebrand#a-fuzz-tested-parser" class="hash-link" aria-label="Direct link to A fuzz-tested parser" title="Direct link to A fuzz-tested parser" translate="no">​</a></h2>
<p>1.0 also marks the start of the hardening track. The new fuzz/property suite throws 500 random structured documents, 200 random byte-soup inputs, and a gallery of pathological cases (10K newlines, 5K pipes, 100KB hash values, BOM, CRLF, deep nesting) at the full pipeline — parse → render → print → serialize → re-parse → hash → verify → merge — with one rule: <strong>never throw.</strong> Deterministic seeds, so every failure reproduces.</p>
<p>It already paid for itself: the suite found a stack-overflow DoS where a single ~10KB line of repeated list markers crashed the parser — a real risk for any server parsing untrusted <code>.it</code>. Fixed in 4.3.1, carried into 1.0. 897 tests passing.</p>
<h2 class="anchor anchorTargetStickyNavbar_SaGr" id="what-you-need-to-do">What you need to do<a href="https://dotit.uts.qa/blog/v1-dotit-rebrand#what-you-need-to-do" class="hash-link" aria-label="Direct link to What you need to do" title="Direct link to What you need to do" translate="no">​</a></h2>
<ul>
<li class=""><strong>New projects:</strong> install <code>@dotit/core</code> (and <code>@dotit/pdf</code> / <code>@dotit/mcp</code> as needed).</li>
<li class=""><strong>Existing projects:</strong> swap <code>@intenttext/*</code> for <code>@dotit/*</code> in package.json and imports. The API is unchanged — it's the same code.</li>
<li class=""><strong>Your <code>.it</code> files:</strong> nothing. The format is the format.</li>
</ul>
<p>One format, every language, version 1.0.</p>
<p><a class="" href="https://dotit.uts.qa/docs/ecosystem/core-api">Core API →</a> · <a class="" href="https://dotit.uts.qa/docs/ecosystem/mcp-server">MCP Server →</a></p>]]></content:encoded>
            <category>release</category>
            <category>announcement</category>
        </item>
        <item>
            <title><![CDATA[v2.11: Eight New Keywords — Amendment, Metric, Contact, Deadline, and More]]></title>
            <link>https://dotit.uts.qa/blog/v211-keyword-expansion</link>
            <guid>https://dotit.uts.qa/blog/v211-keyword-expansion</guid>
            <pubDate>Sat, 07 Mar 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[v2.11 adds eight keywords that close the gap between IntentText and the real documents organizations produce every day: amendment, metric, contact, deadline, def, figure, signline, and cite.]]></description>
            <content:encoded><![CDATA[<p>v2.11 adds eight keywords that close the gap between IntentText and the real documents organizations produce every day: <code>amendment</code>, <code>metric</code>, <code>contact</code>, <code>deadline</code>, <code>def</code>, <code>figure</code>, <code>signline</code>, and <code>cite</code>.</p>
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_SaGr" id="the-amendment-story">The amendment story<a href="https://dotit.uts.qa/blog/v211-keyword-expansion#the-amendment-story" class="hash-link" aria-label="Direct link to The amendment story" title="Direct link to The amendment story" translate="no">​</a></h2>
<p>Frozen documents have a problem. After you seal a contract, reality changes. Payment terms get renegotiated. Scopes expand. Parties are replaced. Until v2.11, your only option was to create a new document.</p>
<p>The <code>amendment:</code> keyword gives frozen documents a formal amendment path:</p>
<div class="language-text codeBlockContainer_fmjG theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_yWK0"><pre tabindex="0" class="prism-code language-text codeBlock_iKbv thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_GP9I"><div class="token-line" style="color:#393A34"><span class="token plain">amendment: Payment terms revised</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  | ref: Amendment #1</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  | section: Payment Terms</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  | was: Net 30</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  | now: Net 15</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  | by: Ahmed Al-Rashid</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  | at: 2026-03-07T09:00:00Z</span><br></div></code></pre></div></div>
<p>Amendments are recorded in the trust history. They reference the section they modify, capture what changed, and track who authorized the change. The original document remains sealed — the amendment sits alongside it as an auditable record.</p>
<div class="language-bash codeBlockContainer_fmjG theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_yWK0"><pre tabindex="0" class="prism-code language-bash codeBlock_iKbv thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_GP9I"><div class="token-line" style="color:#393A34"><span class="token plain">intenttext amend contract.it </span><span class="token parameter variable" style="color:#36acaa">--section</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"Payment Terms"</span><span class="token plain"> </span><span class="token parameter variable" style="color:#36acaa">--was</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"Net 30"</span><span class="token plain"> </span><span class="token parameter variable" style="color:#36acaa">--now</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"Net 15"</span><span class="token plain"> </span><span class="token parameter variable" style="color:#36acaa">--ref</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"Amendment #1"</span><br></div></code></pre></div></div>
<p>This is how legal teams actually work. Contracts get amended, not rewritten.</p>
<h2 class="anchor anchorTargetStickyNavbar_SaGr" id="the-metric-story">The metric story<a href="https://dotit.uts.qa/blog/v211-keyword-expansion#the-metric-story" class="hash-link" aria-label="Direct link to The metric story" title="Direct link to The metric story" translate="no">​</a></h2>
<p>Organizations measure things. Revenue, expenses, conversion rates, uptime. Until now, these numbers lived in spreadsheets or dashboards — separate from the documents that give them context.</p>
<div class="language-text codeBlockContainer_fmjG theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_yWK0"><pre tabindex="0" class="prism-code language-text codeBlock_iKbv thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_GP9I"><div class="token-line" style="color:#393A34"><span class="token plain">metric: Revenue | value: $4.2M | target: $4.0M | status: above | trend: up</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">metric: Customer Churn | value: 2.8% | target: 3.0% | status: below | trend: stable</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">metric: NPS Score | value: 72 | target: 65 | status: above | trend: up</span><br></div></code></pre></div></div>
<p>Now you can query metrics across all your reports:</p>
<div class="language-bash codeBlockContainer_fmjG theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_yWK0"><pre tabindex="0" class="prism-code language-bash codeBlock_iKbv thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_GP9I"><div class="token-line" style="color:#393A34"><span class="token plain">intenttext query ./reports </span><span class="token parameter variable" style="color:#36acaa">--type</span><span class="token plain"> metric </span><span class="token parameter variable" style="color:#36acaa">--format</span><span class="token plain"> table</span><br></div></code></pre></div></div>
<table><thead><tr><th>Metric</th><th>Value</th><th>Target</th><th>Status</th></tr></thead><tbody><tr><td>Revenue</td><td>$4.2M</td><td>$4.0M</td><td>above</td></tr><tr><td>Customer Churn</td><td>2.8%</td><td>3.0%</td><td>below</td></tr><tr><td>NPS Score</td><td>72</td><td>65</td><td>above</td></tr></tbody></table>
<p>Your quarterly reports become a queryable dashboard. No BI tool required.</p>
<h2 class="anchor anchorTargetStickyNavbar_SaGr" id="the-contact-story">The contact story<a href="https://dotit.uts.qa/blog/v211-keyword-expansion#the-contact-story" class="hash-link" aria-label="Direct link to The contact story" title="Direct link to The contact story" translate="no">​</a></h2>
<p>Every organization has contacts scattered across documents — in contracts, proposals, invoices, HR files. Finding "everyone at Acme Corp" means opening dozens of files.</p>
<div class="language-text codeBlockContainer_fmjG theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_yWK0"><pre tabindex="0" class="prism-code language-text codeBlock_iKbv thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_GP9I"><div class="token-line" style="color:#393A34"><span class="token plain">contact: Ahmed Al-Rashid | role: CEO | email: ahmed@acme.com | org: Acme Corp | phone: +1-555-0100</span><br></div></code></pre></div></div>
<p>One query:</p>
<div class="language-bash codeBlockContainer_fmjG theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_yWK0"><pre tabindex="0" class="prism-code language-bash codeBlock_iKbv thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_GP9I"><div class="token-line" style="color:#393A34"><span class="token plain">intenttext query ./company </span><span class="token parameter variable" style="color:#36acaa">--type</span><span class="token plain"> contact </span><span class="token parameter variable" style="color:#36acaa">--format</span><span class="token plain"> csv </span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"> contacts.csv</span><br></div></code></pre></div></div>
<p>Your documents become a contact directory.</p>
<h2 class="anchor anchorTargetStickyNavbar_SaGr" id="the-deadline-story">The deadline story<a href="https://dotit.uts.qa/blog/v211-keyword-expansion#the-deadline-story" class="hash-link" aria-label="Direct link to The deadline story" title="Direct link to The deadline story" translate="no">​</a></h2>
<p>Contracts have deadlines. Projects have milestones. Policies have renewal dates. These dates are critical — missed deadlines have consequences.</p>
<div class="language-text codeBlockContainer_fmjG theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_yWK0"><pre tabindex="0" class="prism-code language-text codeBlock_iKbv thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_GP9I"><div class="token-line" style="color:#393A34"><span class="token plain">deadline: Phase 1 delivery | date: 2026-04-30 | consequence: Penalty clause applies</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">deadline: Contract renewal | date: 2026-12-31 | authority: COO</span><br></div></code></pre></div></div>
<p>Query them:</p>
<div class="language-bash codeBlockContainer_fmjG theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_yWK0"><pre tabindex="0" class="prism-code language-bash codeBlock_iKbv thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_GP9I"><div class="token-line" style="color:#393A34"><span class="token plain">intenttext query ./company </span><span class="token parameter variable" style="color:#36acaa">--type</span><span class="token plain"> deadline </span><span class="token parameter variable" style="color:#36acaa">--sort</span><span class="token plain"> date:asc </span><span class="token parameter variable" style="color:#36acaa">--format</span><span class="token plain"> table</span><br></div></code></pre></div></div>
<p>Your document folder becomes a deadline tracker. Sort by date, filter by authority, export to CSV. No project management tool required for the basics.</p>
<h2 class="anchor anchorTargetStickyNavbar_SaGr" id="four-more-keywords">Four more keywords<a href="https://dotit.uts.qa/blog/v211-keyword-expansion#four-more-keywords" class="hash-link" aria-label="Direct link to Four more keywords" title="Direct link to Four more keywords" translate="no">​</a></h2>
<ul>
<li class=""><strong><code>def:</code></strong> — Term definitions with meaning. Build glossaries, define jargon, create reference sections.</li>
<li class=""><strong><code>figure:</code></strong> — Images with captions and numbering. <code>figure: Architecture diagram | src: arch.png | number: 1</code></li>
<li class=""><strong><code>signline:</code></strong> — Signature lines for print. <code>signline: | role: CEO | date: true | line: true</code></li>
<li class=""><strong><code>cite:</code></strong> — Formal citations with source, author, and date.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_SaGr" id="the-vision">The vision<a href="https://dotit.uts.qa/blog/v211-keyword-expansion#the-vision" class="hash-link" aria-label="Direct link to The vision" title="Direct link to The vision" translate="no">​</a></h2>
<p>We think AI agents will produce <code>.it</code> files alongside <code>.md</code> files. When an agent generates a contract, a report, or an invoice, the output should be structured — not just readable. IntentText gives agents a format where every block has a keyword, every property is named, and every document is queryable.</p>
<p>Eight new keywords. 718 tests passing. The format keeps growing because documents keep needing more.</p>
<p><a class="" href="https://dotit.uts.qa/docs/reference/keywords">See the full v2.11 reference →</a></p>]]></content:encoded>
            <category>release</category>
            <category>keywords</category>
        </item>
        <item>
            <title><![CDATA[v2.10: Themes, the Hub, and the Ecosystem]]></title>
            <link>https://dotit.uts.qa/blog/v210-themes-hub-ecosystem</link>
            <guid>https://dotit.uts.qa/blog/v210-themes-hub-ecosystem</guid>
            <pubDate>Fri, 06 Mar 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[v2.10 is the ecosystem release. Eight built-in themes. The Hub — a platform for sharing templates and themes. Shallow indexes for folder-level querying. And 76 seeded templates across 8 domains.]]></description>
            <content:encoded><![CDATA[<p>v2.10 is the ecosystem release. Eight built-in themes. The Hub — a platform for sharing templates and themes. Shallow indexes for folder-level querying. And 76 seeded templates across 8 domains.</p>
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_SaGr" id="themes-without-npm">Themes without npm<a href="https://dotit.uts.qa/blog/v210-themes-hub-ecosystem#themes-without-npm" class="hash-link" aria-label="Direct link to Themes without npm" title="Direct link to Themes without npm" translate="no">​</a></h2>
<p>Every theme is a JSON file with four sections: fonts, colors, spacing, and optional block overrides. No CSS to write. No build step. No npm package.</p>
<div class="language-json codeBlockContainer_fmjG theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_yWK0"><pre tabindex="0" class="prism-code language-json codeBlock_iKbv thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_GP9I"><div class="token-line" style="color:#393A34"><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token property" style="color:#36acaa">"name"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"corporate"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token property" style="color:#36acaa">"fonts"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token property" style="color:#36acaa">"body"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"Inter"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token property" style="color:#36acaa">"heading"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"Inter"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token property" style="color:#36acaa">"mono"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"JetBrains Mono"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token property" style="color:#36acaa">"size"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"10pt"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token property" style="color:#36acaa">"leading"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"1.5"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token property" style="color:#36acaa">"colors"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> </span><span class="token property" style="color:#36acaa">"text"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"#1a1a1a"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token property" style="color:#36acaa">"heading"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"#111"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token property" style="color:#36acaa">"accent"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"#2563eb"</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token property" style="color:#36acaa">"spacing"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> </span><span class="token property" style="color:#36acaa">"page-margin"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"1in"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token property" style="color:#36acaa">"section-gap"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"2rem"</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></div></code></pre></div></div>
<p>Apply it:</p>
<div class="language-bash codeBlockContainer_fmjG theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_yWK0"><pre tabindex="0" class="prism-code language-bash codeBlock_iKbv thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_GP9I"><div class="token-line" style="color:#393A34"><span class="token plain">intenttext document.it </span><span class="token parameter variable" style="color:#36acaa">--html</span><span class="token plain"> </span><span class="token parameter variable" style="color:#36acaa">--theme</span><span class="token plain"> corporate</span><br></div></code></pre></div></div>
<p>Eight themes ship built-in: <strong>corporate</strong>, <strong>minimal</strong>, <strong>warm</strong>, <strong>technical</strong>, <strong>print</strong>, <strong>legal</strong>, <strong>editorial</strong>, <strong>dark</strong>. Each is designed for a specific use case — legal themes use serif fonts, technical themes use monospace headers, editorial themes have generous whitespace.</p>
<h2 class="anchor anchorTargetStickyNavbar_SaGr" id="the-hub">The Hub<a href="https://dotit.uts.qa/blog/v210-themes-hub-ecosystem#the-hub" class="hash-link" aria-label="Direct link to The Hub" title="Direct link to The Hub" translate="no">​</a></h2>
<p>The IntentText Hub at <a href="https://intenttext-hub.vercel.app/" target="_blank" rel="noopener noreferrer" class="">intenttext-hub.vercel.app</a> is a two-tier platform:</p>
<ol>
<li class=""><strong>Templates</strong> — Complete <code>.it</code> files with <code>{{variable}}</code> placeholders. Pull them, merge your data, render.</li>
<li class=""><strong>Themes</strong> — JSON theme files. Pull them, apply to any document.</li>
</ol>
<p>We've seeded the Hub with 76 templates across 8 domains: business, legal, finance, HR, technical, education, healthcare, and government. Every template works with every theme.</p>
<h3 class="anchor anchorTargetStickyNavbar_SaGr" id="publishing">Publishing<a href="https://dotit.uts.qa/blog/v210-themes-hub-ecosystem#publishing" class="hash-link" aria-label="Direct link to Publishing" title="Direct link to Publishing" translate="no">​</a></h3>
<p>Anyone with a GitHub account can publish:</p>
<div class="language-bash codeBlockContainer_fmjG theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_yWK0"><pre tabindex="0" class="prism-code language-bash codeBlock_iKbv thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_GP9I"><div class="token-line" style="color:#393A34"><span class="token plain">intenttext hub login</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">intenttext hub publish invoice-premium.it </span><span class="token parameter variable" style="color:#36acaa">--domain</span><span class="token plain"> finance </span><span class="token parameter variable" style="color:#36acaa">--description</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"Premium invoice with line items"</span><br></div></code></pre></div></div>
<p>Templates are validated before publishing. They must parse cleanly, include at least one variable, and match their declared domain.</p>
<h2 class="anchor anchorTargetStickyNavbar_SaGr" id="shallow-indexes">Shallow indexes<a href="https://dotit.uts.qa/blog/v210-themes-hub-ecosystem#shallow-indexes" class="hash-link" aria-label="Direct link to Shallow indexes" title="Direct link to Shallow indexes" translate="no">​</a></h2>
<p>v2.10 introduces <code>.it-index</code> files — shallow indexes that summarize a folder of <code>.it</code> documents:</p>
<div class="language-bash codeBlockContainer_fmjG theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_yWK0"><pre tabindex="0" class="prism-code language-bash codeBlock_iKbv thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_GP9I"><div class="token-line" style="color:#393A34"><span class="token plain">intenttext index ./contracts</span><br></div></code></pre></div></div>
<p>This produces a JSON file with metadata and block summaries for every <code>.it</code> file in the folder. Queries then run against the index instead of re-parsing every file:</p>
<div class="language-bash codeBlockContainer_fmjG theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_yWK0"><pre tabindex="0" class="prism-code language-bash codeBlock_iKbv thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_GP9I"><div class="token-line" style="color:#393A34"><span class="token plain">intenttext query ./contracts </span><span class="token parameter variable" style="color:#36acaa">--type</span><span class="token plain"> deadline </span><span class="token parameter variable" style="color:#36acaa">--format</span><span class="token plain"> table</span><br></div></code></pre></div></div>
<p>The architecture is deliberately shallow — each index covers one folder, no recursion. Compose indexes across folders for cross-cutting queries.</p>
<h2 class="anchor anchorTargetStickyNavbar_SaGr" id="76-templates">76 templates<a href="https://dotit.uts.qa/blog/v210-themes-hub-ecosystem#76-templates" class="hash-link" aria-label="Direct link to 76 templates" title="Direct link to 76 templates" translate="no">​</a></h2>
<p>The seeded templates cover real document types:</p>
<table><thead><tr><th>Domain</th><th>Templates</th><th>Examples</th></tr></thead><tbody><tr><td>Business</td><td>12</td><td>invoice, proposal, meeting minutes</td></tr><tr><td>Legal</td><td>10</td><td>NDA, service agreement, terms of service</td></tr><tr><td>Finance</td><td>8</td><td>budget, expense report, financial statement</td></tr><tr><td>HR</td><td>10</td><td>offer letter, performance review, onboarding</td></tr><tr><td>Technical</td><td>12</td><td>API spec, incident report, runbook</td></tr><tr><td>Education</td><td>8</td><td>syllabus, lesson plan, assessment</td></tr><tr><td>Healthcare</td><td>8</td><td>patient intake, prescription, referral</td></tr><tr><td>Government</td><td>8</td><td>permit, public notice, meeting agenda</td></tr></tbody></table>
<p>Every template is a real, complete document — not a skeleton. Pull one and you have a working starting point.</p>
<p><a href="https://intenttext-hub.vercel.app/" target="_blank" rel="noopener noreferrer" class="">Browse templates on the Hub →</a></p>]]></content:encoded>
            <category>release</category>
            <category>themes</category>
            <category>hub</category>
        </item>
        <item>
            <title><![CDATA[v2.8: Trust System — Documents You Can Seal]]></title>
            <link>https://dotit.uts.qa/blog/v28-trust-system</link>
            <guid>https://dotit.uts.qa/blog/v28-trust-system</guid>
            <pubDate>Fri, 06 Mar 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[v2.8 introduces five keywords that turn IntentText documents into trustworthy records: approve, sign, freeze, revision, and track.]]></description>
            <content:encoded><![CDATA[<p>v2.8 introduces five keywords that turn IntentText documents into trustworthy records: <code>approve</code>, <code>sign</code>, <code>freeze</code>, <code>revision</code>, and <code>track</code>.</p>
<p>The philosophy: you own the format. The CLI gives it trust.</p>
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_SaGr" id="the-problem-with-document-trust">The problem with document trust<a href="https://dotit.uts.qa/blog/v28-trust-system#the-problem-with-document-trust" class="hash-link" aria-label="Direct link to The problem with document trust" title="Direct link to The problem with document trust" translate="no">​</a></h2>
<p>Organizations sign PDFs. They email Word docs back and forth. They track changes with version history buried in a proprietary app. None of this is portable, verifiable, or queryable.</p>
<p>What if trust was part of the document itself?</p>
<h2 class="anchor anchorTargetStickyNavbar_SaGr" id="five-new-keywords">Five new keywords<a href="https://dotit.uts.qa/blog/v28-trust-system#five-new-keywords" class="hash-link" aria-label="Direct link to Five new keywords" title="Direct link to Five new keywords" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_SaGr" id="track"><code>track:</code><a href="https://dotit.uts.qa/blog/v28-trust-system#track" class="hash-link" aria-label="Direct link to track" title="Direct link to track" translate="no">​</a></h3>
<p>Enables the trust system for a document:</p>
<div class="language-text codeBlockContainer_fmjG theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_yWK0"><pre tabindex="0" class="prism-code language-text codeBlock_iKbv thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_GP9I"><div class="token-line" style="color:#393A34"><span class="token plain">track: | version: 1.0 | by: Ahmed</span><br></div></code></pre></div></div>
<p>This tells the parser to maintain a trust history — a registry of every block and a log of every change.</p>
<h3 class="anchor anchorTargetStickyNavbar_SaGr" id="approve"><code>approve:</code><a href="https://dotit.uts.qa/blog/v28-trust-system#approve" class="hash-link" aria-label="Direct link to approve" title="Direct link to approve" translate="no">​</a></h3>
<p>Records an approval with the approver's identity:</p>
<div class="language-text codeBlockContainer_fmjG theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_yWK0"><pre tabindex="0" class="prism-code language-text codeBlock_iKbv thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_GP9I"><div class="token-line" style="color:#393A34"><span class="token plain">approve: Reviewed by legal | by: Sarah Chen | role: Legal Counsel</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_SaGr" id="sign"><code>sign:</code><a href="https://dotit.uts.qa/blog/v28-trust-system#sign" class="hash-link" aria-label="Direct link to sign" title="Direct link to sign" translate="no">​</a></h3>
<p>Records a cryptographic signature:</p>
<div class="language-text codeBlockContainer_fmjG theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_yWK0"><pre tabindex="0" class="prism-code language-text codeBlock_iKbv thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_GP9I"><div class="token-line" style="color:#393A34"><span class="token plain">sign: Ahmed Al-Rashid | role: CEO | at: 2026-03-06T14:32:00Z</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_SaGr" id="freeze"><code>freeze:</code><a href="https://dotit.uts.qa/blog/v28-trust-system#freeze" class="hash-link" aria-label="Direct link to freeze" title="Direct link to freeze" translate="no">​</a></h3>
<p>Seals the document. After this, any content change invalidates the hash:</p>
<div class="language-text codeBlockContainer_fmjG theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_yWK0"><pre tabindex="0" class="prism-code language-text codeBlock_iKbv thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_GP9I"><div class="token-line" style="color:#393A34"><span class="token plain">freeze: | status: locked</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_SaGr" id="revision"><code>revision:</code><a href="https://dotit.uts.qa/blog/v28-trust-system#revision" class="hash-link" aria-label="Direct link to revision" title="Direct link to revision" translate="no">​</a></h3>
<p>Records a version change in the trust history:</p>
<div class="language-text codeBlockContainer_fmjG theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_yWK0"><pre tabindex="0" class="prism-code language-text codeBlock_iKbv thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_GP9I"><div class="token-line" style="color:#393A34"><span class="token plain">revision: Updated payment terms | by: Ahmed | at: 2026-03-07</span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_SaGr" id="how-it-works">How it works<a href="https://dotit.uts.qa/blog/v28-trust-system#how-it-works" class="hash-link" aria-label="Direct link to How it works" title="Direct link to How it works" translate="no">​</a></h2>
<p>When you seal a document with the CLI (<code>intenttext seal contract.it --signer "Ahmed"</code>), the system:</p>
<ol>
<li class="">Computes a SHA-256 hash of the document content</li>
<li class="">Adds a <code>sign:</code> block with the hash</li>
<li class="">Adds a <code>freeze:</code> block that locks the document</li>
</ol>
<p>Later, <code>intenttext verify contract.it</code> recomputes the hash and checks it against the seal. If anyone changed a single character, the verification fails.</p>
<p>The trust data lives in the same <code>.it</code> file — below a <code>history:</code> boundary. It's human-readable. It's version-controlled. It travels with the document.</p>
<h2 class="anchor anchorTargetStickyNavbar_SaGr" id="the-organizational-use-case">The organizational use case<a href="https://dotit.uts.qa/blog/v28-trust-system#the-organizational-use-case" class="hash-link" aria-label="Direct link to The organizational use case" title="Direct link to The organizational use case" translate="no">​</a></h2>
<p>An HR department with 200 employment contracts:</p>
<div class="language-bash codeBlockContainer_fmjG theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_yWK0"><pre tabindex="0" class="prism-code language-bash codeBlock_iKbv thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_GP9I"><div class="token-line" style="color:#393A34"><span class="token plain">intenttext query ./contracts </span><span class="token parameter variable" style="color:#36acaa">--type</span><span class="token plain"> approve </span><span class="token parameter variable" style="color:#36acaa">--format</span><span class="token plain"> table</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">intenttext query ./contracts </span><span class="token parameter variable" style="color:#36acaa">--type</span><span class="token plain"> sign </span><span class="token parameter variable" style="color:#36acaa">--format</span><span class="token plain"> table</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">intenttext verify ./contracts </span><span class="token parameter variable" style="color:#36acaa">--recursive</span><br></div></code></pre></div></div>
<p>Three commands. You know who approved what, who signed what, and whether any document has been tampered with. No PDF viewer required. No proprietary tool.</p>
<p><a class="" href="https://dotit.uts.qa/docs/guide/trust-and-signing">Read the trust documentation →</a></p>]]></content:encoded>
            <category>release</category>
            <category>trust</category>
        </item>
        <item>
            <title><![CDATA[v2.9: Print-Quality Layout — Documents Worth Printing]]></title>
            <link>https://dotit.uts.qa/blog/v29-print-quality</link>
            <guid>https://dotit.uts.qa/blog/v29-print-quality</guid>
            <pubDate>Fri, 06 Mar 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[v2.9 adds print-quality layout keywords: page, font, header, footer, watermark, and break. Your .it files now produce documents that look like they came from a design agency.]]></description>
            <content:encoded><![CDATA[<p>v2.9 adds print-quality layout keywords: <code>page</code>, <code>font</code>, <code>header</code>, <code>footer</code>, <code>watermark</code>, and <code>break</code>. Your <code>.it</code> files now produce documents that look like they came from a design agency.</p>
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_SaGr" id="the-print-problem">The print problem<a href="https://dotit.uts.qa/blog/v29-print-quality#the-print-problem" class="hash-link" aria-label="Direct link to The print problem" title="Direct link to The print problem" translate="no">​</a></h2>
<p>Every organization eventually needs to print something. A contract for signing. An invoice for records. A report for the board. Until v2.9, IntentText rendered clean HTML but had no concept of page layout.</p>
<p>Word processors solve this with WYSIWYG editors. LaTeX solves it with a typesetting language. Both are overkill for structured documents. You shouldn't need a page layout tool to put a logo in the header.</p>
<h2 class="anchor anchorTargetStickyNavbar_SaGr" id="six-new-keywords">Six new keywords<a href="https://dotit.uts.qa/blog/v29-print-quality#six-new-keywords" class="hash-link" aria-label="Direct link to Six new keywords" title="Direct link to Six new keywords" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_SaGr" id="page"><code>page:</code><a href="https://dotit.uts.qa/blog/v29-print-quality#page" class="hash-link" aria-label="Direct link to page" title="Direct link to page" translate="no">​</a></h3>
<p>Set paper size and margins:</p>
<div class="language-text codeBlockContainer_fmjG theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_yWK0"><pre tabindex="0" class="prism-code language-text codeBlock_iKbv thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_GP9I"><div class="token-line" style="color:#393A34"><span class="token plain">page: | size: A4 | margin: 1in</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_SaGr" id="font"><code>font:</code><a href="https://dotit.uts.qa/blog/v29-print-quality#font" class="hash-link" aria-label="Direct link to font" title="Direct link to font" translate="no">​</a></h3>
<p>Control typography:</p>
<div class="language-text codeBlockContainer_fmjG theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_yWK0"><pre tabindex="0" class="prism-code language-text codeBlock_iKbv thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_GP9I"><div class="token-line" style="color:#393A34"><span class="token plain">font: | body: Georgia | heading: Helvetica | size: 11pt</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_SaGr" id="header"><code>header:</code><a href="https://dotit.uts.qa/blog/v29-print-quality#header" class="hash-link" aria-label="Direct link to header" title="Direct link to header" translate="no">​</a></h3>
<p>Three-zone page header (left, center, right):</p>
<div class="language-text codeBlockContainer_fmjG theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_yWK0"><pre tabindex="0" class="prism-code language-text codeBlock_iKbv thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_GP9I"><div class="token-line" style="color:#393A34"><span class="token plain">header: | left: Acme Corp | center: CONFIDENTIAL | right: {{date}}</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_SaGr" id="footer"><code>footer:</code><a href="https://dotit.uts.qa/blog/v29-print-quality#footer" class="hash-link" aria-label="Direct link to footer" title="Direct link to footer" translate="no">​</a></h3>
<p>Three-zone page footer:</p>
<div class="language-text codeBlockContainer_fmjG theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_yWK0"><pre tabindex="0" class="prism-code language-text codeBlock_iKbv thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_GP9I"><div class="token-line" style="color:#393A34"><span class="token plain">footer: | left: Page {{page}} of {{pages}} | right: Ref: CONTRACT-042</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_SaGr" id="watermark"><code>watermark:</code><a href="https://dotit.uts.qa/blog/v29-print-quality#watermark" class="hash-link" aria-label="Direct link to watermark" title="Direct link to watermark" translate="no">​</a></h3>
<p>Diagonal text overlay:</p>
<div class="language-text codeBlockContainer_fmjG theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_yWK0"><pre tabindex="0" class="prism-code language-text codeBlock_iKbv thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_GP9I"><div class="token-line" style="color:#393A34"><span class="token plain">watermark: DRAFT | opacity: 0.08</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_SaGr" id="break"><code>break:</code><a href="https://dotit.uts.qa/blog/v29-print-quality#break" class="hash-link" aria-label="Direct link to break" title="Direct link to break" translate="no">​</a></h3>
<p>Force a page break:</p>
<div class="language-text codeBlockContainer_fmjG theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_yWK0"><pre tabindex="0" class="prism-code language-text codeBlock_iKbv thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_GP9I"><div class="token-line" style="color:#393A34"><span class="token plain">break: page</span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_SaGr" id="the-three-zone-layout">The three-zone layout<a href="https://dotit.uts.qa/blog/v29-print-quality#the-three-zone-layout" class="hash-link" aria-label="Direct link to The three-zone layout" title="Direct link to The three-zone layout" translate="no">​</a></h2>
<p>Headers and footers use a three-zone model: left, center, right. This covers 95% of real document headers without requiring a layout engine:</p>
<div class="language-text codeBlockContainer_fmjG theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_yWK0"><pre tabindex="0" class="prism-code language-text codeBlock_iKbv thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_GP9I"><div class="token-line" style="color:#393A34"><span class="token plain">header: | left: Company Name | center: Document Title | right: Page {{page}}</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">footer: | left: Confidential | right: Printed: {{date}}</span><br></div></code></pre></div></div>
<p>The renderer maps these to CSS <code>@page</code> rules with running headers and footers. The result works in <code>print-to-PDF</code> workflows and dedicated PDF exporters.</p>
<h2 class="anchor anchorTargetStickyNavbar_SaGr" id="real-examples">Real examples<a href="https://dotit.uts.qa/blog/v29-print-quality#real-examples" class="hash-link" aria-label="Direct link to Real examples" title="Direct link to Real examples" translate="no">​</a></h2>
<p>A legal contract with full layout:</p>
<div class="language-text codeBlockContainer_fmjG theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_yWK0"><pre tabindex="0" class="prism-code language-text codeBlock_iKbv thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_GP9I"><div class="token-line" style="color:#393A34"><span class="token plain">title: Master Service Agreement</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">page: | size: letter | margin: 1.25in 1in</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">font: | body: Times New Roman | heading: Arial | size: 11pt</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">header: | left: Acme Corp | right: MSA-2026-042</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">footer: | left: Confidential | center: Page {{page}} of {{pages}} | right: v1.0</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">watermark: DRAFT</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">section: Terms</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">text: ...</span><br></div></code></pre></div></div>
<p>Render with <code>intenttext contract.it --print --theme legal</code> and you get a document that looks like it came from outside counsel.</p>
<p><a class="" href="https://dotit.uts.qa/docs/cookbook/print/print-ready-documents">See the print cookbook →</a></p>]]></content:encoded>
            <category>release</category>
            <category>print</category>
        </item>
        <item>
            <title><![CDATA[Introducing IntentText: Documents That Think]]></title>
            <link>https://dotit.uts.qa/blog/introducing-intenttext</link>
            <guid>https://dotit.uts.qa/blog/introducing-intenttext</guid>
            <pubDate>Sun, 01 Mar 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Every document format forces a choice. Binary formats (Word, PDF) give you layout but lock out machines. Markdown gives you plaintext but stops at content. Neither understands what the document means.]]></description>
            <content:encoded><![CDATA[<p>Every document format forces a choice. Binary formats (Word, PDF) give you layout but lock out machines. Markdown gives you plaintext but stops at content. Neither understands what the document <em>means</em>.</p>
<p>IntentText is a new open format that refuses the tradeoff.</p>
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_SaGr" id="the-problem">The problem<a href="https://dotit.uts.qa/blog/introducing-intenttext#the-problem" class="hash-link" aria-label="Direct link to The problem" title="Direct link to The problem" translate="no">​</a></h2>
<p>Organizations run on documents — contracts, invoices, reports, policies. These documents carry structured intent: deadlines, approvals, signatures, metrics, contact information. But in every existing format, that intent is buried in prose. You can read it. Your code cannot.</p>
<p>Markdown gets close. It's readable. It's plaintext. But try querying all deadlines across your contracts folder. Try sealing a document so no one can tamper with it. Try merging a template with your CRM data. Markdown has no answer.</p>
<h2 class="anchor anchorTargetStickyNavbar_SaGr" id="the-dual-purpose-insight">The dual-purpose insight<a href="https://dotit.uts.qa/blog/introducing-intenttext#the-dual-purpose-insight" class="hash-link" aria-label="Direct link to The dual-purpose insight" title="Direct link to The dual-purpose insight" translate="no">​</a></h2>
<p>A document should be written once and serve two audiences:</p>
<ol>
<li class=""><strong>Humans</strong> read it as a professional document — themed, printable, clear.</li>
<li class=""><strong>Machines</strong> parse it as structured data — queryable, composable, trustworthy.</li>
</ol>
<p>This is what IntentText does. A <code>.it</code> file is a plain text document where every line starts with a keyword that declares its <em>intent</em>.</p>
<div class="language-text codeBlockContainer_fmjG theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_yWK0"><pre tabindex="0" class="prism-code language-text codeBlock_iKbv thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_GP9I"><div class="token-line" style="color:#393A34"><span class="token plain">title: Service Agreement</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">summary: Consulting services Q2 2026</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">meta: | client: Acme Corp | ref: CONTRACT-2026-042</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">section: Scope</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">text: Strategic consulting for platform migration.</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">deadline: Phase 1 complete | date: 2026-04-30</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">section: Parties</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">contact: Ahmed Al-Rashid | role: CEO | email: ahmed@acme.com | org: Acme Corp</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">approve: Reviewed by legal | by: Sarah Chen | role: Legal Counsel</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">sign: Ahmed Al-Rashid | role: CEO | at: 2026-03-06T14:32:00Z</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">freeze: | status: locked</span><br></div></code></pre></div></div>
<p>That's a complete contract. A human reads it clearly. But your code can also:</p>
<ul>
<li class="">Parse it into a typed AST</li>
<li class="">Query all deadlines across 500 contracts</li>
<li class="">Verify the document hasn't been tampered with</li>
<li class="">Merge it from a template with CRM data</li>
<li class="">Render it as a themed PDF</li>
</ul>
<p>One file. Both audiences. No conversion step.</p>
<h2 class="anchor anchorTargetStickyNavbar_SaGr" id="whats-in-the-box">What's in the box<a href="https://dotit.uts.qa/blog/introducing-intenttext#whats-in-the-box" class="hash-link" aria-label="Direct link to What's in the box" title="Direct link to What's in the box" translate="no">​</a></h2>
<p>IntentText ships as a core npm package (<code>@dotit/core</code>) with:</p>
<ul>
<li class=""><strong>A stable canonical keyword core</strong> with aliases and extensions for document identity, content, structure, data, agent workflows, trust, and print layout</li>
<li class=""><strong>8 built-in themes</strong> for professional rendering</li>
<li class=""><strong>A query engine</strong> that works across files and folders</li>
<li class=""><strong>A trust system</strong> — approvals, signatures, sealing, and tamper detection</li>
<li class=""><strong>Template merging</strong> with <code>{{variable}}</code> syntax and <code>{{each:}}</code> loops</li>
</ul>
<p>Plus an ecosystem: CLI, VS Code extension, MCP server for AI agents, Python SDK, web editor, and the Hub for community templates.</p>
<h2 class="anchor anchorTargetStickyNavbar_SaGr" id="whats-coming">What's coming<a href="https://dotit.uts.qa/blog/introducing-intenttext#whats-coming" class="hash-link" aria-label="Direct link to What's coming" title="Direct link to What's coming" translate="no">​</a></h2>
<p>This is v2.11 — the result of rapid iteration on what documents actually need. We're working on:</p>
<ul>
<li class="">More themes from the community</li>
<li class="">Richer query operators</li>
<li class="">IDE integrations beyond VS Code</li>
<li class="">A desktop app for visual editing</li>
</ul>
<p>The format is open. The spec is public. If your documents carry intent, they should be <code>.it</code> files.</p>
<p><a class="" href="https://dotit.uts.qa/docs/guide/quick-start">Get started →</a></p>]]></content:encoded>
            <category>announcement</category>
            <category>launch</category>
        </item>
    </channel>
</rss>