ait
Personal AI platform built as a pnpm monorepo. Connects to external services (GitHub, Spotify, Linear, Notion, Slack, Google) via OAuth, syncs data through an ETL pipeline, stores embeddings in Qdrant, and provides RAG-powered AI responses via Ollama.
Preferences
- Package manager: pnpm (corepack, workspace protocol)
- Linter/formatter: Biome 1.9 — 2-space indent, single quotes, semicolons
- Error handling:
Result<T, E> pattern with ok() / err() — never throw in business logic
- Testing: Node.js native
node:test with describe/it, borp runner, c8 coverage
- Naming: PascalCase classes,
I prefix interfaces, camelCase methods, SCREAMING_SNAKE constants, kebab-case files
- Type files:
.types.ts, spec files: .spec.ts
- All packages: scoped
@ait/*
References
| Category |
Reference |
Description |
| Core |
core-architecture |
Layered architecture, data flow, package structure |
| Core |
core-entity-types |
Normalized entity types with __type strings |
| Core |
core-result-type |
Result<T,E>, ok(), err() usage patterns |
| Features |
features-oauth |
Encrypted credentials, factory pattern, token refresh |
| Features |
features-rag |
Qdrant, multi-query retrieval, reranking, streaming |
| Features |
features-scheduler |
BullMQ, priority queues, repeatable jobs |
| Features |
features-connectors |
GitHub, Spotify, Linear, Notion, Slack, Google connectors |
| Best Practices |
best-practices-testing |
Node.js native test runner, Docker services, c8 coverage |
Quick Reference
# Development
pnpm dev # Start all packages in parallel
pnpm start:services # Docker: PostgreSQL, Qdrant, Redis, Ollama, MinIO
pnpm test # Run all tests (starts test services automatically)
pnpm migrate # Run Drizzle migrations
pnpm generate:openapi # Generate OpenAPI specs for connectors
# Ports
# PostgreSQL: 5432 | Qdrant: 6333 | Redis: 6379
# Ollama: 11434 | MinIO: 9090 | Langfuse: 3333
# Gateway: 3000 | UIt (UI): 5173
# Models (env)
GENERATION_MODEL=gemma3:latest
EMBEDDINGS_MODEL=mxbai-embed-large:latest
// Result pattern
const result = await someOperation();
if (result.ok) {
console.log(result.value);
} else {
console.error(result.error);
}
// Connector factory
const service = connectorServiceFactory.getServiceByConfig(configId, userId);
1---2name: ait3description: Knowledge pack for AIt — a personal AI platform with monorepo architecture, RAG pipeline, OAuth connectors, and BullMQ scheduling.4---56# ait78Personal AI platform built as a pnpm monorepo. Connects to external services (GitHub, Spotify, Linear, Notion, Slack, Google) via OAuth, syncs data through an ETL pipeline, stores embeddings in Qdrant, and provides RAG-powered AI responses via Ollama.910## Preferences1112- **Package manager**: pnpm (corepack, workspace protocol)13- **Linter/formatter**: Biome 1.9 — 2-space indent, single quotes, semicolons14- **Error handling**: `Result<T, E>` pattern with `ok()` / `err()` — never throw in business logic15- **Testing**: Node.js native `node:test` with `describe`/`it`, `borp` runner, `c8` coverage16- **Naming**: PascalCase classes, `I` prefix interfaces, camelCase methods, SCREAMING_SNAKE constants, kebab-case files17- **Type files**: `.types.ts`, spec files: `.spec.ts`18- **All packages**: scoped `@ait/*`1920## References2122| Category | Reference | Description |23|----------|-----------|-------------|24| Core | [core-architecture](references/core-architecture.md) | Layered architecture, data flow, package structure |25| Core | [core-entity-types](references/core-entity-types.md) | Normalized entity types with `__type` strings |26| Core | [core-result-type](references/core-result-type.md) | `Result<T,E>`, `ok()`, `err()` usage patterns |27| Features | [features-oauth](references/features-oauth.md) | Encrypted credentials, factory pattern, token refresh |28| Features | [features-rag](references/features-rag.md) | Qdrant, multi-query retrieval, reranking, streaming |29| Features | [features-scheduler](references/features-scheduler.md) | BullMQ, priority queues, repeatable jobs |30| Features | [features-connectors](references/features-connectors.md) | GitHub, Spotify, Linear, Notion, Slack, Google connectors |31| Best Practices | [best-practices-testing](references/best-practices-testing.md) | Node.js native test runner, Docker services, c8 coverage |3233## Quick Reference3435```bash36# Development37pnpm dev # Start all packages in parallel38pnpm start:services # Docker: PostgreSQL, Qdrant, Redis, Ollama, MinIO39pnpm test # Run all tests (starts test services automatically)40pnpm migrate # Run Drizzle migrations41pnpm generate:openapi # Generate OpenAPI specs for connectors4243# Ports44# PostgreSQL: 5432 | Qdrant: 6333 | Redis: 637945# Ollama: 11434 | MinIO: 9090 | Langfuse: 333346# Gateway: 3000 | UIt (UI): 51734748# Models (env)49GENERATION_MODEL=gemma3:latest50EMBEDDINGS_MODEL=mxbai-embed-large:latest51```5253```typescript54// Result pattern55const result = await someOperation();56if (result.ok) {57 console.log(result.value);58} else {59 console.error(result.error);60}6162// Connector factory63const service = connectorServiceFactory.getServiceByConfig(configId, userId);64```