FinSentinel is an AI-assisted investment research and risk platform organized as a TypeScript monorepo.
The active product path is:
apps/api: NestJS API, agent orchestration, trading integrations, document/RAG pipelineapps/web: Next.js frontendpackages/db,packages/shared: shared workspace packages
| App | Status | Notes |
|---|---|---|
apps/api |
canonical | In CI, primary target. |
apps/web |
canonical | In CI, primary target. |
apps/desktop |
experimental | Smoke CI only, no release artifacts yet. |
.
├── apps/
│ ├── api/
│ └── web/
├── packages/
│ ├── db/
│ └── shared/
├── observability/
└── docs/
Requirements:
- Node.js 22+
- pnpm 10+
- PostgreSQL
- Redis
- Optional object storage for document uploads
Install dependencies:
pnpm installRun the active apps:
pnpm --filter @finsentinel/api dev
pnpm --filter @finsentinel/web devUseful workspace commands:
pnpm build
pnpm typecheck
pnpm testUseful app commands:
pnpm --filter @finsentinel/api typecheck
pnpm --filter @finsentinel/api test
pnpm --filter @finsentinel/web typecheck
pnpm --filter @finsentinel/web lintRepository-level Docker entrypoints now follow the TypeScript stack:
docker-compose.yml: local TypeScript stackdocker-compose.prod.yml: production-like TypeScript stack
Start the stack with:
docker compose up --buildDefault ports:
- Web:
http://localhost:3000 - API:
http://localhost:3001/api - API metrics:
http://localhost:3001/api/metrics - Prometheus:
http://localhost:9090 - Grafana:
http://localhost:3002 - RustFS console:
http://localhost:9001
Grafana ships with a provisioned FinSentinel RAG Operations dashboard backed by Prometheus.
Minimum API environment variables:
DATABASE_URLREDIS_URLJWT_SECRETOPENROUTER_API_KEYwhenAI_PROVIDER=openrouterNVIDIA_API_KEYwhenAI_PROVIDER=nvidiaPOLYGON_API_KEY
Common optional variables:
AI_PROVIDER(openrouterby default; setnvidiafor NVIDIA Build/NIM)AI_MODELAI_EMBEDDING_PROVIDERAI_EMBEDDING_MODELENCRYPTION_AES_KEYAPP_AGENT_PERSONAAPP_TRADING_DEFAULT_MODEAPP_CRYPTO_NEWS_ENABLEDCRYPTO_NEWS_6551_TOKENAPP_TWITTER_6551_ENABLEDTWITTER_6551_TOKENAPP_OKX_ENABLEDOKX_API_KEYOKX_SECRET_KEYOKX_PASSPHRASEOPENBB_ENABLEDOPENBB_BASE_URLRAG_REINDEX_ENABLEDRAG_REINDEX_INTERVAL_MSRAG_REINDEX_STARTUP_DELAY_MSRAG_REINDEX_DOCUMENT_BATCH_SIZERAG_REINDEX_NEWS_BATCH_SIZERAG_REINDEX_FORCE
NVIDIA Build example:
AI_PROVIDER=nvidia
NVIDIA_API_KEY=nvapi-your-token
AI_MODEL=nvidia/nemotron-3-super-120b-a12b
AI_EMBEDDING_PROVIDER=nvidia
AI_EMBEDDING_MODEL=nvidia/llama-nemotron-embed-1b-v2Changing AI_EMBEDDING_MODEL requires reindexing stored RAG vectors so old and
new embedding dimensions are not mixed.
Storage variables when using RustFS or hybrid storage:
STORAGE_PROVIDERSTORAGE_ENDPOINTSTORAGE_ACCESS_KEYSTORAGE_SECRET_KEYSTORAGE_BUCKETSTORAGE_REGION