Hosting Services#

GeoAssistant uses three hosting platforms, each chosen for a specific purpose.

Subdomain

Platform

Purpose

geoassistant.org

Netlify

Marketing site (static React)

app.geoassistant.org

Vercel

SaaS app (React)

api.geoassistant.org

Railway

FastAPI backend (Docker)

docs.geoassistant.org

Netlify

Sphinx documentation

docs.geogeometry.geoassistant.org

Netlify

GeoGeometry Sphinx docs

Railway (API)#

Railway runs the Docker image for GeoAssistant-API.

Deployment steps:

  1. Push the image to Docker Hub: docker push kamejoin/geoassistant-api

  2. In Railway: New Project → Deploy a Docker Image → kamejoin/geoassistant-api

  3. Set environment variables in the Variables tab

  4. Go to Settings → Networking → Add Custom Domain → api.geoassistant.org

  5. Railway will automatically manage the DNS record in Cloudflare and provision SSL

Production environment variables:

AUTH0_DOMAIN=auth.geoassistant.org
AUTH0_CLIENT_ID=your_client_id
AUTH0_CLIENT_SECRET=your_secret
AUTH0_REDIRECT_URI=https://api.geoassistant.org/auth/callback
FRONTEND_URL=https://geoassistant.org
APP_URL=https://app.geoassistant.org
COOKIE_DOMAIN=.geoassistant.org
COOKIE_SECURE=true

Note

After updating environment variables in Railway, trigger a manual redeploy for changes to take effect.

Vercel (SaaS App)#

Vercel hosts the SaaS React app, connected directly to the GitHub repository for automatic deployments on every push.

Setup:

  1. Sign in to Vercel with GitHub

  2. Import the SaaS repo (grant access to only that repo)

  3. Vercel auto-detects Vite + React and sets npm run build / dist automatically

  4. Add custom domain app.geoassistant.org in Project Settings → Domains

  5. Add the CNAME record in Cloudflare:

Type: CNAME
Name: app
Content: 6c01159d13411acd.vercel-dns-017.com
Proxy: DNS only (not proxied)

Environment variables (set in Vercel dashboard):

VITE_API_URL=https://api.geoassistant.org
VITE_APP_URL=https://app.geoassistant.org

Netlify (Marketing + Docs)#

Netlify handles the static sites. No configuration changes needed — these were already deployed before Milestone 1.

The marketing site and docs sites remain on Netlify because they are purely static and Netlify is exactly the right tool for that.

Cloudflare (DNS)#

All DNS for geoassistant.org is managed in Cloudflare. Key records:

CNAME  app               → Vercel
CNAME  api               → Railway (managed automatically by Railway)
CNAME  auth              → Auth0 custom domain
CNAME  docs              → Netlify
CNAME  docs.api          → Netlify
CNAME  docs.geogeometry  → Netlify
CNAME  geoassistant.org  → Netlify (root domain)
TXT    _railway-verify   → Railway domain verification

Important

Vercel and Railway require DNS records to be set to DNS only (not proxied through Cloudflare). The orange cloud must be grey.