Appearance
Landing and cloud pages
apps/landing is an optional static promo site. It builds into the web dist and the server serves it under /welcome. The default build ships only the promo page. The cloud edition adds pricing and legal pages for a hosted ReleaseDesk Cloud.
Routes
| Path | Edition | Source |
|---|---|---|
/welcome/ | all | apps/landing/index.html |
/welcome/pricing/ | cloud | apps/landing/pricing/index.html |
/welcome/legal/terms/, privacy, refund, dpa | cloud | apps/landing/legal/*.md, rendered into legal/<slug>/index.html |
The server also redirects the short paths /pricing, /terms, /privacy, /refund and /dpa to their /welcome/... page with a 301. The redirect only happens when the built page exists and the landing page is enabled.
Preview locally
bun run landing:devThis starts Vite on http://localhost:5174. The dev base is /welcome, so open http://localhost:5174/welcome/. The dashboard dev server on :5173 does not serve these pages.
Pricing and legal pages exist only in the cloud edition. To preview them, start the dev server with RD_LANDING_EDITION=cloud.
Build
bun run build # web build, then landing, then the server binary
bun run build:cloud # same, with RD_LANDING_EDITION=cloudThe landing build writes to apps/web/dist/welcome and must run after the web build, which empties apps/web/dist.
Cloud edition
Setting RD_LANDING_EDITION=cloud adds the pricing and legal pages as build inputs. Self-hosted builds never contain a seller's legal identity.
Legal text is Markdown in apps/landing/legal/. A small built-in renderer supports headings, paragraphs, lists, tables, bold, inline code and links. Placeholders of the form are filled from RD_LEGAL_<NAME> environment variables at build time:
| Variable | Placeholder |
|---|---|
RD_LEGAL_LEGAL_NAME | |
RD_LEGAL_IE_ID_CODE | |
RD_LEGAL_ADDRESS | |
RD_LEGAL_SUPPORT_EMAIL | |
RD_LEGAL_PRIVACY_EMAIL | |
RD_LEGAL_DOMAIN | |
RD_LEGAL_HOSTING_PROVIDER | |
Any placeholder left unset stays in the output as literal text, and the build prints a warning listing the missing variables. Do not publish until it is clean.
Edition-specific markup
In any landing HTML file:
<!--include:header-->and<!--include:footer-->insertpartials/header.htmlandpartials/footer.html.<!--cloud:x-->...<!--/cloud:x-->is kept only in cloud builds.<!--default:x-->...<!--/default:x-->is kept only in self-host builds.
Runtime visibility
Two site settings control the promo page without a rebuild:
landingEnabled: when false, every/welcomepath falls through to the dashboard's 404 page.rootPath: whenwelcome(and the landing page is enabled), visitors without a session cookie are redirected from/to/welcome/with a302. Signed-in users keep the dashboard.
Search indexing
The server generates /sitemap.xml from the built documentation and landing pages, plus enabled public app download pages and visible releases. It omits the landing pages when landingEnabled is false. Verified custom download domains get their own sitemap containing the public page at / and its visible releases. Each host's /robots.txt points to its sitemap. bun run dev builds the static pages before starting the servers so they appear in the local sitemap too.
Set RD_BASE_URL to the public HTTPS origin on the deployed server, then submit https://your-domain/sitemap.xml in Google Search Console. A local setting such as http://localhost:3000 produces local URLs that Google cannot crawl. The sitemap updates automatically as public app pages and releases change and when a new build adds static pages.