Alan Borys — sales platform for Poland and Norway
I built one platform from scratch that runs under two domains. The scope covered the Next.js application, Payload CMS, Stripe sales flow, PostgreSQL, container deployment and production VPS configuration.
01
The challenge
The goal was to create one coherent platform for a brand operating in Poland and Norway at the same time. It had to present the offer, enable online sales and let the team manage content without involving a developer for every change.
The project needed to bring two market versions, a CMS, payments, data and infrastructure together into one system ready for reliable production use.
02
The solution
I built the platform from scratch with Next.js, React and TypeScript. Payload CMS manages content, offers and sales data, while Stripe handles payments for training and products.
The Polish and Norwegian versions share one architecture and PostgreSQL database, but run on separate domains. This keeps both markets in one system while allowing their content and communication to stay local.
One architecture · two markets
PL and NO versions in the live platform
The Polish and Norwegian versions use one shared system, while reaching their audiences through their own domains and local language.
03
One system, two markets
I delivered the Polish version at alanborys.pl and the Norwegian version at alanborys.no. Both domains point to the shared application, which identifies the market and serves the appropriate content.
This approach keeps one codebase, CMS and sales workflow instead of duplicating the whole product. Each version can still have its own language, messaging and offer.
04
CMS, offer management and payments
I configured Payload CMS with the collections and data structure needed for pages, content, training, forms, orders and media. The admin panel makes it possible to update the offer without editing the application code.
Stripe is integrated with the sales flow and offer synchronization. In practice, the frontend, CMS and payments work as one path — from presenting a training product to handling an order.
05
From containers to production
I prepared the full production environment on a Debian VPS: Docker, Docker Compose, PostgreSQL, and application and dependent-service containers. The setup includes environment variables, secrets, data migrations, health checks and automatic restarts after a server reboot.
Caddy acts as the reverse proxy, routes traffic to the application and handles HTTPS with TLS certificates. The deployment also covered domains, DNS, VPS hosting configuration, and domain email and business mailboxes for both domains.
Delivery flow
- Next.js + React
- Payload CMS
- Stripe
- PostgreSQL
- Docker Compose
- Caddy
- VPS · Debian
- Production
06
End-to-end delivery ownership
I was responsible for the application architecture, responsive frontend, CMS, data, payments and production setup. That kept decisions about the interface, sales flow and infrastructure in one context.
This was not treated as simply publishing a website. I took the project from code and content management to a live environment serving two markets through its own domains.
My role
From code to a live environment
I led the delivery end to end — from architecture and interface decisions to the CMS, sales flow, server and domain services.
Architecture and frontend
I designed the shared Next.js application, responsive React interface and two-market support under separate domains.
CMS and sales
I configured Payload CMS, the data model, management panel and Stripe integration needed to sell the offer online.
Deployment and infrastructure
I prepared containers, Docker Compose, PostgreSQL, Caddy and a VPS environment ready to run a production application.
Domains and operations
I configured domains, DNS, HTTPS and email handling so both markets could operate as a complete service.
Client project
Visit the live platform
Alan Borys is a commercial project developed for a client. Its source code and infrastructure details are not public.


