Hosting Services#
GeoAssistant uses three hosting platforms, each chosen for a specific purpose.
Subdomain |
Platform |
Purpose |
|---|---|---|
|
Netlify |
Marketing site (static React) |
|
Vercel |
SaaS app (React) |
|
Railway |
FastAPI backend (Docker) |
|
Netlify |
Sphinx documentation |
|
Netlify |
GeoGeometry Sphinx docs |
Railway (API)#
Railway runs the Docker image for GeoAssistant-API.
Deployment steps:
Push the image to Docker Hub:
docker push kamejoin/geoassistant-apiIn Railway: New Project → Deploy a Docker Image →
kamejoin/geoassistant-apiSet environment variables in the Variables tab
Go to Settings → Networking → Add Custom Domain →
api.geoassistant.orgRailway 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:
Sign in to Vercel with GitHub
Import the SaaS repo (grant access to only that repo)
Vercel auto-detects Vite + React and sets
npm run build/distautomaticallyAdd custom domain
app.geoassistant.orgin Project Settings → DomainsAdd 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.