How We Built DadCrafted Decor's AI Kitchen Design Tool: 92% Accuracy on Real Customer Photos
DadCrafted Decor’s customers could not picture a new cabinet finish from a hand-sized wood sample, so decisions stretched across weeks and repeated showroom visits, and some never closed at all. Off-the-shelf visualization tools render an idealized kitchen, never the customer’s own. We trained a custom detection model that finds cabinets, drawers, and fittings in a photograph the customer uploads, then applies new textures and finishes to those exact regions, reaching 92% segmentation accuracy on real customer images and cutting a three-round decision to one.
DadCrafted Decor is a nationwide network of woodworkers headquartered in Taylorsville, Utah. The business began with a single kitchen remodel by founder Jeremiah Stettler and grew into a community of cabinetmakers, toymakers, and furniture makers working from home workshops across the country.
From there, they serve Salt Lake, Utah, Summit, Davis, and Carbon counties with cabinet door repair, replacement, and refinishing, alongside custom furniture work across the state. Nationally they operate a marketplace of handcrafted hardwood products.
None of that was ever the constraint. The constraint sat with the customer, standing in their own kitchen, holding a two-inch wood sample, trying to imagine it across every cabinet front in the room, and postponing the decision until the imagining got easier.
A customer holds a wood sample against their existing cabinets and tries to project it across the whole room.
Some people can do that. Most cannot. So they ask for more samples, book another showroom visit, and think about it. Each cycle costs a visit and pushes the decision further out. Some customers stop returning calls entirely.
Off-the-shelf AI kitchen design tools do not close that gap, because the kitchen they render is nobody’s in particular. The specific layout, the lighting at the time of day the customer is actually standing there, the stand mixer sitting in front of a cabinet door: all of it is what makes the visualization believable, and all of it is what generic tools discard.
For a business built on custom work, that gets expensive in a particular way. Every extra round costs a visit and a set of samples, and the customers most likely to stall are the ones with the most complex jobs.
The model was always going to live or die on image quality nobody could control. A customer photographs their kitchen on a phone, often at night, often with half a cabinet front hidden behind an appliance. A detector trained on clean product imagery fails on exactly that input, and it fails silently by producing a plausible-looking mask in the wrong place.
We trained a custom YOLO model on the kind of images DadCrafted's customers actually submit, which meant cluttered, low-light, and partially obstructed photographs formed the baseline condition.
Cabinets, drawers, and fittings look similar to each other and to the surfaces around them. A general model segments them inconsistently, and inconsistent segmentation breaks every downstream step. Custom training is what gave us reliable separation between the three.
Boundary accuracy set the ceiling on the whole feature. A loose mask around a cabinet door means the new finish bleeds onto the wall, and the customer sees a rendering error instead of their kitchen. We tuned for boundary precision before building the texture layer at all.
Once segmentation held, we built the visualization layer that applies new textures to the segmented regions, handling multiple regions across a single uploaded photograph so a whole kitchen updates at once.
Deployment went to AWS SageMaker so inference scales with upload volume. DadCrafted is a craftsman business with no infrastructure team, and the architecture reflects that.
Every component served one outcome: a customer seeing a believable finish on their own cabinets.
Training and tuning ran ahead of the product build. Segmentation accuracy determined whether the feature was worth shipping at all, so there was no version of this where we built the interface first and hoped the model held.
So we tested against the photograph quality DadCrafted’s customers produce. That distinction did most of the work. A validation set of clean, well-lit kitchen images would have produced a higher headline accuracy figure and a product that broke on first contact with a customer. The 92% figure is measured on real uploads, and it is the number that actually predicts behavior in production.
The failure mode we designed against was finding a cabinet in the wrong place. A model that returns no result fails visibly, and an interface can handle that gracefully. A model that returns a confident mask over the wrong region produces an image the customer recognizes as broken, and that costs more trust than showing nothing at all.
Class separation drove the decision to train from scratch. Cabinets, drawers, and fittings share visual characteristics with each other and with the surrounding room, and a general-purpose detector treats them as one fuzzy category. Applying a finish requires knowing which is which, because a drawer front and a cabinet door take the same texture differently.
With accuracy settled, deployment was straightforward. SageMaker handles hosting and inference so upload volume scales without DadCrafted managing servers. FastAPI sits in front as the service layer, keeping the model endpoint separate from the application so the model can be retrained and swapped without touching the product.
A customer photographs their kitchen and sees a new finish on their own cabinets, in their own light, with their own layout and their own clutter in the frame. The conversation moves from imagining to choosing.
Decisions that previously took three rounds of showroom visits and sample swaps now happen in a single sitting. For a business where every extra round costs a visit and a set of samples, that compresses both the sales cycle and the cost of running it.
Adding finishes no longer requires retraining anything. New textures apply to the same segmented regions, so growing the catalogue is a content task. The detection model does not care how many finishes exist behind it.
"AppVerticals trained a custom detection model that identifies cabinets, drawers, and fittings in a photograph the customer uploads, then lets new textures and finishes be applied to those segmented areas. We have been very pleased with the accuracy the team achieved on the photos our customers actually send us, which are rarely clean. It has changed how our customers reach a decision about their kitchen."
We have trained custom detection models against cluttered, low-light, real-world input and shipped them to hosted inference. We know what this takes.
Start the conversation