Takeoff AI is an AI application for automating the production of civil engineering takeoffs from PDF documents.
Users upload a plan PDF, preview it in the browser, and start a background extraction workflow that stores the file, queues processing, and sends a notification when the job is done.
PLAN PDF
│
┌──────────────┴──────────────┐
│ │
▼ ▼
Rendered pages PDF metadata
/ high-res images / text / coords
│ │
▼ │
Vision model │
│ │
│ "This is a wall" │
│ "This is a door" │
│ "This is a dimension" │
│ "This room is bedroom" │
│ │
└──────────────┬──────────────┘
▼
STRUCTURED OBJECTS
│
▼
PYTHON GEOMETRY ENGINE
│
┌───────────┴───────────┐
▼ ▼
Measurements Validation
│ │
└───────────┬───────────┘
▼
ANNOTATED PLAN
│
▼
BEME
- Frontend: Next.js + TypeScript
- Backend: Express + TypeScript
- Worker: Python + BullMQ
- Preview: PDF.js
- Storage: shared Docker volume
- Queue: Redis
- Database: Postgres
.
├── frontend/
│ ├── app/
│ │ ├── globals.css
│ │ ├── layout.tsx
│ │ └── page.tsx
│ ├── components/
│ │ ├── pdf-page.tsx
│ │ └── pdf-preview.tsx
│ ├── lib/
│ │ └── pdfjs.ts
│ ├── public/
│ ├── Dockerfile
│ └── package.json
├── server/
│ ├── src/
│ ├── worker/
│ ├── compose.yaml
│ ├── compose.dev.yaml
│ ├── Dockerfile
│ └── package.json
└── README.md
- The frontend uploads a PDF and renders the pages locally with PDF.js.
- The Express API stores the file in the shared volume and creates a BullMQ job.
- The Python worker processes the document and sends a notification when it finishes.
- Postgres and Redis support the workflow behind the scenes.
docker compose -f server/compose.dev.yaml up --buildThis starts the frontend, API, worker, Postgres, and Redis with development build targets and file watching.
docker compose -f server/compose.yaml up --buildThis uses the production targets for the frontend, API, and worker containers.
See server/README.md for the backend endpoints and service-specific run instructions.