Odysı
See if we fit
Case Study Web & Tools

A hardwood catalog they can run themselves.

Saint Charles Hardwoods is a 38-year mill and lumber business in Missouri. We rebuilt their web presence as a mobile-first, lead-generation site, built around a bespoke catalog system the new owners manage entirely themselves.

Client Saint Charles Hardwoods · hardwood & millwork, Missouri
Engagement Lead-gen site + bespoke CMS (Phase 1)
Status In QA · launching 2026
Stack React · Zustand · Lovable Cloud
Read
The problem

Invisible on search and broken on phones.

The old site was desktop-only, which is a real problem when most contractor traffic is on a phone. It had near-zero organic search presence, and years of buildup had left it bloated: a content audit found 122 URLs, around half of them duplicates or dead pages carrying almost no traffic. Underneath all of it sat the real challenge: a catalog too complex for any off-the-shelf store.

Pricing lived on sheets printed from an inventory system and walked around the store by hand, so none of it was web-ready. And the new owners, who had just bought the business, had no way to manage their own catalog. The previous vendor even held the domain and email, which took real persistence to release.

FIG. I · The product model 00 variants
Thickness
4/4 5/4 6/4 8/4
Length
8′ 10′ 12′
generates every combination
4/4 × 8′
BF
5/4 × 8′
BF
6/4 × 8′
BF
8/4 × 8′
BF
4/4 × 10′
BF
5/4 × 10′
BF
6/4 × 10′
BF
8/4 × 10′
BF
4/4 × 12′
BF
5/4 × 12′
BF
6/4 × 12′
BF
8/4 × 12′
BF
One product, priced by the board-foot. The detail an off-the-shelf store gets wrong.
The two audiences

“The person going on the website is more likely the homeowner, designer, and weekend hobbyist. But the person making the purchase is the contractor.”

Operations, Saint Charles Hardwoods

The millwork ends up in high-end homes, so the site had to earn trust with specifiers and homeowners while giving contractors the fastest possible path to a quote. The owners were clear about the brief: don't over-engineer it, ship a good first version, and let us run it ourselves afterward.

What we built

The owners can finally run their own catalog.

Phase 1 was scoped as a lead-generation website. The real engineering, and the center of the work, is the catalog system underneath it.

01

A bespoke catalog system

A custom admin where the owners manage everything themselves: categories, products, specifications, images, variants, and what is featured or in stock. Built custom rather than as an off-the-shelf store, because the product model does not fit one.

02

A quote flow rather than a checkout

A proto-cart: customers add products to a quote basket and submit one request with the details attached. Custom products use a free-form quote form instead of the variant picker. A deliberate bridge toward the Phase 2 quoting work.

03

A mobile-first site that leads with the mill

A new homepage and brand, product category and detail pages, and a dedicated “Our Mill” page as the differentiator. Click-to-call CTAs throughout, because most of the people buying are on a phone.

04

Findable again

A local SEO foundation: clean titles and metadata, structured headings, analytics and Search Console, 301 redirects for the high-value URLs, and a URL structure ready for Phase 2. Plus a CMS training handover so the owners can run it.

How it works

The catalog was too complex for an off-the-shelf store.

React with Zustand on the client, Lovable Cloud (Postgres, Storage, Auth) on the server. There is no custom server: the browser talks to the database directly, with row-level security deciding who can read and write what.

How an edit goes live

Safe self-management
Admin · working copy Unpublished changes
White Oak · 4/4 S4S
board-foot
In stock
Public site · what customers see
White Oak · 4/4 S4S
board-foot
In stock
The owner edits a working copy. The public site only ever shows the last published snapshot, and can be reverted.
Access control

Sign-in by email or Google. Admin access is an allowlist: one database check gates every write, so granting or revoking it is a one-row change. Sensitive price tiers are hidden from the public read path entirely.

The catalog model

Categories form a tree. Variant axes like thickness and length generate their combinations automatically, and pricing units, board-foot, lineal-foot, square-foot, piece and sheet, are first-class. That last detail is what an off-the-shelf store gets wrong.

Editing that feels instant

Edits apply optimistically and save in the background through a debounced, self-retrying queue, with a Saving and Saved indicator and a short-window undo. Images are resized in the browser before they upload.

A safety net

Every meaningful admin action is written to an append-only audit log. The platform runs daily database backups with 14-day retention, and the image library is reproducible from the client's own Drive.

Why custom, not Shopify

The quoting and pricing complexity, institutional-knowledge pricing, board-foot versus lineal-foot, many species and variants, and a deliberate buffer between a quote and a purchase, is more than an off-the-shelf store handles well. Modern AI-assisted tooling made building it custom genuinely faster than the manual QA such a system used to demand. The harder right thing for the business they actually run.

Custom means hands-on

Truly custom software trades convenience for control. We were candid that the catalog system is the part most likely to need ongoing QA.

So we built the safety net first, snapshots, an audit log, backups, and a release protocol, to make that trade safe.

How we de-risked it

We tested the direction before we built it.

Rather than present static mockups, we defined four design directions and built three of them as live, clickable prototypes the client could test on their own phones. The direction was anchored to brands they reacted to, so we ruled out the wrong turns early instead of discovering them late.

We started from the client's real, messy pricing data instead of guessing, scoped a full QA week with their own staff before go-live, and put a release protocol in place so their catalog edits are never overwritten by a code push.

Design directions 3 built · 1 cut
Heritage Craft Built
Modern Craft Built
Workbench Built
× Industrial Utility Off-brief
Clicked through live, on the client's own phone
Where it stands

It's built and in the owners' hands.

Built & in QA
V1 is complete, and the owners are happy with it.

The catalog system is built and in the owners' hands. They manage categories, products, images, featured items and variants themselves, with publish and revert safety built in. QA is underway, run jointly with their own staff.

V1 of every front-end page complete
CMS in the owners' hands
Publish / revert safety live
QA in progress with the client
Not live yet
No launch date is set, so no numbers yet.

Remaining before go-live: the owners finishing product content and photos through the new admin, wiring the quote flow to a company inbox and testing it, and the DNS cutover, held deliberately until launch. We will add real performance here once the site is live.

Content & photos loaded
Quote inbox wired & tested
DNS cutover at launch
What's next

Now scoping the quoting automation.

The business's real bottleneck is quoting. We are scoping a follow-on to automate it, with a person kept in the loop for judgment. The hard part is structuring the team's tacit pricing knowledge into something a model can use reliably, the same problem we solved on Fixlab.

01

The everyday walk-in quote, priced in minutes instead of by hand.

02

The large-project bid, where pricing by hand can take weeks.

03

Tacit pricing knowledge, structured so a model can apply it.

About Odysi

A small product studio. We prototype, automate, and ship.

Small is the feature: you work directly with the people building the thing, and we care more about something that holds up in production than something that looks good in a pitch.

Prototype. Automate. Grow.

Have a catalog or a quoting problem like this? We're easy to talk to.