Shallsheetrequirements matrix

How the matrix is made

A requirements matrix is the table a proposal team builds on day one: every obligation in the solicitation, one per row, with the page it sits on. Building it is called the shred. Shallsheet does it in two steps, and prints what each step could not settle beside what it did.

The index, which runs before you pay

The index reads the PDF's text layer page by page with pdf.js, in your browser, and cuts it into sentences: at a full stop followed by a capital, at a blank line, at a numbered item such as L.3.2 or (a), and at a heading set in capitals. It keeps every sentence that carries one of shall, must, will, required, submit, attach, no later than, page limit, due, deadline, font, margin, as a whole word in any case. Each one is stored with its page and its byte offset in that page's text, exactly as extracted: no spelling fixed, no line break removed. The same code runs on the server after payment, so the count you are quoted is the count you are sold.

No model is involved in the index. The same file gives the same sentences every time, and the page count picks the price: $79 up to 150 pages, $149 up to 400.

What the index misses

It reads sentences. An obligation that no sentence states is invisible to it, and a solicitation has several kinds of those:

A matrix is a start. The unresolved list is the part a person has to read, and it is the part a reviewer at a seat vendor is paid for.

The typing step, which runs after you pay

The indexed sentences go to Claude Haiku 4.5 (claude-haiku-4-5-20251001) in windows of 20 pages, one call per window, at most six at a time. The call sends the sentences and their pages, never the whole PDF, and asks for JSON in a fixed shape: page, span, kind, section. The model labels; it is never the source of a row.

Every row it returns is checked with indexOf against the text of the page it names. A span found there byte for byte becomes a row. Anything else goes to the unresolved list with one of six reasons, and the receipt counts them:

ReasonWhat happened
span not found on pageThe model returned words that are not on the page it named. Shown without the highlighter, because they are not a quote.
not typedThe index found the sentence and the model gave it no kind. Often right: "the Government will evaluate" asks nothing of you. Read it and decide.
span under 8 charactersToo short to prove where it came from.
the model call for this window failedThe API refused or timed out for those 20 pages; every sentence in them is listed.
the run reached its time limit before this windowA run stops waiting after 100 seconds and delivers what came back.
window over the input capMore than 240,000 characters of sentences in 20 pages; the rest wait here.

The page then prints three numbers in the same type: sentences seen, rows typed, unresolved. A vendor who sells review by the seat has every reason to print the second number large and leave the third out. Here the third is the work you still have, and it gets the same size.

The kinds

KindA row of this kind tells you
RequirementA shall, must or will the contractor or offeror carries.
AttachmentA form, certification, letter or schedule to include.
FormatPage limits, fonts, margins, file types, copies, volume structure.
DeadlineWhen the offeror must submit or do something.
Eligibility gateWho may submit: set-asides, SAM registration, licences, bonds.
Evaluation factorHow offers are scored and weighted.
Key dateA date that is not your deadline: a site visit, a period of performance.
ClauseA FAR, DFARS or agency clause incorporated or cited.

Controlled markings

Before anything is sent, the text is scanned for CUI banners, ITAR and EAR export warnings, classification markings, limited distribution statements B to F and FOUO. A document carrying any of them is quoted free like any other, and the paid run never sends its text to the model: it delivers the index-only matrix, and the receipt names the marking and its page. The scan works by pattern on the text layer. A controlled document with no marking on its text is not caught, and your own judgement carries that weight.

What it costs elsewhere

SubstitutePrice, as publishedRead
DeepRFP Pro"$89 per user, per month. Cancel anytime!"deeprfp.com/pricing, 2026-10-09
WinifyAI Starter$49.99 per month, one RFP a month up to 150 pages [[UNVERIFIED]]A search summary of its Capterra listing, 2026-10-09; the vendor page refused a direct read
ResponsiveSells "document shredding" inside its platform; no price is publishedhelp.responsive.io, 2026-10-09
By handA highlighter, a spreadsheet and the evening the solicitation drops

Three solicitations a year do not need a subscription. Shallsheet sells one document at a time.

Limits