-
-
ClairForm: check a grant application against the call for proposals
-
Every requirement highlighted where it is written in the call
-
Requirement detail: source sentence, page and detected constraint
-
Real errors found: wrong budget total, outdated extract, document too long
-
Sourced checklist built from the call
-
Overview with prioritised next actions
-
Export: PDF report and ZIP package in checklist order
-
Documents recognised and linked to requirements
Inspiration
Grant applications are often rejected before anyone reads them: a company registration extract older than three months, a project summary that is too long, a budget whose total does not add up, a partner letter requested too late. These rules are scattered across a call document that can run to dozens of pages, and the checking is done by hand, the night before the deadline.
The cost is real. According to a study for the Law Family Commission on Civil Society (UK, 2022, reported by Charity Times), small charities spend about 38% of their grant income on preparing applications. In French-speaking countries, and in Africa in particular, young organisations often apply to several calls at once, with administrative documents (company registration, tax and social security certificates) that take a long time to obtain.
Existing tools mostly help people find funding or write their texts. They are online subscription services that require uploading ID cards, statutes and bank details to a third-party server. Nobody checks the application file itself against the rules, let alone offline.
Who is it for? Project leaders, non-profits, startups and NGOs answering calls for proposals, and the incubators who review their applications.
What it does
- Reads the call. Import the call document (PDF, Word, text). ClairForm extracts every required document, eligibility condition and numeric rule. Each requirement stays highlighted exactly where it is written, with its page and the reason it was selected.
- Understands the constraints. Deadline, maximum grant, minimum co-funding, maximum duration, page limits, "issued less than 3 months ago", "currently valid", "signed", "two CVs".
- Recognises your documents. Import all your files at once (PDF, Word, Excel, CSV, photos). Each file is sorted into one of 17 types (ID card, company registration, tax certificate, bank details, budget, CV, support letter…) and linked to the requirement it covers. You confirm or correct.
- Checks consistency. Budget total different from the sum of its lines, amount above the cap, own contribution too low, requested amount different between documents, timeline too long, registration extract too old at the deadline, expired ID, summary too long, missing signature, duplicates.
- Tells you what to do next. Actions ranked by priority: fix errors first, then request right away the documents that depend on someone else (bank, administration, partner), then complete and confirm.
- Exports. A PDF report, a ZIP package of your documents renamed in checklist order (with a SHA-256 fingerprint per file), and the data as JSON.
ClairForm does not decide for you: eligibility conditions are confirmed by the user, and every alert cites its source. The interface is in French, for French-speaking applicants; calls written in English are also understood.
To try it: click "Découvrir avec un dossier prérempli" (pre-filled application), then open the Appel tab (the call) and click a highlighted passage, the Contrôles tab (checks) to see 3 real errors, and the Exporter tab for the PDF report and ZIP package.
How we built it
- Python backend (Starlette, Uvicorn, Pydantic, SQLite). Every imported file is read in an isolated process with time and memory limits (pypdf, python-docx, openpyxl, Pillow), after its extension, binary signature and size are checked.
- Deterministic call parser: splits text into headings, lists and sentences (including lines broken by PDF layout), detects mandatory wording in French and English, finds "documents to provide" and "eligibility" sections, extracts dates and amounts (€, FCFA, XAF, USD), and attaches follow-up details to the right requirement.
- Pure, testable assessment engine: explained automatic matches, user decisions take priority, budget and timeline checks, weighted coverage score, prioritised actions.
- Interface in React and strict TypeScript, no CDN, no bundler. The design is inspired by a paper application file, with a yellow highlighter reserved for the text of the call.
- Security: CSRF and DNS-rebinding protection, strict CSP, files stored under generated names, server-confirmed upload cancellation, no outgoing network requests.
- Tests: 88 automated tests, including full user journeys driven in Chromium with Playwright (real files, errors, slow-upload cancellation, network loss, keyboard only, mobile, isolation between online visitors).
- Transparency: no AI API or model is used inside the product. Development was assisted by an AI coding assistant (Claude, by Anthropic) for code, tests, documentation and submission texts; the project was designed, directed and tested by the author. Open-source licences are listed in
THIRD_PARTY_NOTICES.md.
Challenges we ran into
- PDF text has no structure. Lines break mid-sentence, numbered lists look like headings, and introductory sentences ("…or the application will be rejected:") make the whole following list mandatory. We had to tell apart line continuations, headings, bullets and list introductions.
- Matching the right date to the right purpose. On an ID card, birth, issue and expiry dates sit side by side. The engine reads the words before each date to keep the relevant one.
- Cancelling for real. Cancelling in the browser is not enough if the server already received the file, so cancellation is confirmed by the server.
- A real-world bug. On Windows, per-user Python libraries were invisible to the isolated reader, so every document was reported as "corrupted". We found the root cause, fixed it, and added a startup self-test, a clear on-screen warning and a regression test.
Accomplishments that we're proud of
- Clickable highlighting: you see exactly what the tool understood from the call, and you can correct it.
- A demo that is not staged: the pre-filled application runs through exactly the same engine as your own files, and its errors come from real files (a 12-page PDF, an Excel budget with a wrong total, a 5-month-old registration extract).
- Fully offline when run locally, in line with OFFGRID: nothing is sent to a third party. The online version gives each visitor a private space and deletes inactive files automatically.
What we learned
Reading real-world documents is much harder than generating text. A genuinely useful product can be fully deterministic. And trust comes from traceability: showing the source, the page and the exact sentence behind every result.
What's next for ClairForm
- Local OCR for scanned documents, still running on the user's computer.
- A shared library of reusable "call profiles", reviewed by incubators.
- A coach mode for incubators following several applications.
- A packaged desktop app (double-click, no Python needed).
Built With
- openpyxl
- pillow
- pydantic
- pypdf
- python
- python-docx
- react
- reportlab
- sqlite
- starlette
- typescript
- uvicorn

Log in or sign up for Devpost to join the conversation.