A photo-scanning service, end to end
Shipped scan + ship pipeline, spreadsheet-driven pricing, admin + partner tools.
TriState Photo Legacy digitizes physical photos, slides, VHS, and film for families across the Cincinnati tri-state. The site had to feel personal, explain a technical service to non-technical customers, take payments, and give Michael + his partner Pamela a set of tools they could actually run the business from.
What was going on
TPL started with a hand-built landing page and a Google Sheet. It needed: a real storefront, accurate pricing that reflected a long rate card, a way for customers to estimate jobs without picking up the phone, and an operations layer so orders could be tracked from intake to shipping.
How I worked it
- 01
Spreadsheet as single source of truth. All pricing lives in a Google Sheet. A nightly job syncs it to the database so Pamela can edit rates without engineering help.
- 02
End-to-end type safety. From the pricing model through the order form through the admin console, everything moves through one typed graph — no surprises at the boundary.
- 03
An intelligent customer chat that actually helps. It handles the "how much would this cost?" questions with the real pricing injected into context, and politely declines off-topic prompts. Visitors get an answer in seconds; Pamela gets a qualified lead.
- 04
Admin API first. The admin console is a thin UI over a JSON API — easy to script around, and a future companion app can reuse the same endpoints.
The parts worth naming
- Pricing pipeline
Sheet → pricing job → MySQL → tRPC → UI. One edit anywhere flows everywhere.
- Order console
Status timeline, shipping label printing, partner handoff notes.
- Chatbot prompt
System prompt embeds actual rate card + FAQs; versioned + reviewable.
What shipped
The site is live and taking orders. The pricing pipeline works. The internal team uses the admin tools daily.
- Launched
- Production · DigitalOcean droplet
- Admin-editable pricing rows
- [todo] {{TODO: confirm with Michael — 2026-04-23}}
- Average order value
- [todo] {{TODO: confirm with Michael — 2026-04-23}}
- Avg chatbot response
- < 2s · streamed