Skip to main content

Daily Development

Once the one time setup is done, daily work on Dashify is a rhythm of three or four commands. This page lists every command you will reach for and explains what it does.

Start the stack

pnpm dev

Brings up the whole platform, databases, caches, AI services, API, worker, and the browser app, in one go via Docker Compose. Logs from every service stream into your terminal. Hit Ctrl+C to stop.

Stop the stack

pnpm dev:down

Stops the containers but keeps their volumes (so your database survives restart).

Bring up only the helper services (Qdrant + Ollama)

pnpm up

Useful when you have already installed Node deps and just want the supporting stack online. Also re-pulls AI models if missing.

pnpm down

Stops only Qdrant and Ollama, leaving the rest running.

Run the API and the client without Docker

Some tasks (debugging with breakpoints, attaching the editor's TypeScript server) are easier when the API and client run directly on your host. To do that:

# Terminal 1, bring up just the databases
docker compose up mongo redis qdrant ollama mailhog

# Terminal 2, start the API
pnpm --filter @dashify/server run server

# Terminal 3, start the worker
pnpm --filter @dashify/server run worker

# Terminal 4, start the browser app
pnpm --filter @dashify/client run dev

This is heavier on your terminal real estate but makes hot-reload and breakpoints feel instant.

Linting and formatting

pnpm format # Prettier across the whole repo
pnpm format:check # CI mode, fails on unformatted files
pnpm lint # ESLint across all packages
pnpm lint:server # only the API
pnpm lint:client # only the browser app

A pre-commit hook (managed by Husky) runs Prettier and ESLint automatically on staged files. You usually do not need to run these by hand.

Tests

pnpm test # all packages
pnpm test:server # only the API

Server tests cover the integration layer with real MongoDB and Redis (via Testcontainers) and use Vitest as the runner. Client tests use Vitest + React Testing Library; end to end flows live in Playwright.

Documentation site

You are reading the documentation site right now, but to run it locally:

pnpm docs:dev # http://localhost:3001
pnpm docs:build # produce a static site
pnpm docs:serve # serve the built site locally

The docs site lives in /docs-site/ and uses Docusaurus.

Deploy commands

Two convenience scripts at the root rebuild and restart the API or the client without bringing the whole stack down:

pnpm deploy:backend # rebuild + restart api + worker
pnpm deploy:frontend # rebuild + restart web

Each script stops the relevant service, removes its container and image, rebuilds from scratch with --no-cache, and starts it again detached. Useful when a Dockerfile or build-time dependency has changed.

A typical workflow

Where things live

FolderContains
client/src/pages/The route-level React pages
client/src/components/Reusable UI pieces
client/src/api/API clients (RTK Query slices)
server/src/routes/Route definitions
server/src/controllers/Route handlers
server/src/services/Business logic
server/src/models/Mongoose schemas
server/src/middleware/Auth, CSRF, tenant scoping, etc.
server/src/docs/Swagger/OpenAPI definitions
docs-site/docs/This documentation

Key takeaways

  • pnpm dev is your everyday command.
  • pnpm deploy:backend and pnpm deploy:frontend rebuild a single tier without touching the rest.
  • Pre-commit hooks keep formatting and linting honest automatically.
  • The docs site runs independently with pnpm docs:dev.