Nixpacks built Vite but had no production start command, so Coolify returned Cannot GET /. Co-authored-by: Cursor <cursoragent@cursor.com>
LexAI website
Marketing site for the LexAI monorepo: Home, Docs, Contribute, Community.
Develop
# from repo root
npm run website:install
npm run website:dev
Or inside this package:
npm install
npm run dev
Build
npm run website:build
# → packages/website/dist/
Preview production build locally: npm run website:preview (Vite, localhost only).
Production start (what Coolify should run): npm start — serves dist/ on 0.0.0.0:$PORT (default 3000).
Uses HashRouter so deep links work even without SPA rewrite rules. The production server still maps unknown paths to index.html.
Deploy on Coolify
This package is a static Vite build. No LexAI API keys or env vars. Do not add LEXAI_API_KEY.
Cannot GET / means Coolify started a Node process that is not serving dist/ (no start command, or "static site" pointed at the wrong folder). Fix: use one of the two setups below, then Redeploy.
Required on either setup
- + New → Resource → Private Repository (with deploy key) (Gitea).
- Repo SSH URL, for example
git@git.juankibin.space:kibin/LexAI.git. If Gitea SSH is not on port 22, usessh://git@git.juankibin.space:PORT/kibin/LexAI.git. - Add Coolify’s public deploy key to the Gitea repo: Settings → Deploy / Access Keys (read-only).
- Branch:
devormain. - Base Directory:
packages/website— no leading slash. Rootnpm run buildbuilds Chrome, not this site. - Optional Watch Paths:
packages/website. - Set the domain, deploy, open
https://your-domain/(docs:https://your-domain/#/docs).
Option A — Dockerfile (recommended)
- Build Pack: Dockerfile.
- Leave Is it a static site? off.
- Ports Exposes:
80. - If Coolify asks for a Dockerfile path:
packages/website/Dockerfile(or omit it when Base Directory is alreadypackages/website).
Option B — Nixpacks
- Build Pack: Nixpacks.
- Leave Is it a static site? off. Nixpacks runs
npm run buildthennode server.mjs. - Start command (if the field is shown):
npm startornode server.mjs. - Ports Exposes:
3000. - Optional env:
NIXPACKS_NODE_VERSION=22. Do not setNODE_ENV=productionat build time — Vite is a devDependency andnpm ciwould skip it.
Do not tick "Is it a static site?" with Publish Directory /dist. The leading slash is an absolute path (/dist on the container), which is empty, and Coolify then answers Cannot GET /.
If you already created the resource: uncheck static site, set Base Directory and port as above, then Redeploy (no need to recreate the app).
Auto-deploy: Coolify resource → Webhooks → copy the URL + secret into Gitea Settings → Webhooks (push events).