Skip to main content
← All Projects
saas2026in development

Nolly

Knowledge capture and transfer for teams

Overview

Nolly captures institutional knowledge so it doesn't walk out when people leave. Teams upload documents, record audio, or type notes into one searchable base. The codebase is a TypeScript monorepo of 12 packages spanning three web apps, a worker, and an MCP server. The main app runs on TanStack Start with Drizzle over Postgres (row-level security), Better Auth with Google OAuth, and BullMQ on Redis for async jobs. The worker parses PDFs, runs Sharp, transcribes audio via Groq, and generates embeddings for semantic search. Real-time editing uses Hocuspocus with Yjs CRDTs, and an MCP server exposes knowledge operations to clients like Claude.

Built With

TanStack Start
TypeScript
React
PostgreSQL
Drizzle
Redis
BullMQ
Tailwind CSS
Better Auth
UploadThing
Sharp
Postmark

Architecture

Public SiteMarketing / Landing
Nolly AppCore Product
Admin PanelInternal Tools
HocuspocusCollaboration Server
Better AuthAuth Layer
Lemon SqueezyBilling / Payments
BullMQ WorkerBackground Jobs
Groq APILLM / Whisper
Google DriveFile Integration
RedisJob Queue
Supabase PostgresDatabase (pgvector)
UploadThingFile Storage

Key Highlights

01

RAG Knowledge Pipeline

Multi-stage ingestion pipeline using BullMQ workers that extracts text from PDFs, DOCX, XLSX, images (via vision AI), and audio (via Groq Whisper). Documents are semantically chunked and embedded using MiniLM-L6-v2 (384-dim vectors) for pgvector search.

02

Real-time Collaboration

Hocuspocus WebSocket server with Yjs CRDTs syncing TipTap editors across users. Includes debounced micro-saves, automatic embedding regeneration after edits, and idle version snapshots queued through BullMQ.

03

AI Chat with Tool Use

Conversational knowledge assistant powered by Groq (Llama 4 Scout) with function-calling tools for semantic search, metadata filtering, and member lookups. Uses dual-layer retrieval with LLM query rewriting and expanded keyword variants.

04

Postgres Row-Level Security

Application-level RLS using AsyncLocalStorage to propagate user context. Every query runs inside a transaction that sets Postgres session variables via set_config, scoping all data to the authenticated user's organization.

05

Google Drive Sync

Background sync that imports files from Google Drive using raw fetch against the v3 REST API (no googleapis SDK, saving ~30MB). Handles Workspace export conversions and memory-aware backpressure with exponential backoff.

Nolly: Knowledge capture and transfer for teams
Nolly: Knowledge capture and transfer for teams

Get in Touch

Want to work together?

Whether you have a project in mind, want to collaborate, or just want to say hi, I'd love to hear from you. Drop me a message and I'll get back to you as soon as I can.