Jane Cervantes is in direct contact with the company and can answer any questions you may have. Email
Client restores mid-century and modern furniture from our workshop. A customer sends us a chair; we quote the work, order the materials, do the restoration, and deliver it back. The craft end of that is people and hand tools. Everything else runs on a single application we build ourselves.
That application takes a customer from a photo of a worn-out chair to a priced quote, a paid deposit, ordered materials, a scheduled pickup, and an invoice in the accounting system — plus a materials and parts store, and an admin panel the workshop runs its day on. It is not a marketing site with a form on it.
We are expanding our business to eCommerce by selling fabrics, leathers and parts for these very same pieces directly to the customers. This is our new business line we are very excited about.
The quote funnel
An eight-step wizard where a customer uploads photos, picks fabrics, chooses transport and transit cover, and pays a deposit. Every step is a place a real request can be lost.
Money paths
Deposits, balances, refunds, processor fees and payouts, across Stripe and Shopify, each landing in QuickBooks as the book of record. Off-by-a-cent is a bug here.
Sales tax
We are the tax authority for New York jurisdictions, down to the reporting code for a Yonkers delivery. Destination tax applies in the other states. A wrong rate is a filed return.
Purchasing
Per-job purchase orders to vendors, freight and duty, vendor discounts, and the bills the bookkeeper makes from them in QuickBooks.
The admin panel
What the workshop actually uses: quotes, line items and margins, messages to customers, media, roles and permissions, and an audit log behind it.
Getting it launched
We are pre-launch, gated on the accounting cutover. There is a written checklist of blockers, and closing them is the job in front of us.
Application
Next.js (App Router, Server Components), React, TypeScript, Tailwind, Node 22. Deployed on Vercel.
Data
Supabase — Postgres with row-level security on every public table, GoTrue for customer accounts, Storage for media. SQL migrations in the repo, applied per environment.
Commerce
Shopify for the store (Storefront and Admin APIs, native checkout, per-brand delivery profiles, webhook order import) and Stripe for quote deposits and balances.
Accounting
QuickBooks Online: invoices on jobs, sales receipts, payments, credit memos, purchase orders, one clearing account per processor. An outbox worker posts to it, with edit detection so a bookkeeper's change is never overwritten.
Everything else
Mailgun for transactional email and inbound customer replies, Slack for internal notifications, Google geocoding for transport pricing, Cloudflare Turnstile, Sentry.
Testing
Vitest and Testing Library, plus smoke scripts that run against the real QuickBooks sandbox. Specs assert recorded state rather than mock calls.
Useful, not required: QuickBooks or any double-entry accounting; Shopify or Stripe at depth; US sales tax; Supabase; anything you have shipped where being wrong cost real money.