Kyle Bruxvoort

things I've made

Fetch

A Revit plugin that puts manufacturer-accurate families one click away and keeps them synced to live product data.

  • Revit
  • C#
  • React
Open project

Revit MCP

Gives an AI agent the Revit Family Editor, so a product cut sheet becomes a family that flexes correctly.

  • MCP
  • Python
  • Revit API
Open project

Layout Studio

Space planning inside Revit. Import a room, lay out the seats, then place them in the model.

  • WebView2
  • TypeScript
  • Revit
Open project

Cipher

One record for SSG product data. Hundreds of manufacturers, one structure, read by Fetch and every tool after.

  • TypeScript
  • React
Open project

Fetch Analytics

A live dashboard for deciding what to build next, what to fix, and which pages rank without earning clicks.

  • Next.js
  • Docker
Open project

Fetch rebrand

Redesign of fetchbim.com. Identity, a component library, and the pages architects use to find Revit families.

  • Figma
  • React
  • Next.js
Open project

pySSG

pyRevit scripts that enforced our Revit content standard, later rebuilt in C# as the plugin the team uses now.

  • pyRevit
  • Python
  • C#
Open project

Content Creation Strategy

SSG's move to BIM. I wrote the content standard the library still runs on, covering naming, parameters and detail.

  • Revit
Open project

Japayuki

Cover and interior for a poetry collection, in print and ebook, where the layout has to hold the line breaks.

  • InDesign
  • Photoshop
Open project
KYLE BRUXVOORT
Director of Design Technology
RÉSUMÉ

Drag · throw · click to flip · 9 projects

2026Builder

Fetch Analytics

Next.jsDocker

The problem. The old dashboard ran on Streamlit. It drew charts, which is not the same as answering a question, and every new question meant fighting a framework built for notebooks. So the decisions it should have been driving got made on instinct instead: which families to build next, which records were incomplete, which product pages were quietly failing in search.

What I built. A rebuild on Next.js that starts from those decisions rather than from the data. Searches that come back empty are a build list, written by the people who went looking for content we do not have yet. Every family is scored against the 39 things a complete record needs, so "the library is in good shape" is a number instead of an opinion. Product pages that rank on the first page of Google and still get no clicks arrive with the title and description to rewrite.

Built solo, Next.js in front and Docker alongside the rest of Fetch. It reads live, so a search that fails this morning can be on the build list this afternoon. 66,640 downloads against 40,183 searches, and the figure I open it for is the 6,347 searches that ended in no download at all. That number is the distance between what people came to Fetch for and what we had ready.

FIGURES
A product page that ranks on page one and gets no clicks, with the title to fix.
Every family scored against the 39 things a complete record needs.