SPB Git

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%
3.1 KB · 96 lines markdown
Rendered Raw Blame History
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