Skip to main content

Local Development

Set up the Pindeck development environment on your machine.

Prerequisites

  • Bun runtime
  • A Convex account with the tremendous-jaguar-953 deployment
  • Google or GitHub OAuth app credentials

Setup

1. Clone and install

git clone https://github.com/gordo-v1su4/pindeck.git
cd pindeck
bun install

2. Configure environment

cp .env.example .env.local
Set the production Convex URL in .env.local:
VITE_CONVEX_URL=https://tremendous-jaguar-953.convex.cloud

3. Build and serve

bun run build
bun run serve
The app runs on port 4173. The serve script auto-kills any existing process on that port.
Do not use convex dev when targeting production. The build scripts enforce the production Convex target and fail fast otherwise.

Environment variables

Frontend (.env.local)

VariableRequiredDescription
VITE_CONVEX_URLYesConvex client URL (*.convex.cloud)
VITE_CONVEX_SITE_URLNoConvex HTTP/actions URL (*.convex.site)

Convex Dashboard (backend)

Set these in the Convex Project Settings:
VariableDescription
JWT_PRIVATE_KEYRSA private key for auth tokens
OPENROUTER_API_KEYOpenRouter API key for VLM analysis
OPENROUTER_VLM_MODELOptional model override
FAL_KEYfal.ai API key for image generation
INGEST_API_KEYAPI key for Discord ingest endpoint
NEXTCLOUD_WEBDAV_BASE_URLNextcloud WebDAV endpoint
NEXTCLOUD_WEBDAV_USERNextcloud username
NEXTCLOUD_WEBDAV_APP_PASSWORDNextcloud app password
NEXTCLOUD_UPLOAD_PREFIXUpload path prefix (default: pindeck/media-uploads)
AUTH_GOOGLE_ID / AUTH_GOOGLE_SECRETGoogle OAuth credentials
AUTH_GITHUB_ID / AUTH_GITHUB_SECRETGitHub OAuth credentials
SITE_URLPublic app URL for OAuth callbacks

Useful scripts

CommandDescription
bun run buildProduction build (vite build)
bun run servePreview production build on port 4173
bun run deploy:convexDeploy Convex functions
bun run check:prod-targetVerify env points to production Convex

Production deployments

  • Convex: tremendous-jaguar-953
  • Frontend: Vercel (ensure VITE_CONVEX_URL is set)
  • Discord bot: Hosted separately — see Discord bot guide