← Back to blog

From Shopify to Medusa: Self-Hosting my print shop

medusashopifyself-hostingclaude-coderesend

Why I Left Shopify

We’re running a small print shop over at lepulver.studio since a few years now. Especially in the beginning we had quite a lot of sales, or when doing things like exhibitions or yearly calendars. But at some point all the people you know have bought some prints so the sales go down a bit. In this case the steep fee of 39$ per month can be a bit much. On the other hand I just had the idea: “why not try to build my own store”. Since we live in the age of Claude Code and other AI Assistants that shouldn’t be too much work — or is it?

The Stack

After a bit of research I ended up with Medusa JS that is open-source and looks quite good and similar-ish to Shopify. Since I had some new experience with a VPS (by setting up Openclaw) I decided it should be possible to do it. Here is the stack I have used to build the new shop:

Tools

Infrastructure

  • VPS at Hetzner as the Server for the Backend + Postgres DB (Docker)
  • Vercel for deployment of the storefront / frontend
  • Cloudflare R2 as source for the images and backup
  • Resend as Email Provider / sender (orders, signups etc.)
  • PostHog as Analytics Service (what a slick landing page they have!)
  • Stripe for Payments
  • Uptime Kuma for Monitoring (Docker Containers + Storefront)

That list of 5 different services and things may look a bit large and definitely is. The thing is that I first started with the server and frontend and later on when deploying found out that things like images do not work. Then email did not work. Then I noticed I don’t have any analytics like I had in Shopify. Thats how I eventually ended up with that setup, but turnaround times are wild. I started with this project a week ago on Friday and have a up and running shop one week later.

Importing my old information such as customers, products was more or less a smooth sailing with the help of Claude Code to convert the entries and insert them into the database. As for UI, for now I pretty much went with the default template with some adjustments. There’s still much to learn.

What brought me the most joy was finding out about Uptime Kuma. The claim is “A Fancy Self-Hosted Monitoring Tool” and it indeed is. I set it up so that whenever the backend goes down (e.g. docker container stops) or the frontend doesn’t respond or the backup doesn’t run in time, I get a notification from a bot in Telegram and can see on the dashboard what is wrong. What a great tool!

Thats it for this episode! I did build a few more things this week but that’s it for this week.