Kozmetika z prírody
Headless commerce platform replacing a Shopify store
- Status
- BuiltBuilt and demoed; the live shop is still on the old platform
- Period
- 2026
- My role
- Sole developer
- Client
- Natural cosmetics retailer
- Stack
- Next.js 15 · TypeScript · Prisma · PostgreSQL · Redis · Docker · GitLab CI
The problem
A working Shopify store with 179 products, a monthly fee, and no way to change what the platform would not let them change.
How it was built
Migration had to be idempotent
The Shopify catalogue import can run again without duplicating anything or overwriting later edits. A migration you can only run once is a migration you are afraid of.
Slovak payments and shipping, properly
GoPay for payments and Packeta for delivery. The payment callback reads the payment back from GoPay by stored id and only applies legal status transitions — it never trusts a status handed to it by the caller.
The demo does not compete with the client
The staging build sits behind a password and sends X-Robots-Tag: noindex, so it can never outrank the shop that is still paying the bills.
Where it landed
- 179 products migrated, seed idempotent across redeploys
- Runs on the client's own infrastructure — no per-month platform fee
The callback is the part that matters
Every payment integration has one endpoint that decides whether an order is paid. Getting that endpoint to distrust its own input is most of the security work in a small shop.