Skip to content

Deployment

Each Lakea app is deployed as a separate Cloudflare Pages project with its own subdomain:

AppSubdomainPages Project
Portallakea.devlakea-portal
Handbookdocs.lakea.devlakea-handbook
Exoplanet Catalogexoplanet.lakea.devlakea-exoplanet-catalog

Each app runs on its own port:

Terminal window
pnpm nx dev @lakea/portal # localhost:4320
pnpm nx dev @lakea/handbook # localhost:4322
pnpm nx dev @lakea/exoplanet-catalog # localhost:4321
# Or start all at once
pnpm dev

Cross-app links automatically use localhost:PORT in development.

Ports are assigned sequentially starting from 4320:

PortAppStatus
4320portallive
4321exoplanet-cataloglive
4322handbooklive
4323hubble-explorerplanned
4324cosmic-webplanned
4325+future apps

When adding a new app, use the next available port.

Apps progress through three statuses:

StatusMeaningShows in Portal
plannedDesigned but not startedBadge only
developmentWork in progressBadge only
liveDeployed and workingClickable link

Update status in packages/core/src/apps/index.ts as you progress:

'my-app': {
// ... other fields
status: 'development', // Change to 'live' when deployed
},

For each app, create a Pages project in Cloudflare Dashboard:

Portal:

  • Project name: lakea-portal
  • Build command: pnpm nx build @lakea/portal
  • Build output: apps/portal/dist

Handbook:

  • Project name: lakea-handbook
  • Build command: pnpm nx build @lakea/handbook
  • Build output: apps/handbook/dist

Exoplanet Catalog:

  • Project name: lakea-exoplanet-catalog
  • Build command: pnpm fetch:nasa && pnpm nx build @lakea/exoplanet-catalog
  • Build output: apps/exoplanet-catalog/dist

In Cloudflare DNS, add CNAME records pointing to your Pages projects:

lakea.dev → lakea-portal.pages.dev
docs.lakea.dev → lakea-handbook.pages.dev
exoplanet.lakea.dev → lakea-exoplanet-catalog.pages.dev

Then add each domain in the Pages project settings under “Custom domains”.

If using a different domain than lakea.dev, update packages/core/src/apps/index.ts:

export const PROD_DOMAIN = 'yourdomain.dev';
  1. Create the app in apps/
  2. Add to registry in packages/core/src/apps/index.ts:
    'new-app': {
    id: 'new-app',
    name: 'New App',
    description: 'Description',
    devPort: 4325,
    subdomain: 'newapp',
    status: 'development',
    },
  3. Create Cloudflare Pages project
  4. Add custom domain