Skip to main content
This setup keeps the frontend pointed at subdomains you control while Kuest services stay behind a Cloudflare proxy.
1

Create proxied DNS records

In Cloudflare Dashboard > Your Domain > DNS > Records, create the CNAME records below and keep Proxy ON.
  • relayer.yourdomain.comrelayer.kuest.com
  • clob.yourdomain.comclob.kuest.com
  • data-api.yourdomain.comdata-api.kuest.com
  • user-pnl-api.yourdomain.comuser-pnl-api.kuest.com
  • community.yourdomain.comcommunity.kuest.com
  • create-market.yourdomain.comcreate-market.kuest.com
  • price-reference.yourdomain.comprice-reference.kuest.com
  • ws-live-data.yourdomain.comws-live-data.kuest.com
  • ws-subscriptions-clob.yourdomain.comws-subscriptions-clob.kuest.com
2

Create the Cloudflare Worker

In Workers & Pages, create a Worker and paste this script after replacing yourdomain.com.
const ORIGINS = {
  'relayer.yourdomain.com': 'https://relayer.kuest.com',
  'clob.yourdomain.com': 'https://clob.kuest.com',
  'data-api.yourdomain.com': 'https://data-api.kuest.com',
  'user-pnl-api.yourdomain.com': 'https://user-pnl-api.kuest.com',
  'community.yourdomain.com': 'https://community.kuest.com',
  'create-market.yourdomain.com': 'https://create-market.kuest.com',
  'price-reference.yourdomain.com': 'https://price-reference.kuest.com',
  'ws-live-data.yourdomain.com': 'https://ws-live-data.kuest.com',
  'ws-subscriptions-clob.yourdomain.com': 'https://ws-subscriptions-clob.kuest.com',
}

export default {
  async fetch(request) {
    const incomingUrl = new URL(request.url)
    const targetBase = ORIGINS[incomingUrl.hostname]

    if (!targetBase) {
      return new Response('Unknown host', { status: 404 })
    }

    const targetUrl = new URL(request.url)
    const targetOrigin = new URL(targetBase)
    targetUrl.protocol = targetOrigin.protocol
    targetUrl.hostname = targetOrigin.hostname

    const headers = new Headers(request.headers)
    headers.set('Host', targetOrigin.hostname)
    headers.set('X-Forwarded-Host', incomingUrl.hostname)

    const init = { method: request.method, headers, redirect: 'manual' }
    if (request.method !== 'GET' && request.method !== 'HEAD') {
      init.body = request.body
    }

    return fetch(new Request(targetUrl.toString(), init))
  },
}
3

Attach Worker routes

In Worker > Settings > Triggers > Routes or Domains & Routes, add these routes:
  • relayer.yourdomain.com/*
  • clob.yourdomain.com/*
  • data-api.yourdomain.com/*
  • user-pnl-api.yourdomain.com/*
  • community.yourdomain.com/*
  • create-market.yourdomain.com/*
  • price-reference.yourdomain.com/*
  • ws-live-data.yourdomain.com/*
  • ws-subscriptions-clob.yourdomain.com/*
4

Update production environment variables

In your hosting provider, point the app to your new subdomains:
CREATE_MARKET_URL=https://create-market.yourdomain.com
DATA_URL=https://data-api.yourdomain.com
CLOB_URL=https://clob.yourdomain.com
RELAYER_URL=https://relayer.yourdomain.com
USER_PNL_URL=https://user-pnl-api.yourdomain.com
COMMUNITY_URL=https://community.yourdomain.com
PRICE_REFERENCE_URL=https://price-reference.yourdomain.com
WS_LIVE_DATA_URL=wss://ws-live-data.yourdomain.com
WS_CLOB_URL=wss://ws-subscriptions-clob.yourdomain.com
Keep these exact environment variable names. The frontend already exposes them to the client through next.config.ts.
After this setup, users stay on your domain while traffic is proxied to the Kuest services behind Cloudflare.