spb/vquant Public MIT
VibeQuant — AI-powered institutional-grade financial intelligence platform.
TypeScript 84.3%
Python 11.7%
JavaScript 1.6%
CSS 1.5%
HTML 0.7%
1<!--2 =============================================================================3 VibeQuant (vquant) — AI-Powered Financial Intelligence Platform4 -----------------------------------------------------------------------------5 File: docs/CONTRIBUTING.md67 Author: Simon-Pierre Boucher8 Contact: contact@spboucher.ai9 Website: https://www.spboucher.ai10 Demo: https://www.vquant.ai11 License: MIT (see LICENSE)1213 Copyright © 2026 Simon-Pierre Boucher. All rights reserved.14 =============================================================================15-->1617# Contributing1819Thank you for your interest in contributing to VibeQuant!2021## Development Setup2223```bash24git clone https://github.com/spboucher-ai/vquant.git25cd vquant26npm install27cp .env.example .env28# Edit .env with your API keys29npm run dev30```3132## Before Submitting a PR3334Run all checks:3536```bash37npm run typecheck # TypeScript (15 pre-existing errors, do not add new ones)38npm run lint # ESLint (0 errors, warnings are OK)39npm test # Vitest (all 41 tests must pass)40npm run build # Production build must succeed41```4243## Code Conventions4445| Rule | Details |46|------|---------|47| **TypeScript strict** | `strict: true` in tsconfig.json |48| **ESLint** | Flat config in `eslint.config.js` |49| **Prettier** | Config in `.prettierrc` (double quotes, semicolons, trailing commas) |50| **No `console.log`** | Use `logger` from `server/utils/logger.ts` on server-side |51| **No `any`** | Use proper types. `any` triggers ESLint warning |52| **Zod validation** | All API inputs validated in `server/routes/validation.ts` |53| **Path aliases** | `@/` for client, `@shared/` for shared types |54| **Component files** | One component per file, PascalCase export |55| **Hook files** | `useXxx.ts` naming, camelCase |5657## Project Structure5859- **Client components** go in `client/src/components/chat/` (chat-specific) or `client/src/components/` (shared)60- **Route handlers** go in `server/routes/` as separate modules61- **Services** go in `server/services/`62- **Shared types** go in `shared/types.ts`63- **Tests** are co-located: `foo.ts` -> `foo.test.ts`6465## Commit Messages6667Follow [Conventional Commits](https://www.conventionalcommits.org/):6869```70feat: add new FMP endpoint for crypto analysis71fix: correct staleTime in queryClient72refactor: extract useChatSession hook73chore: update ESLint config74test: add validation schema tests75docs: update API reference76ci: fix Node version matrix77```7879## Adding a New API Endpoint80811. Define the Zod schema in `server/routes/validation.ts`822. Add the route handler in the appropriate `server/routes/*.ts` module833. Use `logger` instead of `console.log`844. Add a test for the validation schema855. Document the endpoint in `docs/API_REFERENCE.md`8687## Adding a New Claude Tool88891. Add the tool definition in `server/services/claude/toolDefinitions.ts`902. Add the handler in `server/routes.ts` inside `processClaudeResponse`913. If it produces visual output, handle the SSE event in `client/src/hooks/useChatSession.ts`9293## Questions?9495Open an issue on [GitHub](https://github.com/spboucher-ai/vquant/issues).96