AI
An AI assistant that answers questions over company documents
Staff upload the company's policies and manuals, then ask questions in plain language and get an answer with the source document and page quoted. Each answer says which documents it used, and staff only see answers from documents their team is allowed to read.
Automatically generated draft
Written by machine against our own engineering playbook. The company is invented; the decisions are the ones we would make on a real build. A reviewed blueprint goes further — nine sections, agreed line by line, and it is what the build is tested against.
Section 01 · What has to work
Staff upload manuals and query them in plain language, receiving precise answers citing document sources and page numbers filtered by team permissions.
Section 03 · Screens
Every screen, and what it is for.
- ›Upload — Admin uploads company PDFs, entering title and team visibility. Instant: Drag-and-drop file staging.
- ›Library — Staff view accessible documents with search and filtering. Instant: Instant list rendering.
- ›Chat — Staff ask questions and receive answers with source citations. Instant: Streaming token display.
- ›Manage Teams — Admin assigns users to teams and document access. Instant: Role toggle persistence.
Anything not on this list is not in version one. That is what keeps a fixed price fixed.
Section 04 · The data model
What it stores, and who can read a row.
document
id uuid, title text, file_url text, team_id uuid, created_at timestamptz
Access · Staff can read if document.team_id matches user.team_id or is null.
document_page
id uuid, document_id uuid, page_number int, content text, embedding vector(1536)
Access · Staff can read if parent document matches user team permissions.
query_log
id uuid, user_id uuid, question text, answer text, sources jsonb, created_at timestamptz
Access · Staff can read only rows where user_id equals current user.
team
id uuid, name text, created_at timestamptz
Access · Any authenticated user can read all teams.
Those access rules belong in the database, not in the screens. Someone who edits the address bar still cannot read a row that is not theirs — and the test that proves it blocks delivery if it fails.
Section 05 · States
processing → ready → failed(reason)
Most scope arguments three weeks into a build are really arguments about a state nobody named at the start.
Section 06 · Where this breaks
What bites products like this one.
Large PDF uploads time out during text extraction and embedding generation on the server.
Offload PDF text parsing and embedding generation to an asynchronous background worker queue.
Vector search returns passages from documents the user's team is unauthorized to view.
Enforce team UUID filters directly in the SQL vector similarity query before returning context.
Section 08 · Deliberately left out
What version one does not do.
- ×Automatic scheduled re-indexing of updated source URLs — adds heavy sync logic, makes sense in v2 after manual upload is stable.
This is the section that protects the date, and the only place in the document where somebody says no. It is also why clients trust the rest of it.
Still open
What we would ask before quoting.
- What embedding model and vector database provider should store the document chunks?
- How are users and team memberships initially provisioned into the database?
Half of this already exists
Doc Intake
The paperwork half of this is a solved problem: documents read on arrival, validated against your rules, and a person asked only about what does not add up.
It is one of our pre-built products: the code is handed over to you, adapted to your own wording and rules, and the rest of the specification above is built on top of it rather than from scratch.
Your product, not this one
Get this written for what you are actually building.
Describe it in a sentence and the generator returns the same sections for your own product. Free, no email, nothing saved to a list.
Next step
Find out if your idea fits in 10 working days.
Tell us what you want to build. We reply the same day with a straight yes, no, or here is what we would cut.