Finper is a pnpm monorepo with three primary packages:Documentation Index
Fetch the complete documentation index at: https://mintlify.com/soker90/finper/llms.txt
Use this file to discover all available pages before exploring further.
api (Express + TypeScript), client (React + Vite), and db (Drizzle ORM + SQLite). A Makefile at the root provides short aliases for the most common workflows. This page documents every available command and explains how the test and lint setups work.
All make commands
Run make with no arguments to print the built-in help text.
| Command | Description |
|---|---|
make install | Install all workspace dependencies (pnpm install) |
make build-types | Compile the shared @soker90/finper-types package |
make build-db | Compile the @soker90/finper-db package |
make build-api | Compile the API (chains build-types → build-db → TypeScript compile) |
make build-client | Build the React client for production |
make start-api | Start the API server (builds TypeScript first) |
make start-client | Start the Vite dev server for the client |
make seed-user USERNAME=... PASSWORD=... | Create an initial user (see User Management) |
make lint-api | Run ESLint on the API package |
make lint-client | Run ESLint on the client package |
make lint-db | Run ESLint on the db package |
make test-api | Run Jest tests for the API |
make test-client | Run Vitest tests for the client |
make test-db | Run Vitest tests for the db package |
make test | Run all tests across all packages in parallel |
make clean | Remove all dist/, coverage/, and node_modules/ directories |
pnpm equivalents
Everymake target is a thin alias over a pnpm --filter command. You can call pnpm directly if you prefer:
Testing
API — Jest + supertest
The API test suite uses Jest with ts-jest and supertest to make real HTTP requests against an in-memory SQLite database. No external services or running API instance is required.- Test files live in
packages/api/src/**/__tests__/ - The test runner sets
ALLOW_REGISTRATION=trueso registration flows can be tested without adjusting the env - Before running API tests for the first time, build the upstream packages:
Client — Vitest + Testing Library + MSW
The React client uses Vitest as the test runner, @testing-library/react for component assertions, and MSW (Mock Service Worker) to intercept API calls. No running API or database is needed.DB — Vitest
The database package has its own isolated Vitest suite. No API prerequisites required.Run all tests
pnpm -r --parallel test.
Linting
All packages use ESLint with a flat config (eslint.config.mjs). The API and client configs extend neostandard and @typescript-eslint for consistent style and type-aware rules.
Check for lint errors:
Toolchain notes
| Tool | Version | Notes |
|---|---|---|
| Node.js | ≥ 24 | Enforced via .nvmrc (value: 24). Use nvm use to switch automatically. |
| pnpm | 10 | The Dockerfile pins pnpm@10.29.3 via corepack. .npmrc does not enforce engine-strict, but mismatched pnpm versions may produce lock file warnings. |
| TypeScript | strict | "strict": true is set in both packages/api/tsconfig.json and packages/client/tsconfig.json. |
| Husky | — | Git hooks are installed via Husky. A pre-commit hook runs on staged files. |
| commitlint | — | Commit messages are linted on commit-msg to enforce Conventional Commits format. |