Skip to content
MSM
2025 · design · development · ai

A photo-scanning service, end to end

Result

Shipped scan + ship pipeline, spreadsheet-driven pricing, admin + partner tools.

scan · ship · archive
Summary

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.

01 · Context

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.

02 · Approach

How I worked it

  • 01

    Spreadsheet as single source of truth. All pricing lives in a Google Sheet. A nightly Python job syncs it to the database so Pamela can edit rates without engineering help.

  • 02

    tRPC end-to-end types. From the pricing model through the order form through the admin console, everything is a single TypeScript graph — no surprises at the boundary.

  • 03

    A chatbot that actually helps. Claude Haiku handles the "how much would this cost?" questions, with the real pricing data injected into the system prompt. Off-topic prompts decline politely.

  • 04

    Admin API first. The admin console is a thin UI over a JSON API — Michael can script around it, and a future "Pamela App" can reuse the same endpoints.

03 · Artifacts

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.

04 · Result

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
05 · Stack

What it was built with

  • React 19
  • TypeScript
  • tRPC
  • Express
  • MySQL
  • Tailwind
  • DigitalOcean
  • Stripe
  • Claude API

See it live.

Want something like this?

Start a project