VeztaVezta
Overview

Quickstart

Get the development environment running

This guide walks you through setting up the Vezta development environment.

Vezta does not run a local Postgres or Redis. The frontend is developed locally and points to the staging backend (staging.vezta.io) by default for full data. Backend code changes are deployed to the staging VM via CI/CD; local backend development is rare and typically only needed for unit tests.

Prerequisites

ToolVersionPurpose
Node.js20+Runtime for all subprojects (CI uses 20)
pnpm10+Package manager
GitLatestSource control
DockerOptionalOnly needed if you actually want to spin up a local backend

Repo Layout

The root is not a pnpm workspace -- each subproject is independent.

vezta/
├── vezta-fe/      # Frontend (Next.js 16) — port 3000
├── vezta-be/      # Backend (NestJS) — port 3001
├── vezta-mobile/  # Mobile (Expo) — designs only, not yet implemented
├── vezta-docs/    # Documentation site (Fumadocs)
└── plans/         # Implementation plans

Frontend Setup (most common)

Install dependencies

cd vezta-fe
pnpm install

Configure environment

Create vezta-fe/.env.local:

# Point at the staging backend so you have full data
NEXT_PUBLIC_API_URL=https://staging.vezta.io/api/v1
NEXT_PUBLIC_WS_URL=wss://staging.vezta.io
BACKEND_URL=https://staging.vezta.io

# Required for Google login + waitlist portfolio
NEXT_PUBLIC_GOOGLE_CLIENT_ID=<your-client-id>

# Solana RPC (mainnet for DFlow trades; tied to wallet adapter)
NEXT_PUBLIC_SOLANA_RPC_URL=https://api.mainnet-beta.solana.com
NEXT_PUBLIC_SOLANA_NETWORK=mainnet-beta

# Optional: Reown WalletConnect project ID
NEXT_PUBLIC_WALLETCONNECT_PROJECT_ID=<your-id>

Run the dev server

pnpm dev

The frontend runs on port 3000.

pnpm dev uses Turbopack (next dev --turbopack). pnpm build uses webpack for WASM compatibility with wallet libraries. Do not confuse the two.

Optional: Backend Setup (rare)

Most backend changes are made directly against the staging VM via CI/CD. If you really need a local backend (for example, to debug an API change before pushing):

Install dependencies

cd vezta-be
pnpm install

Run a local Postgres + Redis (Docker)

You will need to bring your own:

docker run -d --name vezta-pg -e POSTGRES_USER=vezta -e POSTGRES_PASSWORD=vezta -e POSTGRES_DB=vezta -p 5432:5432 postgres:17
docker run -d --name vezta-redis -p 6379:6379 redis:7

Configure .env

DATABASE_URL=postgresql://vezta:vezta@localhost:5432/vezta
DIRECT_URL=postgresql://vezta:vezta@localhost:5432/vezta
JWT_SECRET=local-dev-secret
JWT_REFRESH_SECRET=local-dev-refresh-secret
REDIS_HOST=localhost
REDIS_PORT=6379
FRONTEND_URL=http://localhost:3000
NODE_ENV=development

Note: NODE_ENV config validation only accepts development or production -- never staging.

Migrate + run

pnpm prisma:generate
npx prisma migrate deploy   # apply existing migrations to your LOCAL db only
pnpm start:dev

Do not run pnpm prisma:migrate (prisma migrate dev) — migrations are authored/applied via CI/CD on the staging/prod VMs, and the schema has historical drift. Use pnpm prisma:generate after schema changes; use prisma migrate deploy only against a throwaway local database.

Backend runs on port 3001. Swagger UI at http://localhost:3001/docs. The startup hook also writes openapi.json to the project root.

Common Commands Reference

Frontend

cd vezta-fe && pnpm dev              # Dev server (port 3000) — uses Turbopack
cd vezta-fe && pnpm build            # Production build (webpack, WASM compat)
cd vezta-fe && pnpm test             # Vitest (80% stmt/line/fn, 75% branch coverage)
cd vezta-fe && pnpm test -- --coverage
cd vezta-fe && pnpm generate         # Kubb: regen API client from OpenAPI
cd vezta-fe && pnpm generate:watch
cd vezta-fe && pnpm lint             # ESLint

Backend

cd vezta-be && pnpm start:dev        # Dev server with hot-reload (port 3001)
cd vezta-be && pnpm build            # Compile TypeScript
cd vezta-be && pnpm test             # Jest unit tests
cd vezta-be && pnpm test:cov
cd vezta-be && pnpm test:e2e         # E2E (uses --runInBand, needs DB+Redis)
cd vezta-be && pnpm format           # Prettier
cd vezta-be && pnpm prisma:generate  # after schema changes (do NOT run prisma:migrate locally)
cd vezta-be && npx prisma db seed    # Seed (NOT a pnpm script — use npx)
cd vezta-be && pnpm prisma:studio
cd vezta-be && pnpm export:openapi

Docs

cd vezta-docs && pnpm dev
cd vezta-docs && pnpm build
cd vezta-docs && pnpm generate:api   # Regen API MDX from public/openapi.json

Running a Single Test

# Frontend (Vitest) — `pnpm test -- <path>` does NOT filter; use vitest run, or -t for a name
cd vezta-fe && pnpm exec vitest run navbar

# Backend (Jest)
cd vezta-be && pnpm test -- --testPathPattern=auth

On this page