Cloudflare Pages
Cloudflare Pages
All landing pages and static sites are deployed to Cloudflare Pages using Direct Upload via Wrangler CLI.
Deployed Sites
| Project | Package | Cloudflare Project | URL |
|---|---|---|---|
| Chat | @chat/landing | chat-landing | chat.manacore.app |
| Picture | @picture/landing | picture-landing | picture.manacore.app |
| Manacore | @manacore/landing | manacore-landing | manacore.app |
| ManaDeck | @manadeck/landing | manadeck-landing | manadeck.manacore.app |
| Zitare | @zitare/landing | zitare-landing | zitare.manacore.app |
| Docs | @manacore/docs | manacore-docs | docs.manacore.app |
Quick Deploy
# Login to Cloudflare (first time only)pnpm cf:login
# Deploy a landing pagepnpm deploy:landing:chatpnpm deploy:landing:picture
# Deploy documentationpnpm deploy:docs
# Deploy all landing pagespnpm deploy:landing:allSetup Guide
-
Login to Cloudflare
Terminal window npx wrangler loginThis opens a browser to authenticate with your Cloudflare account.
-
Create a project (first time only)
Terminal window npx wrangler pages project create chat-landing --production-branch=main -
Configure wrangler.toml
Each landing page needs a
wrangler.toml:name = "chat-landing"compatibility_date = "2024-12-01"pages_build_output_dir = "dist" -
Deploy
Terminal window # Build and deploypnpm --filter @chat/landing buildnpx wrangler pages deploy apps/chat/apps/landing/dist --project-name=chat-landing
Project Configuration
wrangler.toml
# Cloudflare Pages configurationname = "project-landing"compatibility_date = "2024-12-01"pages_build_output_dir = "dist"Deploy Script Pattern
Each project has a deploy script in root package.json:
{ "scripts": { "deploy:landing:chat": "pnpm --filter @chat/landing build && npx wrangler pages deploy apps/chat/apps/landing/dist --project-name=chat-landing" }}Custom Domains
Add a Custom Domain
# Via CLInpx wrangler pages project add-domain chat-landing chat.manacore.app
# Or via Cloudflare Dashboard:# 1. Go to Pages > chat-landing > Custom domains# 2. Add domain: chat.manacore.app# 3. Configure DNS (automatic if using Cloudflare DNS)DNS Configuration
If using Cloudflare DNS (recommended):
| Type | Name | Content | Proxy |
|---|---|---|---|
| CNAME | chat | chat-landing.pages.dev | Proxied |
If using external DNS:
| Type | Name | Content |
|---|---|---|
| CNAME | chat | chat-landing.pages.dev |
Environment Variables
Build-time Variables
Set in Cloudflare Dashboard or via wrangler.toml:
[vars]PUBLIC_API_URL = "https://api.manacore.app"Via Dashboard
- Go to Pages > Project > Settings > Environment variables
- Add variables for Production and Preview environments
Deployment Previews
Every push to a branch creates a preview deployment:
- Production:
https://chat-landing.pages.dev - Preview:
https://<branch>.<project>.pages.dev
Rollback
Via CLI
# List deploymentsnpx wrangler pages deployment list --project-name=chat-landing
# Promote a previous deployment to productionnpx wrangler pages deployment promote <deployment-id> --project-name=chat-landingVia Dashboard
- Go to Pages > Project > Deployments
- Find the deployment to rollback to
- Click ”…” > “Rollback to this deployment”
Adding a New Landing Page
-
Create the landing page
apps/{project}/apps/landing/├── src/├── public/├── astro.config.mjs├── wrangler.toml└── package.json -
Add wrangler.toml
name = "{project}-landing"compatibility_date = "2024-12-01"pages_build_output_dir = "dist" -
Create Cloudflare project
Terminal window npx wrangler pages project create {project}-landing --production-branch=main -
Add deploy script to root package.json
"deploy:landing:{project}": "pnpm --filter @{project}/landing build && npx wrangler pages deploy apps/{project}/apps/landing/dist --project-name={project}-landing" -
Deploy
Terminal window pnpm deploy:landing:{project} -
Add custom domain (optional)
Terminal window npx wrangler pages project add-domain {project}-landing {project}.manacore.app
Troubleshooting
”Project not found”
Create the project first:
npx wrangler pages project create project-name --production-branch=mainBuild Fails
Check the build locally:
pnpm --filter @project/landing buildDomain Not Working
- Verify DNS records are correct
- Check SSL/TLS mode is “Full” in Cloudflare
- Wait for DNS propagation (up to 24 hours)