LSCApp Docs
Developers & Integrations

Deploy Process

How a change actually reaches production.

No CI/CD, no git remote

This repository has no git remote at all. There's no GitHub-connected pipeline that deploys on push — deploys happen from a local checkout, directly, via the Vercel CLI:

npx vercel --prod --archive=tgz

git push does nothing for this project. The --archive=tgz flag is required — the repo is past Vercel's file-count limit for a non-archived upload.

Before deploying

  • Run the relevant type-check (npx tsc --noEmit in the affected workspace) — there's no CI to catch a type error for you.
  • If your change touches the database, apply the migration first and confirm it succeeded before deploying code that depends on it.

.vercelignore

The deploy archive does not respect .gitignore — everything a .gitignore excludes still gets swept into the upload unless .vercelignore excludes it too. This matters a lot for a monorepo: every workspace's node_modules, native build output (apps/mobile/ios, apps/customer/ios), and stray build artifacts all need explicit entries, or the archive balloons and can fail outright.

A known recurring failure: parallel git worktrees

If this repo has other Claude Code sessions running in parallel (.claude/worktrees/<name>/), a deploy can fail with "... is not a valid symlink" — a dangling node_modules symlink inside one of those worktrees trips Vercel's archive step even though .vercelignore excludes worktree directories entirely.

This is not fixable by repairing the symlink or tweaking .vercelignore — that's been tried and confirmed not to work. The only reliable fix is getting the offending worktree committed and removed (git worktree remove, after confirming its changes are safely committed to its own branch first — removing the checkout doesn't lose the commits).

Deploying apps/docs

This documentation site deploys as its own separate Vercel project, pointed at docs.lionshare.cloud, independent of the main app's project — see Architecture Overview for why. Deploy it the same way, from apps/docs, against its own linked Vercel project.

On this page