Made to order · Order today, ready by October 21, 2026 · Local pickup or shipping
210×210

Oops, I Started a T-Shirt Business.

What an unexpected, fan-fueled venture taught me about building software when the business wouldn’t wait.

Customer wearing a 210×210 Wemby shirt
Active build time
18.3 hrs
Work sessions
54
Calendar days
33
Features from real problems
100%

The San Antonio Spurs made the playoffs in 2026 for the first time since 2014, and the city lost its mind.

Rightfully so.

There was a new generation of stars, a renewed sense of identity, and that particular San Antonio energy that doesn’t exist anywhere else. Intensely local, deeply proud, and just a little bit weird. We go honking after a win. IYKYK.

After those wins I’d find myself back at my computer, too energized to sleep and looking for somewhere to put it. I started making illustrations that leaned into Wembanyama’s alien mythology, poked fun at new rivalries, and celebrated the wonderfully strange culture surrounding Spurs basketball. They weren’t meant to look like official merchandise. They were meant to feel like they came from inside the city instead of a national league office.

Then the Spurs eliminated Portland and advanced to the Western Conference Semifinals.

The city went from excited to electric. So did the demand.

I started sending the designs to friends. They loved them. Then someone said the sentence every designer secretly hopes to hear.

“I’d wear that.”

So I made a shirt.

Then another.

Then another.

Before long I wasn’t just making things for fun anymore. I was ordering transfers, pressing shirts late into the evening, coordinating porch pickups, collecting Venmo payments, and trying to remember who had ordered which design in what size.

Without really noticing it, I’d started a business.

Like a lot of accidental businesses, it began with whatever tools were closest at hand. A notebook. Then an Apple Numbers spreadsheet. It tracked names, sizes, payments, and deliveries. It did exactly what spreadsheets are good at.

It remembered things.

What it couldn’t do was help me run the business.

I’ve spent more than twenty years building software. At startups. Inside large enterprises. Alongside product managers, engineers, researchers, and designers.

This wasn’t how any of those products were built.

Customers were already placing orders. Money was already changing hands. Inventory was already piling up in my house. Every day the business exposed another problem. A customer wanted to pay a different way. Someone needed shipping instead of porch pickup. Inventory no longer matched incoming orders. Historical pricing suddenly mattered.

The business wasn’t waiting for the software to catch up.

That’s when I opened Claude.

Not because I wanted to experiment with AI.

Because I had a business to run.

Looking back, I wasn’t deciding what to build.

The business was.

Every feature existed because something had already happened. A customer got confused. An order disappeared. Inventory didn’t reconcile. Reality became the product manager, surfacing one problem after another. Claude simply shortened the distance between discovering the problem and shipping the solution.

I had users.

They told me every single day.

Over the next thirty-three days, a spreadsheet became a production tracker, then an ecommerce platform, then an inventory system, and finally a fulfillment platform. Not because there was a roadmap, but because every evening the business handed me another lesson, and every evening the software learned alongside it.

The Spurs kept winning.

So the business kept changing.

Neither one knew what was coming next.

Neither did I.

MAY 22

The Spurs Were in Trouble. So Was I.

May 22.

The Spurs had dropped two straight to the Oklahoma City Thunder in the Western Conference Semifinals. A week earlier, San Antonio had been talking about championships. Now everyone was thinking the same thing, but nobody wanted to be the first to say it out loud.

Can we come back from this?

I had my own question to answer.

I’d only been making shirts for a couple of weeks. It started the way these things usually do. A few friends wanted one. Then another. I figured that would probably be the end of it.

It wasn’t.

My friend David lives across the street. We’d just gotten back from Spain with our wives and a group of close friends. While everyone else was planning what we’d do in Madrid the next day, we were planning around Spurs tipoff times, staying up until four in the morning in our Airbnb to watch playoff basketball before dragging ourselves out into the city a few hours later.

When I got home, I started sending David new designs as I finished them. I thought I was just getting feedback from a friend.

Most of the feedback sounded something like this.

“Doppeee.”

Then he’d send it to someone else.

At first it was one friend asking if I could make them a shirt. Then another. Before long David’s texts weren’t really about the designs anymore.

“Do you have another large?”

“I already gave them your Venmo.”

“Can you ship one?”

I don’t think either of us realized it at the time, but somewhere in those conversations I stopped making shirts for friends and started making shirts for customers.

Every text was exciting. Every text also meant one more thing to keep track of.

The business started in a notebook, then moved into Apple Numbers.

At first, the spreadsheet felt like a huge upgrade. I color-coded every stage of production. Ordered. Shirt. Transfer. Assembled. Delivered. Paid. I added a “Need to Do” column so I could leave reminders for myself. Every time the business got a little more complicated, I’d teach the spreadsheet a new trick. Another column. Another color. Another reminder.

The Apple Numbers spreadsheet, the night before it became software.
The Apple Numbers spreadsheet, the night before it became software.

For a while, it kept up.

Then it didn’t.

Looking back at that spreadsheet now, I can see exactly what I was trying to do. I wasn’t really building a spreadsheet anymore.

I was trying to turn it into software.

The spreadsheet had all the information I needed. It knew who had ordered, who had paid, who still needed a transfer, who was picking up that night, and who needed a remake.

The problem was that every conversation meant another update. Another note in the “Need to Do” column. Another reminder to myself. I wasn’t using the spreadsheet to run the business anymore.

I was using it to remember how to run the business.

That’s when I had a thought.

I bet Claude could help me manage this.

I took a screenshot of my Apple Numbers spreadsheet and wrote the simplest prompt I could think of.

“Can you make this into something I can actually use?”

Within a single conversation, it had become a React application.

For the first time, the software wasn’t just storing information.

It was helping me decide what to do next.

Filters surfaced the work that mattered. Status buttons replaced checkboxes. Summary cards answered questions before I had to hunt for them. Somewhere along the way, Claude even caught a pricing mistake that would have quietly reported zero profit on every XL shirt before the app ever went live.

By the end of the evening, I had two pages: Orders and Profit.

Looking back, the most important thing built that night wasn’t a feature.

It was this prompt.

“When I change the pricing reference, I don’t want it to change historical orders.”

At the time, it felt like a tiny implementation detail.

It wasn’t.

That prompt became architecture. Every order captured its pricing the moment it was created. Future pricing changes would affect future orders, but never rewrite history.

I didn’t know it then, but that pattern would repeat itself over the next thirty-three days. Reality would expose a new problem. I’d translate it into a requirement. Claude would help turn it into software.

Before the night was over, the app had moved from local storage to Supabase, been deployed to Vercel, split into a public storefront and a password-protected admin, and was live on its own domain.

The Spurs still had a playoff series to win.

I suddenly had a business that wasn’t waiting for me to catch up.

MAY 23

The Front Door

The next morning, the app worked.

That felt good for about five minutes.

The texts hadn’t stopped.

Somebody wanted another shirt. Someone else wanted to know if I had a different size. David had sent another design to another friend. I was still answering the same questions over and over again.

The app I’d built the night before helped me manage orders once they existed.

It didn’t help anyone place one.

That part was still happening through text messages. Someone would message me, I’d answer a few questions about sizes, they’d send me money on Venmo, and then I’d manually create the order myself.

It worked.

For about a day.

One thing surprised me after building the app the night before. The distance between an idea and working software suddenly felt much shorter. I wasn’t staring at a problem wondering if it was possible anymore.

I was asking a different question.

Would this actually make today easier?

That led to another simple prompt.

“How hard would it be to make an order form if I gave you two preview images? With a Venmo button to pay?”

By the end of the day there was a customer-facing storefront. People could browse designs, choose a size, submit an order, and pay without ever sending me a text first.

The payment decision was intentional.

I could have integrated Stripe.

I didn’t.

I’d spent enough time building products inside banks and large enterprises to know that accepting credit cards isn’t just accepting credit cards. It means thinking about PCI compliance, handling payment data, customer support, fraud, and a whole collection of responsibilities that had nothing to do with why people were visiting the site in the first place.

None of those were problems I actually had.

Everyone I knew already used Venmo. They were already using it to split dinner, pay someone back, or send money to a friend. Buying a shirt didn’t need to feel any different. I didn’t have to store anyone’s payment information, worry about protecting it, or introduce another account for people to create.

The simplest solution wasn’t a compromise.

It was the right product decision.

There was something else I noticed that day.

I’d expected to spend part of the evening explaining that most people would be ordering from their phones. I never asked. The first version of the site was already responsive.

It wasn’t just the mobile layout.

It was dozens of little things.

Validation.

Loading states.

Button states.

Spacing.

I kept waiting to discover the next thing I’d forgotten.

Sometimes there simply wasn’t one.

By the end of the day, people weren’t texting me to place orders anymore.

They were placing them.

Looking back, I think that’s what surprised me most about those early days. It wasn’t that AI made product decisions for me. It quietly handled many of the implementation decisions that already had well-established answers, leaving me with more time to focus on the ones that didn’t.

The checkout today — Venmo, Cash App, and PayPal all live. Day two shipped with just the first one.
The checkout today — Venmo, Cash App, and PayPal all live. Day two shipped with just the first one.
MAY 28

Where Did This Payment Come In?

The Spurs weren’t done yet.

Back in San Antonio, Game 6 at Frost Bank Center had turned into exactly what everyone hoped it would. Wemby and the Spurs forced a Game 7, and for a few more days the city got to keep believing.

While Spurs fans were watching Shai flop all over the court, my little T-shirt side gig was quietly starting to become...a business.

By then I was already more than two dozen orders in.

The storefront had done exactly what I’d hoped it would do. Instead of answering the same questions over text over and over, people could browse the designs, choose a size, place an order, and send payment without ever needing to ask me how the process worked.

It solved one problem almost overnight.

Which meant I immediately noticed the next one.

Venmo was still what most people used, but not everyone. Some preferred Cash App. Others asked about PayPal. I could have forced everyone onto one platform, but why? They already had payment apps they knew and trusted, and I had no interest in becoming a payments company. I’d spent enough years building products in large enterprises and financial institutions to know what came with accepting credit cards. PCI compliance is real. Protecting payment information is real. Fraud is real. Those are important problems, but they weren’t my problems.

The easier answer was also the better product decision.

Let people pay the way they already wanted to pay.

The challenge wasn’t accepting the money.

It was remembering where it landed.

Every time I reconciled orders, I found myself asking the same question.

“Where did this payment come in?”

So I taught the software one more thing.

Each order now remembered how it had been paid. Venmo, Cash App, or PayPal. The Paid badge even changed color depending on the payment method, so a quick glance told me exactly where to look.

The order tracker today — each Paid badge colored to match the platform it came in on: amber for PayPal, green for Cash App, blue for Venmo.
The order tracker today — each Paid badge colored to match the platform it came in on: amber for PayPal, green for Cash App, blue for Venmo.

Around the same time, I added another status: Ready to Assemble.

Paid didn’t necessarily mean I could press a shirt. Sometimes I was waiting on blank shirts. Sometimes the transfers hadn’t arrived. Sometimes everything I needed was finally sitting in the garage, waiting for a free evening to start pressing.

The business wasn’t just a list of orders anymore.

It was becoming a workflow.

One thing continued to surprise me.

Every evening I expected to discover something else I’d forgotten to ask for. Maybe the storefront wouldn’t work well on a phone. Maybe the layout would break. Maybe there would be another obvious thing missing.

More often than not...

...there wasn’t.

That quiet confidence changed the way I approached the next problem.

Not because I expected the software to have all the answers.

Because I no longer assumed every implementation detail would become another obstacle between the business and the idea.

JUNE 1

It’s Gotta Be the Shirt.

The Spurs were going back to the NBA Finals.

For the first time since 2014, San Antonio was headed back to basketball’s biggest stage. After closing out Oklahoma City in Game 7, the city felt electric. Everywhere I went, people were talking about the Finals and what was coming next.

And what was coming next happened to be New York.

By then I was somewhere around sixty orders in. The software was keeping up. Orders were organized. Payments made sense. The workflow was starting to feel predictable. For the first time since this whole thing started, I wasn’t thinking about software.

I was thinking about the next shirt.

We had a group text going with a handful of my closest friends. Everyone was throwing out ideas almost as fast as I could make them. Then David sent a text.

“You should put Spike’s glasses on Wemby.”

As soon as I read it, I was back in my old bedroom. Like a lot of kids growing up in the late '80s and early '90s, I was obsessed with Michael Jordan. One of the posters on my wall was Spike Lee’s Mars Blackmon. I actually took that poster down just a few years ago while helping clean out my parents' house.

I could still picture it.

It’s gotta be the shoes.

The Spurs were headed to New York. Spike Lee would almost certainly be courtside. The rest of the idea arrived almost all at once.

I couldn’t bring the idea to life fast enough. Before long, I was sending the first draft back to the same group text where the idea had started. It connected almost immediately, not because it was perfect, but because everyone instantly got the reference.

Then I posted it.

The response was immediate.

Orders started coming in before I’d really had time to think through what I’d just created.

One of my amazing customers with the shirt on at Game 5.
One of my amazing customers with the shirt on at Game 5.

Until that moment, I’d mostly been selling a shirt.

Now I was selling shirts.

That one letter changed everything.

Every new order started with a different question.

Which one?

Different artwork meant different transfers. Different transfers meant different inventory. Different inventory meant different costs. The software suddenly needed to know more than a customer’s name and shirt size.

It needed to know what they had actually bought.

I found myself opening the admin differently, too. A shirt wasn’t just a name anymore. It needed a product photo so customers knew what they were buying. It needed artwork for the hover state. It needed to know whether it was published or still a preorder. Eventually it needed its own recipe: which blank shirt, which transfer, which materials were required to make it real.

A design’s full recipe today — product photo, hover artwork, and the blank shirt and transfer it’s built from.
A design’s full recipe today — product photo, hover artwork, and the blank shirt and transfer it’s built from.

Somewhere along the way, I’d stopped managing orders.

I was managing products.

So that night, I opened Claude again.

Not because I wanted more software.

Because the business had changed.

Again.

JUNE 10

No Lead Is Safe.

The Spurs had dropped the first two games of the Finals at home. The excitement that had carried San Antonio through the playoffs had turned back into anxiety almost overnight. Then they stole Game 3 at Madison Square Garden. Against all odds, they walked into New York and took one back. Suddenly the series felt alive again.

June 10 was a workday. I was in Austin for a workshop with my team at my day job when my phone started buzzing. Then it buzzed again. And again.

At first I ignored it. Then I silenced the payment notifications altogether so I could focus on the workshop. Whatever was happening could wait until lunch.

When I finally opened Instagram, I saw Kelly’s story. Kelly is an incredible artist and one of those friends who’s always cheering other people on. She had shared one of my shirts while talking about the Finals, and almost immediately the orders started pouring in.

Kelly’s Instagram story — the post that started the flood of orders.
Kelly’s Instagram story — the post that started the flood of orders.

I don’t remember exactly what I expected that day, but it wasn’t this.

The drive back to San Antonio gave me plenty of time to think. Normally I’d put on an audiobook and disappear for the next hour and a half. That afternoon I couldn’t tell you what I was listening to. My mind kept bouncing between excitement and the same practical question: how are we going to make all of these shirts?

Over the next three days we’d sell more than a hundred shirts. For a national apparel brand, that’s nothing. For my wife, my son, and me making shirts in our living room after work, it completely changed the scale of what we were trying to do.

The software was changing too. Customer questions were turning into features almost as quickly as I could build them. I’d make a change, push it live, answer another question, then make another change. It felt like I was finally keeping up.

Until I wasn’t.

That night, I started noticing orders that didn’t seem to be there anymore. At first I assumed I was missing something. A filter. A preorder. A sorting issue. Then I realized something much worse.

Some of the orders hadn’t been recorded correctly at all.

I eventually pieced everything back together by working backward through Venmo, Cash App, PayPal, emails, text messages, and anything else I could use to reconstruct what had happened. Nothing was permanently lost, but something had changed.

Earlier that evening, the Spurs had watched a big lead disappear in Game 4, giving up the largest comeback in NBA Finals history. That same night I learned the software version of the same lesson.

No lead is safe.

The next thing I built wasn’t about speed.

It was about making sure I never had to wonder where an order went again.

JUNE 13

The Season Ended. The Business Didn’t.

We believed.

After stealing Game 3 in New York, it felt possible. Down 3-1, San Antonio started doing what San Antonio always does when the Spurs are involved.

We believed.

Nobody expected this team to be playing for a championship in 2026.

Well...maybe the guys in that locker room did.

They surpassed every expectation the rest of us had, which somehow made watching New York celebrate on our floor hurt even more. It wasn’t just losing a championship. It was saying goodbye to a season that had reminded all of us what Spurs basketball could feel like again.

The season was over.

The work wasn’t.

I had quietly assumed the shirt business would slow down once the Finals ended. Instead, more than seventy additional orders came in after Game 5. The playoffs were over, but people were still discovering the shirts through friends, social media, and word of mouth.

Now I had a different problem.

Making the shirts was only half the job.

Getting them into people’s hands had become a business all by itself.

The living room was filling with finished shirts. Text messages were flying back and forth trying to coordinate pickups. More people wanted shipping than I’d expected. Every delivery felt like another custom conversation, and every custom conversation took time away from making the next shirt.

So the software changed again.

I built a delivery page, not for customers, but for me. It became my operations dashboard. I could quickly see which orders were headed for local pickup, which needed to ship, and which were still waiting to be made. I added pickup instructions with photos so I wasn’t typing the same directions to our front porch over and over again. Shipping orders could be exported directly into Pirate Ship, along with printable packing slips for the little thermal label printer I’d ordered from Amazon. Even local pickups generated printable sign-out sheets so we always knew exactly who had picked up what.

Looking back, none of those features would have made the first version of the software.

None of them mattered.

Until they mattered.

The business kept asking new questions.

One by one, we answered them.

What started as a way to sell a few Spurs shirts had quietly become something else.

Not because I had planned it that way.

Because reality kept handing me the next problem to solve.

JUNE 26

Today

It’s been almost exactly two weeks since the Spurs’ season ended.

It still hurts.

I still hate that we had to watch New York celebrate on our floor. But the sting has started to give way to something else. This impossibly young team reminded an entire city what it felt like to believe again, and I honestly think the future of Spurs basketball is incredibly bright.

Besides...we’ve always been better in odd-numbered years anyway.

As I write this, every order that needed to be shipped has been shipped. I have six shirts left to make, all waiting on a delivery from one of my vendors. Another problem for another day.

For the first time since this whole thing started, I actually have a completed shirt sitting on the shelf waiting for someone to buy it instead of someone waiting for me to make it.

That feels oddly satisfying.

I think this business will always come in waves. The Spurs season will create its own rhythm, and every now and then another idea will come along that I’m too excited not to make. Today there are shirts and stickers in a handful of local retailers, and I’m already thinking about how to improve the physical side of the business: making shirts faster, improving margins, simplifying fulfillment, and figuring out what comes next.

Which brings me back to why I wanted to write this in the first place.

I thought I was writing about building software with AI.

Looking back, I wasn’t.

I was writing about building a business while the business was simultaneously teaching me what software it actually needed.

Every feature started because I got tired of doing something manually. Every improvement came from a real customer. Every new screen existed because reality handed me another problem to solve.

Looking back, one of the biggest surprises wasn’t that AI helped me build faster. It was that it encouraged me to build smaller.

There were dozens of features I could have built earlier. I’m glad I didn’t.

Inventory existed before it was connected to orders. Shipping came after local pickup. Products came before recipes.

The perfect solution almost never shipped first.

The right solution did.

That changed how I think about building products. I stopped trying to imagine every problem I’d have and started trusting that I’d be able to solve the next one. That’s a very different way to build, and it’s hard to appreciate until the time between customer feedback and acting on that feedback shrinks from months to minutes.

In every startup I’d worked with before this, we’d spend weeks or months discussing features before anyone ever used them. This was different. A customer would ask a question, and that afternoon the software would change. The next customer never had the same problem.

I don’t know what AI means over the long term.

If this article sounds optimistic, it should. This was one of the most creatively fulfilling projects I’ve ever worked on. But I also don’t want it to come across as a puff piece about AI, because I don’t think that’s the whole story.

I’ve spent more than twenty-five years working in technology, and today I spend a lot of my time helping lead design teams through this moment. Throughout this project I was the designer, product manager, engineer, customer support, shipping department, accountant, and founder. AI helped me move between those roles faster than I ever could have before.

That has real implications for people whose careers are built around those roles.

Including mine.

I’ve watched our industry move from desktop software to the web, from the web to mobile, from mobile to cloud, and through every major shift that followed. Every one of those moments changed how we worked.

This feels different.

What I experienced was the distance between an idea and a working business collapsing in a way I’ve never seen before.

I don’t know exactly what those implications are yet, and I think anyone who tells you they do is probably overstating their confidence. But I do know the boundaries between those roles felt very different over the course of this project than they did even a year ago.

That doesn’t eliminate the need for designers, engineers, product managers, or any of the other roles I found myself stepping into over the past month. It does change the economics of how quickly one person can move between them.

In more than twenty-five years of building products, I’ve never seen a business get off the ground this quickly or adapt this naturally to what customers actually needed. Not at a startup. Not inside a large company. Not anywhere.

I don’t know exactly where AI is taking our industry.

What I do know is that if I woke up tomorrow with another idea, I wouldn’t spend months wondering whether it was worth building. I’d probably have real customers using the first version before I went to bed.

Not because AI builds businesses.

It doesn’t.

This project proved that.

The hard part was never writing code. The hard part was understanding what customers actually needed, making hundreds of small decisions, packing shirts, answering questions, fixing mistakes, and showing up every day.

AI didn’t replace any of that.

It changed the economics of iteration.

It made trying dramatically cheaper.

And I think that’s profound.

I’ve never regretted bringing an idea to life.

I’ve only regretted the ones I talked myself out of.

This little shirt business probably won’t change the world, but for a few weeks it let me participate in something I love in a way I never had before. It let me tune into the energy of a city that believed, contribute something back to it, and learn more about building products in thirty-three days than I expected to.

I don’t know exactly what I’ll build next.

I just know that if I wake up tomorrow with an idea worth pursuing, I won’t spend months wondering whether I can build it.

I’ll start.

And somehow, after everything this little shirt business taught me, that feels like the biggest change of all.

210×210, 2026Built with Claude Code