The Internet Vending Machine started as a simple question: what would a vending machine feel like if it lived on the web? I designed it as a rotating discovery experience for useful products, apps, tools, and other things worth finding.
I took it from concept through product strategy, interaction design, responsive UI, and a working build, including vending interactions, product inspection, rotating inventory, sharing, analytics, and an archive.
The project keeps evolving through real usage, curation, and new ways to interact with the machine.
One thing building payment infrastructure taught me:
A Stripe integration isn't finished when the customer reaches Checkout.
The interesting backend work starts around the payment.
A reliable payment flow has to think about:
Customer → Checkout → Stripe → Webhook → Backend → Database
That means handling things like webhook verification, payment state, duplicate events, failures, backend validation, and what the application should do after Stripe reports an event.
Working through this in Python and FastAPI changed how I thought about payment integrations.
The goal isn't simply to accept money.
The goal is to build a backend that can reliably understand what happened and respond correctly.
That's a much more interesting engineering problem.
#Python #FastAPI #Stripe #BackendEngineering #APIDevelopment #Webhooks
A bylined article making the case for something most marketing teams resist: leaning into negativity strategically. Drawing on the StoryBrand framework and real brand examples, this piece argues that acknowledging your audience's genuine frustrations builds more trust and engagement than relentlessly positive messaging, and shows how to do it without alienating anyone.
E-commerce automation stack for a Shopify DTC brand. Review request pipeline (Shopify orders API → Spacemail IMAP drafts), abandoned cart follow-ups, and real-time inventory sync between 3PL and storefront. Replaces manual customer-ops work with scheduled scripts running on a cron. Full ownership — no SaaS subscription, no per-seat pricing.