The work
EngineeringMaritime

Maritime engineers stopped digging through manuals and now find any spare part instantly.

Benefit Software
Maritime Manual Search
All vessels

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.

operation-manual-aux-engine.pdf
Highlightp. 18
Section 3 · Pressure & temperature setting values

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

01 / Ingest

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.

Ingestion
uploading
parsingOCR
chunking
contextualizing
embedding
storing

The admin watches each document move through the chain, step by named step.

02 / Ask

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.

03 / Retrieve

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.

04 / Rerank

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.

Reranked20 → 5
0.913.2 Cooling water setting valuesKept
0.863.1 Pressure setting valuesKept
0.717.4 Maintenance intervalsKept
relevance floor
0.2912 Spare parts listDropped
0.11App. B Wiring diagramDropped
Below the floor is dropped, never padded into an answer

Under the floor is dropped, not padded out into an answer.

05 / Cite

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.

Sources3 documents
operation-manual-aux-engine.pdfp. 18
Line highlighted
service-notes-1996-scan.pdfp. 4
OCR · no text layer
machinery-list-2026.xlsxSheet 1 · row 14 · col D
Cell cited
A scan says it cannot highlight rather than pretending it did

Three kinds of source. The scan admits it cannot highlight.

06 / Batch

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.

Batch Machinery Search6 rows
Name of machineryStatus
Fresh water cooling pumpFound
Fuel oil supply unitFound
Turbocharger, aux. engineReview
Air compressor, mainFound
Oil mist detectorSkipped
Boiler feed water pumpFound

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

Free 30 minute call

Let's find where AI fits in your business

A 30 minute call, free, no commitment. You leave with two or three things worth building, whether or not you work with us.

Free, no commitmentYou own everything we buildNo slide deck