LiteZupp
A Shopify store where every LED bulb has to fit the right classic car, for every light on it.
- Role
- Sole developer, built from scratch
- Timeline
- 2026
- Live
- litezupp.com ↗
- Stack
- Shopify Liquid theme, Admin GraphQL, Supabase (Postgres), Next.js 16 embedded app, Cloudflare Workers and Hyperdrive
- Products
- LED bulbs and kits for cars built 1907 to 1999
The situation
No Shopify store at all. An old ePages site, and CSV exports from it that disagreed with each other about products, variants and categories.
A licensed bulb database of 13,526 cars by 47 light positions, living in a spreadsheet. Store search that ignored part numbers, because Shopify search does not read metafields. And a launch blocked because checkout showed no shipping rates anywhere.
What I built
- The store itself: a custom Shopify theme written from scratch, with product, collection, search and cart pages, navigation, policies and content pages.
- The catalog, rebuilt from the old site's raw exports: 100 products and 368 variants.
- A vehicle database in Supabase: 13,602 cars, 47 light positions, 289,167 bulb entries. The client owns it and adds their own cars.
- Fitment worked out, not typed by hand: each car's original bulb numbers joined to each product's cross-reference numbers. 99.3% of cars matched at least one product on day one.
- A Vehicle Finder by year, make and model on the home, collection and product pages. It reads compiled files in the theme, so it answers instantly.
- Part-number search. Type 1157 or BA15S and get the bulb that replaces it, ranked by part code, then bulb number, then prefix, then title.
- The Bulb Book, an app inside the Shopify admin: look up a car, add a kit's cars, fix a wrong match on one light only, add a car, publish to the website, undo. The owner signs in with their Shopify login.
- A nightly refresh at 1 AM Central that rebuilds the finder and search files, with a red warning in the app if it ever stops.
- Installation PDFs on the products that need them, product image zoom, a kits menu by car make, and a rebuilt cart with order notes.
What was hard
No shipping rates, anywhere
Checkout offered nothing in the US, Canada or the UK. Every zone failing at once pointed upstream, not at any one rate. The store's only location had no address, so Shopify had nowhere to ship from. I found it through the storefront shipping-rates endpoint without placing a single order, and fixed it the same day.
A token that died quietly
Every Shopify write from the admin app had been failing for two weeks with no error the owner could see. Shopify's app tokens expire after 24 hours, and the app was holding one fixed token. It now mints a fresh one on demand and caches it for 23 hours.
Search that couldn't see part numbers
Shopify's storefront search does not index metafields, and the cross-reference numbers lived in one. Instead of a paid search app, I compiled a search index into the theme that the header search and the results page both read.