bluebeam revu is the industry standard for plan markup and takeoff. it’s also windows-only, which means on my mac it runs through parallels, which means i spend part of every morning watching a virtual machine wake up so i can draw lines on a pdf.
it’s resource intensive, and it also tied me to my desktop unless i wanted to pay for another parallels and windows license for my laptop.
here’s the thing about bluebeam: i use maybe 10% of it. open a plan set, calibrate the scale, mark up fence lines, measure lengths, count gates, export a marked-up pdf for the GC. that’s the whole job. the other 90% (studio collaboration, 3d models, form filling, redaction) is for somebody else. but the license doesn’t care which 10% you use. it’s $600+ a year either way.
so on june 10th i opened claude code (fable 5) in a cmux tab and started building my own.
two days, 94 tests
the first commit landed at 6:30 pm on june 10. the last item on the v1 roadmap closed out the next evening. in between: 6,145 lines of typescript across 42 source files, with 94 passing unit tests on the core logic.
two years ago it took me a month to get a python script to read a csv without choking. the tools have changed that much.
the stack is electron, react 19, and typescript, with pdf.js doing the rendering and pdf-lib handling export. claude code wrote most of it. my job was knowing exactly what i wanted it to do, which turns out to be the hard part.
what it actually does
- opens a folder of plans and shows page thumbnails
- calibrates scale by tracing a known dimension on the sheet. two clicks, type the actual footage, done. there are also 20 architectural and civil scale presets built in, from 1/16” = 1’-0” up to 1” = 100’.
- marks up fence lines with reusable presets. mine are seeded for fence work: 6’ chain link with toprail and bottom wire in red, 8’ chain link with 3-strand barbed wire in purple, gates in blue. etc.
- measures lengths in feet-and-inches, measures areas in square feet, counts terminals, gates, etc.
- collects everything in a takeoff panel grouped by label, and exports the totals straight to csv for my estimate spreadsheet
- exports a marked-up pdf to send back to the GC
the markups never touch the original pdf. every plan gets a sidecar json file next to it (plan.pdf.markups.json) and the app reads from that. drop the folder in dropbox and the other estimator’s mac picks up my markups automatically. no cloud accounts. no studio sessions. just files in a folder, which is how construction has shared documents since forever.
the part where it fought back
not everything was smooth. the first real bug: every page rendered blank. no error, no console warning, just white rectangles where the drawings should have been.
turns out the modern build of pdf.js uses javascript features that electron’s chromium doesn’t ship yet. the fix is using the legacy build instead. that’s one line in an import path, and it took longer to find than most of the features took to build.
the revision clouds were the opposite kind of problem: pure geometry. a cloud is a chain of bézier scallops marching around a polygon, and getting the bulge right so it reads like a hand-drawn cloud on a d-size sheet took real math. claude knew the math. i knew what the cloud needed to look like. between us we got there.
it still has to talk to bluebeam
i can’t make the GCs switch. whatever i send back has to open clean in bluebeam or acrobat on their end, or the whole thing is a science project.
so export comes in two flavors. one flattens the markups into the pdf. pixels, done. the other writes real pdf annotations, the same /Polygon and /PolyLine objects bluebeam itself writes, so a GC can click my fence lines, read my measurements, and edit them if they want. their bluebeam has no idea my markups came from a homemade electron app, and it doesn’t need to know.
interop was the last thing i built, not the first. prove the workflow works for you before you make it polite for everybody else.
work in progress
i am still building this, so it’s not public yet. i am adding capabilities to do templates for RFIs, submittals, my own drawings marked up, and eventually i will bring in my own converted cad files from drawing the details submittals myself with ai, but that’s another project.
i also want to add bid tracking and reminders, maybe a couple of other things to it.
is it actually better?
for my workflow, yes. native on the mac, no parallels, no license renewal email. the tool presets mean i set up my takeoff standards once and reuse them on every bid. and when something annoys me, i don’t file a support ticket. i open claude/codex and fix it before lunch.
would i tell another estimator to dump bluebeam today? probably not. i’ve been shaking this thing down against real bid sets for all of two days, and the repo stays private until it earns its way out. but the bigger point stands: tools you used to rent are now tools you can build. a fence estimator with 37 years in the field and zero computer science degrees shipped a working takeoff app in two days.
think about what’s sitting in your workflow that you’d build differently if you could. because now you can.
ContractorKeith