Lab19
Shopify price automation platform
Built a custom price automation system for an Italian Shopify store. It replaces manual price reviews: every product is re-priced daily from market data through scheduled jobs.
A custom solution built for a private client.
Highlights
Architecture
Three independent services in a monorepo, each with a distinct responsibility and sharing the same PostgreSQL database via Prisma.
Key Challenges
Cross-platform size normalization
Shopify stores sizes as free-text while external providers use structured size arrays.
Cross-platform size normalization
Sizes are normalized into a shared format (region labels stripped, formats standardized) before comparison, ensuring consistent matching across sources.
- ·Collectibles have no size, solved by matching by product identity.
- ·US 8.5 and EU 42 are distinct types in provider data, the correct type is resolved before comparison.
- ·Both sides are normalized before comparison, so Shopify free text and provider size arrays match.
Mapping drift
Handling inconsistent product data without breaking the matching pipeline.
Mapping drift
Each mapping is persisted with a status (mapped, not_found, manual_review). Failed items are skipped on subsequent runs, avoiding redundant API calls.
- ·A product deleted from the provider is marked not_found and excluded from future runs.
- ·Re-mapping can be triggered manually from the dashboard after fixing the Shopify product metadata.
Windows server deployment
Running multiple Node.js services on a Windows VPS with Cloudflare, Caddy and PM2.
Windows server deployment
Caddy handles HTTPS via Cloudflare origin certificates, while PM2 runs and monitors all services. A Docker setup is available as a fallback for portability.
- ·Log rotation prevents disk exhaustion on the host.
- ·All traffic is proxied through Cloudflare, blocking direct origin access.
Complete Stack
What I'd Do Differently
Shared Prisma workspace package
Backend and Shopify App each maintain separate Prisma instances pointing to the same database. Schema changes require migrating and generating in both services independently. I'd extract the shared schema into a dedicated monorepo package to avoid the duplication.
Next case study
WTB Market
SaaS platform for resellers
Need something like this?
I build custom internal tools and automation systems around real business workflows, from pricing pipelines to inventory dashboards. I'm not taking new client work at the moment, but I'm happy to hear about what's next.
Get in touch