Founding Client · Case Study
A digital storefront for two antique-bottle rescuers, built around one sentence: take a photo, upload it, done.
Live at secondlightbottleco.com

The actual homepage — live screenshot, not a mockup.
1
upload flow catalogs, prices & writes the listing
0
accounts to manage — just a shared passcode
1 day
from kickoff to a live, public storefront
The Client
When they’re free from their day jobs, Mark & Kathy spend their time outdoors and looking after their animals — including regular trips to old homestead sites across the rural coastal plain of North Carolina, recovering antique medicine, soda, milk, ink, and whiskey bottles from places where a farmhouse, a country store, or a family home once stood, a hundred years gone. Every piece is one of a kind: a different era, a different maker, a different story embossed right into the glass.
They’re not very tech-oriented, and they didn’t want to have to become that. Their business, until now, ran on flea markets and word of mouth.
The Challenge
Selling one-of-a-kind antiques online usually means a part-time job on top of the actual work: photographing each piece, researching its type and era, pricing it fairly, writing a description that doesn’t sound like a spreadsheet, and keeping track of who wants what. For two people already balancing full-time jobs with the free-time work of finding, cleaning, and identifying each bottle, that second job was the real barrier — not a lack of inventory, and not a lack of interested buyers.
The brief, boiled down to one sentence: take a photo, upload it, done.
The Build
MAC Endeavors designed and built a custom storefront and admin system around that one sentence, rather than adapting an off-the-shelf e-commerce platform to fit it.
The core loop
Mark or Kathy photograph a bottle on their phone and upload it. Claude reads the photos in a fixed order — first the catalog details (glass color, condition, an approximate era, a visual estimate of fluid capacity), then it researches the piece’s actual history, then it prices it and picks a buyer category, then it writes the listing. Embossing is read separately by panel — front, back, sides, and base — because a bottle’s base often carries a completely different mark than its front. By the time the page loads, there’s a complete draft listing waiting, not a blank form. Nothing goes live on its own — every draft still passes in front of Mark or Kathy before a buyer ever sees it.
The storefront
Bottles are organized the way buyers actually shop for them — Collectors, Decor, Gifts, and Wholesale & Subscriptions. Checkout is a request rather than live payment for now, deliberately: a buyer submits contact info and delivery preference, and it lands directly in Mark & Kathy’s admin dashboard as a to-do item — no missed emails, no separate inbox to check.
The admin portal
No accounts, no user management — just a shared passcode for Mark & Kathy and a separate one for Corey. The dashboard groups every bottle by pipeline stage, supports bulk publish/delete, and surfaces every incoming checkout and wholesale request the moment someone submits one. Underneath, one Postgres record per bottle holds the catalog fields, pipeline status, AI outputs, and per-panel embossing — forms submit straight to typed Next.js Server Actions, with no separate REST or GraphQL API layer to maintain.
Getting ready for a real sale
Before the shop’s first dollar changes hands, MAC Endeavors built out a full legal framework — Terms of Service, Privacy Policy, and Shipping & Returns pages, a required consent checkbox at checkout, a sales-tax disclosure, and an internal sourcing/provenance log — handed off as a single checklist an attorney can review quickly.
Inside the Admin Dashboard
Mark & Kathy’s entire operation runs out of these screens — not a spreadsheet, not a separate inbox. Real screenshots, not mockups.

Dashboard
Every incoming request and every bottle's pipeline stage, one screen.

Review a listing
The AI's draft, flagged fields and all, waiting for a human to check it before it ever goes live.

Insights
Sales, lead conversion, and inventory health, computed from what's actually in the system.

Sales history
Every bottle marked Sold, filterable by date and exportable for bookkeeping.

Requests & messages
An example incoming request, with a running activity log per lead.

Catalog No. 0002, live on the storefront today — the base mark photo is what the per-panel embossing read caught.
Since Launch
AI isn’t the strategy here — the business outcome is. That showed up concretely early on: the pricing step was anchored to a fixed internal reference table, and on a genuinely scarce piece — a North Carolina government dispensary bottle from a three-year window before statewide prohibition — that table capped the estimate well under what a collector would actually pay for it once its real history was known. The fix wasn’t a special case for one bottle; it was rebuilding the pricing logic to reason from real market and collector knowledge instead of a fixed ceiling, so it holds up on the next rare piece too.
v2 · From Working Software to Audit-Ready
One day after launch, with real inventory already live, the site got the kind of scrutiny a business owner’s own eyes tend to miss: a full external-style audit across merchandising, purchase conversion, customer trust, SEO, accessibility, performance, and admin security — the same lens a real customer, a search engine, or a screen-reader user would apply. MAC Endeavors worked the findings as a prioritized punch list, verifying each fix live in a browser before it reached production.
Trust & legal
The legal pages no longer say they’re placeholder language pending attorney review — they state plainly how the business actually operates, and where photos and data actually live. “Add to cart” and “Checkout” — language that read as real-time payment the site doesn’t yet take — was relabeled as a request everywhere it appears, with a plain explainer so nobody mistakes a request for a completed purchase.
Admin security
Shared-passcode login now also asks for a name, so the activity log shows who actually took an action. Failed login attempts are rate-limited against the database itself, the public “Admin” link came out of the site footer, editing autosaves a few seconds after typing stops, and a real race condition — where two buyers requesting the same one-of-one bottle within moments of each other could both be told “yours” — is now closed at the database transaction level.
Storefront & SEO
The site had no robots.txt, no sitemap, and every page shared one generic title and description — close to invisible to search engines. It now has unique metadata and structured data on every page, product titles built from each bottle’s own embossing, era, and color instead of raw internal labels, and a new Shop All view with real keyword search and filtering.
Photos
Every product photo was being served at full camera resolution with no resizing or lazy loading. Photos now route through Next.js’s image pipeline everywhere they appear. Separately — and this mattered more than performance — phone photos routinely carry embedded GPS coordinates, and the business model depends on keeping where each bottle was recovered private. Photos are now stripped of all metadata client-side before they ever leave the browser.
Accessibility
The photo lightbox now behaves like an actual modal dialog — proper screen-reader semantics, focus trapped inside it while open, focus returned to the exact thumbnail that opened it on close. Contrast, screen-reader announcements for form errors, and mobile touch targets were corrected across the site.
Future Roadmap
v1 got a real, trustworthy storefront live fast. v2 made sure “trustworthy” held up under actual scrutiny before adding anything customers would notice as new functionality. None of what follows is needed to run the shop today — it’s the honest list of what’s worth considering as it scales, in roughly the order it would make sense to tackle:
- Live payment processing — Stripe Checkout or Payment Links, once order volume makes a manual “we’ll follow up to collect payment” step the actual bottleneck.
- Shipping label automation — Shippo or Pirate Ship for discounted labels, tracking, and address validation straight from the admin dashboard.
- Bookkeeping integration — QuickBooks or Xero, once volume outgrows a spreadsheet.
- Cross-listing to Etsy/eBay, with inventory synced back to the same admin.
- Email capture (Klaviyo or Mailchimp) for notifying collectors when something in their category gets rescued.
Version Log
Shipped incrementally, in order, on the same storefront that’s live today.
The Stack
Framework
Next.js, deployed on Vercel
Database
Postgres (Prisma ORM)
Photo storage
Vercel Blob, with client-side EXIF/GPS stripping before upload
Images
Next.js Image Optimization — responsive, lazy-loaded, resized on the fly
AI
Claude — vision, research, pricing, and listing copy, sequenced so each step reasons from the last
Auth
Passcode-based sessions with per-operator identity and DB-backed rate limiting — no user accounts to manage
SEO
Dynamic sitemap/robots, unique per-page metadata, Product/Organization/BreadcrumbList structured data
Domain
Custom domain with SSL
