Maritime engineers stopped digging through manuals and now find any spare part instantly.
The cooling water outlet temperature for the main engine is set to 85 ± 6 °C, with an alarm limit of 95 °C and a shutdown at 100 °C.
Every answer opens the page it came from, with the line highlighted.
The situation
How this used to work
Benefit Software supplies spare parts to ships. A customer sends a fixed spreadsheet with four columns: the name of the machinery, its model, its type and its maker. Somebody at Benefit then has to find, for every row, which manual in their library covers that part.
The way that was done was file explorer. Open the library, type the name, try the name with the type, try the name with the model, try the name with the maker, see what comes back, open the candidates one at a time. As one of them put it on our first call, he goes in, sits down and searches, and then opens things.
One row at a time, by hand, for every request. On a large batch, items get missed.
What we built
The system
The AI Maritime Platform. It has two modes and they answer the same question from opposite ends.
Conversational Search is for one part. Ask in plain language, in Greek or English, and the answer comes back with the document, the page and a link into the original file.
The Excel Batch Pipeline is for the whole sheet. Upload the customer's machinery list, and it comes back filled in, row by row, with the source behind every match and a status on each one.
How it works
The pipeline, step by step
The library goes in once
Each document runs a chain the admin can watch move: uploading, parsing, chunking, contextualizing, embedding, storing. Scanned pages go through OCR on the way in, so a photographed manual from 1996 is as searchable as a born-digital PDF.
The admin watches each document move through the chain, step by named step.
Plain language, either language
The question goes to a model holding a search tool. It writes the actual query itself, so the engineer does not have to guess the vocabulary the manual happens to use.
Two searches, not one
A dense vector search runs next to a keyword search, and the results are fused. That pairing matters here: part numbers are exact strings that meaning-based search alone will drift off, and hull-specific filters keep one ship's manuals out of another ship's answer.
Twenty candidates, five survivors
A reranker reads the top twenty passages against the question and keeps the best five. Everything under the relevance floor is dropped rather than padded out into an answer.
Under the floor is dropped, not padded out into an answer.
The page, not a paraphrase
The answer arrives with source cards. Open one and the PDF viewer lands on the page with the matched text highlighted. A scanned page has no text layer to highlight, so it says so and carries an OCR badge instead of pretending. A spreadsheet cites the sheet, the row and the column.
Three kinds of source. The scan admits it cannot highlight.
The sheet comes back filled in
The same machinery underneath, run over a whole file. Every row returns found, review, no match or skipped, plus an error state when a lookup genuinely fails rather than quietly reading as a no match. A confidence score decides found from review, so a weak match is escalated to a human instead of being asserted.
| Name of machinery | Status |
|---|---|
| Fresh water cooling pump | Found |
| Fuel oil supply unit | Found |
| Turbocharger, aux. engine | Review |
| Air compressor, main | Found |
| Oil mist detector | Skipped |
| Boiler feed water pump | Found |
A status per row. Review means a human looks, not that the answer is wrong.
What changed
The result
The platform has been running in production since February 2026, on real machinery requests.
The second iteration shipped on 18 May 2026 and was checked against real production data on a thirteen row sheet: six found, four flagged for review, none missed, two skipped as incomplete queries. The customer accepted it and passed it to their team.
The engineer's job did not become clicking accept. It became reading four review rows instead of searching seventeen.
The stack
Frontend
- Next.js
- Tailwind
- shadcn/ui
- Vercel
Backend
- FastAPI
- Python
- Railway
- SSE streaming
Retrieval
- Qdrant Cloud
- hybrid dense + BM25
- Voyage AI voyage-3
- Cohere Rerank v3.5
Documents
- Claude Vision OCR
- Gemini 2.5 Flash
- PyMuPDF
- Cloudflare R2