Inspiration
In construction, subcontractors and suppliers compete for work on specific buildings, but their pitch is usually a generic capabilities PDF. Business development teams spend usually at least 50+ hours assembling bid packages that never show the actual project. After a conversation with a stakeholder at Laminar, we saw a clear gap: firms need project-specific, visual proof of fit, produced in minutes, not weeks, and owners and GCs need to evaluate it quickly.
We approached it starting from one real building and one real buyer persona, make the workflow work end to end, then generalize it.
What it does(needs ploishing)
Tradesmark is a proposal engine tool for construction business development. It does it in two steps:
- Scout: it searches five regions at once, about four web searches each, for real construction projects where the firms are named. It then removes duplicates and scores each project on how well it fits Tradesmark.
- Dossier: for one chosen project, it researches the firms involved and lists them by role: owner, architect, general contractor, facade contractor and so on. Every fact links to a numbered source, and any firm it can’t find in the sources is dropped, so names can’t be made up. Our clients one of the requirement was to have a model that can draft a 3d model by only a user entering an address and, optionally, a photo. Tradesmark geolocates it, maps the surrounding buildings, researches public facts and generates a consistent, brand-styled 3D model ready for the drone shot animation. Every figure is labelled observed with a source link or inferred by our ai agent, so a sales team can't accidentally send a client a made-up claim.
How we built it:
- Stack: Next.js + TypeScript on Vercel; Supabase for proposals, project records and a private model storage bucket.
- Pipeline: Google Geocoding → OpenStreetMap context → Claude Opus 5.5 (low effort, web search limited to building facts) → server-side validation → GLB export + model metadata → shot compiler → pitch.
- Enterprise guardrails: access-code auth, per-client rate limits, server-side input validation, secrets kept only in server environment variables, private storage with server-mediated reads, structured errors, and logs that record step timings but never keys, photos, addresses or prompts.
- Live output : standard GLB + JSON metadata, so models can feed other viewers, CRMs or bid tools.
Challenges we ran into
- Matching the customer's existing system: our first generator produced a standalone web page; the downstream shot system needed a real 3D model plus metadata. We changed the output to fit their pipeline rather than asking them to adapt as they were already working countless hours to adapt a pipeline themselves.
-Coordination: Our agents kept overlapping, so we turned GitHub into a message board for them. Cross-team questions became issues with a clear ask, and pings routed each one to the owner's agent, which replied with evidence. Agents reviewed each other's pull requests and checked the board, main and open PRs before every task to avoid duplicate work. Humans approved every push, merge and migration, and a shared handoff file let any agent pick up where the last one stopped.
Accomplishments that we're proud of
- An end-to-end proposal for clients to get a ariel view of that usually is done by high gear cameras.
- Generation from just an address, with cited facts and labelled estimates.
- Production hygiene from day one: a large automated test suite, typed schemas, validation and documented deployment and smoke tests.
What we learned
- Enterprise value comes from fitting the customer's workflow and data formats.
- Lock what defines quality and brand; listen to customer's problem and try getting the whole scenario and see where they are coming from.
- Every external dependency needs observability and a fallback before it touches a customer.
What's next for Tradesmark
- Measure time-to-proposal and response rates against their current process.
- Integrating it into their CRM (Salesforce, HubSpot), project databases and permit data for automatic stakeholder discovery.
- Direct uploads for large files.
Built With
- anthropic
- claude
- claude-code
- drei
- fastapi
- gmail-api
- next.js
- node.js
- numpy
- openstreetmap
- postgresql
- python
- react
- react-three-fiber
- shapely
- supabase
- tailwindcss
- three.js
- trimesh
- typescript
- uv
- vercel
- vitest
- zod