RXed AI News

AI to the bone.
A weekend ↓ architecture v1.0 · 2026-09-04

The notice window: the contract renewed itself because nobody counted backwards

Every agreement read once for its notice period, so the last day you can still leave arrives 30 days early with the letter already written

Setup: A weekend (~6-12 h) Running cost: $0-12/mo (software included) what it costs to run ↓ Time saved: none directly — a missed notice window costs a full extra term, so a EUR 180/month contract you had already decided to replace costs EUR 2,160 more for being days late; the published entry prices for software that tracks this are USD 450/month (ContractSafe) and USD 499/month base plus USD 49-89 per user beyond five (Concord), both vendor-published and checked 04/09/2026 After setup: You run it — the clock runs itself every morning; confirming each contract once, and deciding whether to send, stay with you Data lives: Your server — Supplier contracts hold the prices you negotiated, the terms you conceded and the list of who you depend on. Reading them with a local model means none of that leaves the building, and the register stays on your own box.
DoclingOllamaGristn8npaperless-ngxWeasyPrintDockerOpenContractsDocuments & archiveDocument reading (OCR)Reminders
Built for small businesses in general — not a sector list.
Before you start
  • Twelve months of bank statements, read once for every recurring payment leaving the account - that list, not the filing cabinet, is what tells you which contracts exist
  • The signed PDF for each agreement, including the terms and conditions page the signature refers to
  • An always-on machine with roughly 16 GB of RAM if the reading step runs locally; a mini-VPS at EUR 5-12/month otherwise
  • Someone who will actually print, sign and post the letter - the automation stops at the printer
What breaks first FAILS SILENTLY
the renewal date taken from the signature page when the contract actually runs from delivery, activation or the first invoice. The register looks healthy and the alert fires six weeks after the window shut, which is the same as not firing at all. Check every anniversary against the first invoice, and keep the sentence the date came from next to the date.
Version history
v1.0 · 2026-09-04 — First release. Docling plus a local model drafting the renewal fields, a human confirmation step before anything enters the register, Grist doing the date arithmetic in visible formulas, and a letter generated 14 days before the deadline that a person still has to sign.

Nobody is going to remind you. The protection that forces a supplier to warn you before a contract renews is being written for consumers, not for businesses, and it does not apply to you at all. So the clock has to be yours.

The architecture

Your signed contractsOne row per agreement, confirmed byyoueach one read once for its notice wordingThe clock - works out the last day you canstill walk awayand keeps the exact sentence it worked it out fromchecked every morningA month's warning, while you canstill compare the marketA letter drafted, quoting the clause,ready to signProof of when and how you sent it,filed back on the rowNothing is sent for you. The deadline arrives with the letter written; thesignature is still yours.
the same flow as text
[ Signed contract PDFs ] — already in your document archive
        ▼
[ Docling ] turns the PDF into text that still knows its page numbers
        ▼
[ Local model via Ollama ] drafts: start date, term length, renewal type,
        │  notice period, required channel — and quotes the clause verbatim
        ▼
[ You confirm it. Once, per contract. ] ◄── the draft is never the record
        ▼
[ Grist — the register, one row per agreement ]
        │  last_notice_day = renewal_date − notice_period
        │  decide_by      = last_notice_day − 30 days
        ▼
[ n8n — one pass every morning ]
        ├─ decide_by: "a month to compare the market or renegotiate"
        ├─ −14 days: letter generated, clause quoted, ready to sign
        ├─ −3 days:  "registered post today or it renews"
        └─ after: proof of posting filed back onto the row

Nothing is sent for you. The letter is written; the signature is yours.

The design decision is the confirmation step in the middle. A model reading a contract is fast and it is wrong often enough to matter, so it produces a draft and the register holds only what a human accepted. That also gives you the thing you actually want at the deadline: the computed date and, next to it, the sentence it came from.

The problem

Take the standard clause: "this agreement renews automatically for successive twelve-month terms unless either party gives written notice at least sixty days before the end of the current term." Read on the day you sign, it is unremarkable. Read eleven months later, it means the decision you thought you had in November was actually taken in September, by you, by saying nothing. A small business carries twenty to forty of these at once — telecom, leasing, alarm monitoring, waste collection, the card terminal, the accounting package, three pieces of software, the insurance. Miss one window on a €180/month contract and it costs €2,160 to be six days late.

The law is not coming to help the business buyer, and the direction of travel proves it. Across the EU the new rules on tacit renewal are being written for consumers: one member state, Belgium, has just adopted a proactive notification duty — the supplier must warn the customer before a renewal, at least fifteen days before the deadline to object (Act of 20 April 2026, new Article VI.91 §1/1 of the Code of Economic Law, in force 1 May 2027) — and it applies to consumer contracts only. In the US the Federal Trade Commission's "click-to-cancel" rule was vacated by the Eighth Circuit on 8 July 2025, six days before it took effect; the Commission sent a fresh notice of proposed rulemaking to the budget office on 30 January 2026, and around thirty states run their own automatic-renewal statutes. Consumer statutes again. In the UK and Canada the picture is the same shape. Between two businesses the rule is freedom of contract: the clause you accepted is the clause that binds you.

The software that tracks this exists and is priced for legal departments. ContractSafe publishes $450/month as its entry plan and Concord $499/month base plus $49–89 for each user past the first five (both vendor-published, checked 04/09/2026). For thirty contracts that is not a purchase, it is a joke. What you actually need is a list, some date arithmetic, and something that shouts.

Tool choices — and why

paperless-ngx
(GPL-3.0, 44.8k stars, pushed 03/09/2026) holds the signed PDFs. If you already built the receipt intake or the e-invoice reader from this library, it is running. If not, any folder works — the archive matters because a notice letter is worth exactly as much as your ability to produce the contract it refers to.
Docling
(MIT, 64.9k stars, pushed 17/08/2026) does the reading. It keeps document structure instead of flattening the page, which is what lets you store "clause 8.2, page 6" rather than a floating sentence. Contracts are the one document type where you will be asked to point at the exact spot.
Ollama
(MIT, 179.3k stars, pushed 23/08/2026) runs the extraction on your own machine. This is not ideology. Your supplier contracts hold the prices you negotiated, the terms you conceded and the list of who you depend on — it is the most sensitive paper in the building, and it does not belong in someone's API logs. A 7–8B model handles field extraction from a clause well enough; you are asking it to copy, not to reason.
Grist
(Apache-2.0, 11.7k stars, pushed 04/09/2026) is the register. It has real Python formulas in the cells, so the date arithmetic lives in the table where you can see it and correct it, not buried in a script nobody opens. One row carries the contract, the clause, both computed dates, the letter and the proof of posting.
n8n
(Sustainable Use License — free for internal business use, 201.9k stars, pushed 23/08/2026) is the daily pass, and WeasyPrint (BSD-3-Clause, 9.6k stars, pushed 02/09/2026) prints the letter from an HTML template. AI audit →
The alternative, honestly
OpenContracts (MIT, 1.5k stars, pushed 03/09/2026) is a real contract-intelligence platform with annotation, extraction and a document layer. If you hold hundreds of agreements and someone whose job includes them, take it instead of building this. At thirty contracts it is more system than problem.
Cost
Software €0 for all of it. Hosting €0 if the box from another blueprint is already running, otherwise €5–12/month. The only recurring spend is postage when a clause demands registered mail, which runs to single-digit euros or pounds per letter across the EU and the UK — one EU example, Belgium, publishes €9.85 per registered letter at the 2026 tariff and €1.64 more for an acknowledgement of receipt. A few letters a year against $450/month is the whole argument.

Setup outline

  1. Before any software: pull twelve months of bank statements and list every recurring payment leaving the account. That list, not the filing cabinet, tells you which contracts exist. Almost everyone finds two they had forgotten.
  2. Collect the signed PDF for each one, including the terms and conditions page the signature refers to. A contract you cannot produce cannot be cancelled cleanly.
  3. Deploy Grist and n8n (both publish Docker images) on one box behind HTTPS. Build the register: supplier, what it is for, monthly amount, start date, term length, renewal type, notice period, notice channel, clause quote, clause location, status.
  4. Add two formula columns. last_notice_day counts back the notice period from the next renewal date; decide_by is thirty days before that. Sanity-check both against three contracts you already know by heart.
  5. Install Ollama and Docling. Write one prompt that returns the fields as JSON plus the verbatim clause, and run it over the archive. Expect a draft, not an answer.
  6. Confirm each row by eye against the contract. This is the slow part — budget five minutes per agreement, an afternoon for thirty. It is done once.
  7. Build the n8n workflow: read the register each morning, fire at decide_by, at fourteen days and at three days before last_notice_day. Each message carries the amount, the quoted clause, the required channel and a link to the row.
  8. Write the letter template once — your details, their details, the contract reference, the clause quoted back, the effective end date, a request for written confirmation — and have WeasyPrint fill it. Test the whole chain by setting one row's renewal date to next week.

Pitfalls — what goes wrong when you build this

The renewal date is usually not the signature date
Plenty of contracts run from delivery, activation, or the first invoice. Take the date off the signature page and your alarm fires six weeks after the window shut, which is the same as not firing. Check every anniversary against the first invoice.
The channel is part of the deadline
"Written notice by registered post" means an email does not stop the renewal, however clearly it was read. Record the channel on the row and let the letter be generated for the channel the clause demands, not the one that is convenient.
Notice periods are counted in ways you would not guess
"Three months before the end of the term" and "before 30 September of the current year" and "one month before each anniversary" produce three different dates from the same contract length. Store the raw sentence beside the computed date. When the two disagree, the sentence wins.
The model will be confident and wrong
On a stack of thirty contracts, expect two or three extractions that look perfectly reasonable and are not — a renewal term read off the wrong clause, a notice period pulled from the annex. That is the entire reason the confirmation step exists, and why the extraction must never write straight into the register.
The point is leverage, not cancellation
Alerting on the last possible day gives you one option. Alerting thirty days earlier gives you a market comparison and a conversation, which is where the money usually is — most suppliers would rather cut ten percent than lose the line. And never send notice before the replacement is signed.

Verified repos

paperless-ngx — GPL-3.0, 44.8k stars, active (03/09/2026)
Docling — MIT, 64.9k stars, active (17/08/2026)
Ollama — MIT, 179.3k stars, active (23/08/2026)
Grist — Apache-2.0, 11.7k stars, active (04/09/2026)
n8n — Sustainable Use License (free self-hosted internal use), 201.9k stars, active (23/08/2026)
WeasyPrint — BSD-3-Clause, 9.6k stars, active (02/09/2026)
OpenContracts — MIT, 1.5k stars, active (03/09/2026) — the heavier alternative

Get the next blueprint as it publishes — free, practical, verified tooling only.

Subscribe · Want this audited or extended for your business? DM @RXed_EU

What this costs to run

Priced as Extract fields from a document — one OCR'd page; output is a JSON record of 8-20 fields. the model copies six fields and one clause out of a contract and hands them over as a draft; a person confirms every row before it enters the register, and no message is ever sent without a signature. Adjust the volume to yours; the bill is a range because the assumptions are ranges.

Model$/day$/month Reasoning

Cheapest eight shown — straight per-token arithmetic on list prices: no caching, no batch discount, thinking tokens bill as output. All models + every assumption in the full explorer →
Capability & cost data: Artificial Analysis