TM★
← All 35 projects

Blue Glass Farm Online Store

Blue Glass Farm2022
ShopifyLiquidGraphQLKlaviyoJupyter

The farm's Shopify store, built in a week as a cold-chain online grocery and reborn as the CSA store, bending a platform made for t-shirts into one that sells weekly vegetable pickups.

People want to buy vegetables straight from the farmer, and the two standard ways to do it fail in opposite directions. A CSA box is the farm's choice: you take what's inside. A farmers market gives you the choice, but the produce pays for it by sitting out on a table all afternoon. Great produce comes out of the field and goes straight into refrigeration, and every warm hour on display costs days of shelf life in your fridge at home. We wanted a third way: pick exactly what you want online a few days ahead, we pack it cold, and you collect it at the farm with the cold chain never broken.

That idea became a Shopify store in a week. Late in our first year of farming we finally figured out how to grow stuff, production was coming in, and there was nowhere to sell it. No farmers market booth, no email list, nobody to market to. The store fixed that, and it has lived several lives since. It started as an online grocery selling only vegetables, and it would eventually adapt into something that works even better.

What's funny is that to this day, Shopify isn't really built for what we do. Even in 2026 it feels like it was made for classic e-commerce, and it is incredibly good at that, listing products that can be ordered from anywhere and shipped anywhere. What we had was different. Our catalog changed constantly. Our products were meant to be bought locally, then delivered or picked up at a specific date and time, and the customer had to understand which window they were choosing. These days you'd call that a drop, and drops are getting popular. At the time it was a novel thing to attempt, especially with produce.

So the build was mostly about bending the platform. I stood the store up on one of Shopify's then-new Online Store 2.0 themes and shaped the buying flow around pickup windows. Delivery was the other big piece. We wanted customers to be able to get their produce delivered, because convenience matters to a lot of people, and delivery normally drags in a pile of logistics. Shopify had delivery functionality built in that got close to what we needed, and I was able to bend it the rest of the way, with delivery pricing computed by area. The last gap was fulfillment. A normal store picks one order at a time, but on a farm the week happens all at once. One big harvest has to come in, which means you need a combined pick list of everything to go grab and bring back from the field, and that's not something Shopify will just kick out. So I wrote a Jupyter pipeline against the GraphQL Admin API that rolled the week's raw orders up into pick lists.

And it worked. The store fired up, we used it week in and week out, and it carried the business for a couple of seasons. It handled hundreds of SKUs and complicated orders. Essentially we were Instacart pickers, except instead of walking the aisles of a grocery store, we were harvesting the things we sold. What eventually ended that chapter wasn't the tech. We had launched on that field-of-dreams mentality without a real go-to-market strategy, so our customers were friends, family, and a small set of regulars who loved it, and we were limited by how few of them there were. By the time we actually figured out how to find new customers, we'd started selling at the Woodinville Farmers Market, and those customers were buying in an entirely different way that turned out to be much easier. So we rolled the store back and focused on the farmers market.

Then in 2025 we decided we wanted to increase our direct sales outside the farmers market, another way to grow and a way to control more of our own destiny, so we moved to a CSA model to simplify our operational logistics. And the CSA did simplify the operations. The technical side of using Shopify to run a CSA was the harder part. It's the reason there are dozens of online platforms trying to solve the gap of CSA e-commerce, and the problem with all of them is that they're small, poorly supported, and lacking the flexibility an engineer like me wants. They would have solved many of our needs, but not all of them. Shopify didn't get us as far out of the box, but it gave us the flexibility to solve our own problems. What we run on it now is a CSA with about a dozen SKUs. Between the grocery years and the CSA years the store has done about $50,000 in online sales, and in 2026 the CSA alone did $33,000.

Shopify has no concept of a CSA, because a CSA doesn't sell a product, it sells a season. This year that means eighteen consecutive Thursday afternoons at the farm in Woodinville, or alternating Wednesdays at Fremont Brewing. It's like a subscription, but not quite. Unlike a gym, our customers notice when they don't get their vegetables for a week, so nobody quietly pays us forever. A share doesn't fit Shopify's conception of a product, and it doesn't fit its conception of a subscription either. It's really a one-time purchase of a service that gets fulfilled between 9 and 18 times, depending on the share you buy. So the front end had to work hard to make all of that clear to the buyer, and custom Klaviyo pipelines had to make sure the right communications went out at the right times to keep the whole thing from becoming an operational nightmare.

My bet was that everything a CSA needs already exists inside Shopify if you hold the pieces differently. The other design constraint was ours, not the platform's. A share is a bit of an odd purchase, with real operational logistics a customer needs to understand to get the best experience out of their season, and CSAs carry a notoriously high churn rate, around 50% a year, that we wanted to beat by as much as we could. So the buying experience got shaped in two directions. Before the purchase, a small amount of intentional friction, making sure people had the information they needed and had actually read and understood it before committing to a specific place, at a specific time, on specific weeks, for months. After the purchase, everything as smooth as we could possibly make it.

Pickup locations became a variant option, which means per-location capacity and per-location sell-outs come free from the platform. The season's schedule lives in three metafields, first pickup date, total pickups, frequency, and the theme does the calendar math live, so mid-season a share page reads "5 of 18 pickups passed." Every location's details render from a single Liquid snippet, so a changed pickup time changes everywhere at once. When a location fills, the buy form swaps in place for a waitlist form that stamps each signup with share type, year, location, and the page it came from. Each membership is written to a year-scoped metafield on the customer record, so the roster is queryable data instead of memory.

Once a customer buys a share, they're enrolled in a communications pipeline, starting with a welcome flow that onboards them to the purchase, and it has to satisfy both the people who order months in advance and the people who join mid-season. There are weekly communications that go out and pickup reminders that have to land on the right mornings, so we built the pipeline in Klaviyo to make all of it easy to set up and send. We also needed lists of which customers were picking up each week, so we knew who had picked up, could make sure everyone got their share, and could send the right communications to anyone who missed, which oddly enough is not something Shopify supports out of the box. The fun part of making those lists is that customers change from one share to another, join mid-season, and cancel out, so you can't just look at purchases. We create real-time snapshots every week of the current state of every purchase. We also prorate the cost of a share as the season goes by, so we needed a way to reprice every share to the right amount based on its remaining pickups, with late joiners seeing an honest prorated price. That's where you get to do fun things like making the repricing idempotent, so an accidental rerun can't spiral a price downward toward a free CSA share.

The best thing about all this infrastructure is that everything is connected to really great APIs, and that means we can now run huge swaths of the farm through agentic workflows, operational emails, analytics, pickup lists, pricing updates. That work has grown into its own story, told on the Farm Agentic Operations page.

If there's a takeaway in all of this, it's that you never really know what a project is going to become. So set your technology up so it can grow and adapt. Don't over-engineer at the beginning, but leave the places where things can be modified instead of hard-baked. When you build a prototype you shouldn't chase infinite flexibility, but stay aware of where flexibility comes cheap, or often even free. This store is the proof. A week-long build became an online grocer, went quiet, and came back as the commerce engine for a different business model, without having to be rebuilt from scratch.

Say hi.

Got a problem that looks like this one? I want it.
Got one so new nobody's even scoped it? I want that one more.