Olzhas Koishybek
← All work

QULTURE

E-commerce for an Astana clothing brand with an AI product consultant. Next.js, Cloudflare Workers, OpenAI.

Built with
Next.js, TypeScript, Cloudflare Workers, OpenAI
Year
2026
Status
Live

QULTURE is a clothing brand in Astana. They needed a storefront that could sell in Russian, Kazakh and English without handing a cut and their design language to a shop platform. I built the whole thing — catalogue, cart, checkout with a map pin for the delivery address, and the public offer for the real registered business behind it.

It's Next.js 15 running as a Cloudflare Worker through OpenNext. There's no database: the catalogue is a typed module, and orders go into Workers KV. Language comes from the browser's Accept-Language header and is decided on the server, so you get your own language on the first paint and there's no switcher to hunt for.

Prices are recomputed on the server, always. The browser never sends one — the order endpoint accepts a product slug, a format and a quantity, rejects anything that isn't in the live catalogue, and works out every line and the total itself. It costs almost nothing to build and it makes tampering with the cart pointless.

The harder problem was the AI consultant. The brand hadn't launched, so there was no fabric composition, no size chart, no delivery dates — exactly the questions a clothing buyer asks, and exactly the ones a language model will happily invent. So it gets one hand-written knowledge base as its only permitted source of facts, plus an explicit list of things it must never answer. Anything on that list gets a fixed sentence — I don't have verified information on that — and an offer to pass the question to a person. The pricing part of that knowledge base is generated from the same module the storefront renders, so the assistant and the page can't quote different numbers at the same customer.

One thing I didn't expect: the official OpenAI SDK doesn't run on Cloudflare Workers. With Node compatibility on, it decides it's in Node and routes through node:http, which the Workers runtime refuses. I replaced it with a small wrapper over native fetch. The site is live, and 24 tests cover the order schema, the catalogue and the locale routing.

Viral Trend Presets AppCaspianPulse GIS