jevbox README

The project's README from github.com/extend-hq/jevbox. As one markdown file: README.md.

Jevbox

A full stack, permission-aware document library. Browse with Extend UI Finder, inspect document trees and parsed output, share with organization members, search the hierarchy with JEV, and ask source-grounded questions through the AI SDK.

Deploy to Render

Render setup requirements: prepare the shared environment group, private S3 bucket, and SMTP credentials before deploying.

See it in action

Chat, with the evidence beside you

Ask questions across your library, follow inline citations, and preview the original source without leaving the conversation.

Jevbox chat with cited answers, attached documents, and an original-source preview

A Finder in three dimensions

Explore folders and documents in a spatial library, then move closer to reveal their structure.

Jevbox's 3D Finder displaying a spatial library of documents in dark mode

Your library, your view

Switch between visual browsing, a compact outline, folder columns, and full-page previews.

Grid List
Grid view with document covers and folders List view with nested folders and document metadata
Columns Gallery
Columns view with a folder hierarchy and document preview Gallery view with a large document preview and thumbnail strip

Captured from the app using a demo workspace.

Run locally

Requires Node 24.6+, pnpm 10.15.1, and a running Docker engine with Compose.

For the first run, from the repository root:

pnpm install
pnpm setup:local
pnpm services:up
pnpm dev

pnpm setup:local creates .env and a stable encryption key. pnpm services:up starts PostgreSQL and SpiceDB in Docker and waits for both to be ready. pnpm dev then starts the app server, Vite frontend, and pg-boss consumers in your terminal. pnpm dev does not start PostgreSQL or SpiceDB. Keep that terminal open while using the app.

On later days, start Docker and run pnpm services:up followed by pnpm dev. Open http://localhost:4310, create an organization, and configure Settings → Connections:

Keys are encrypted on the server and never sent back to the browser. Leave a key blank to retain it, or use Clear on save. Configure additional provider options through the encrypted advanced JSON field.

pnpm test
pnpm build
pnpm start

Alternatively, run the complete app and its services in Docker after pnpm setup:local:

docker compose up --build

PostgreSQL stores accounts, sessions, document metadata, parsed output, and chats. Production uses private S3 storage for original files and thumbnails; local development defaults to PostgreSQL bytes. See file storage for Render variables, Kubernetes settings, and migration. A local SpiceDB container evaluates permissions and persists its relationships in a separate PostgreSQL database. Compose binds PostgreSQL and SpiceDB to loopback ports 55432 and 58443. The Compose passwords are for local development only.

pnpm services:stop stops the two services without deleting their volume. Never run docker compose down -v unless you intend to erase the databases. SQLite is no longer used; this change starts with a fresh database.

Capabilities

Queued messages survive navigation, reloads, and server restarts. Accepted generations continue through browser disconnects and window closes, and reopening chat restores saved progress. MCP search and answer tools return durable run handles recoverable through get_run or list_runs; answers also appear in web chat. See durable MCP work. Stopped or failed turns pause the queue until retried or removed. Send now moves the chosen message ahead of waiting or paused turns, after any answer already running. pg-boss recovers interrupted delivery; an answer interrupted after generation starts requires explicit retry to avoid silently repeating a model request. Branches copy history through the selected message and retain the same source permission checks.

Background jobs

pg-boss jobs handle indexing, filing, upload-driven reviews, chat, MCP search, authentication email, and permission cleanup in PostgreSQL. Production runs the web service with pnpm start and a separate background service with pnpm worker, using the same image and shared configuration. Local pnpm dev embeds consumers for convenience; do not also start pnpm dev:worker unless you are testing multiple consumers. Docker Compose starts both services.

Providers

Native chat adapters: OpenAI, Anthropic, Google Gemini, Azure OpenAI, Amazon Bedrock, Google Vertex, Anthropic on AWS, Mistral, Groq, DeepSeek, xAI, Cohere, Together AI, Fireworks, DeepInfra, Cerebras, Perplexity, Alibaba, Baseten, MiniMax, Moonshot AI, Z.AI, and Hugging Face.

AI Gateway offers its model catalog; OpenAI-compatible endpoints support additional services. Any further AI SDK language provider can be installed through the server extension registry. See provider configuration. Speech/image-only providers are not chat models.

Deploy

The Deploy to Render button opens Render's Blueprint setup directly for this repository's render.yaml. After completing the Render setup requirements, review and approve the three paid services (web, worker, and SpiceDB) and two PostgreSQL databases. Render prompts for the signup setting and generates the bootstrap and SpiceDB tokens. The Blueprint enables automatic service deploys from main after CI passes.

Deployment guide includes Docker, cloud-neutral Helm, and AWS/EKS Terraform. Deployment requires an explicit target account, region, namespace, image, domain, and secret.

The Helm chart runs one web replica, a separate pg-boss worker Deployment, and a private SpiceDB container. Supply two dedicated PostgreSQL databases, a private S3 bucket, and credentials through a Kubernetes Secret or an EKS IAM role. The app has no persistent filesystem requirement. Permission updates publish complete versioned relationship snapshots before committing metadata; unavailable SpiceDB fails closed. Workers can scale independently. The current snapshot rebuild and in-process API rate limiting keep the web service at a single replica.

Security and verification

Authenticated browser, REST, and MCP requests share a per-user safeguard of 100,000 reads and 100,000 writes per minute, far above normal UI activity. Uploads allow 10,000 attempts per minute and 100,000 per hour per user. There are no shared organization or deployment quotas, no document-count, storage, daily-byte, or processing-queue quotas, and no default upload request-count cap. Incoming bodies wait within a 512 MiB memory budget instead of receiving a busy rejection. Sign-in and account recovery retain separate protections. See deployment configuration for defaults and overrides.

The core schema uses a consolidated initial migration, followed by numbered migrations for durable filing and upload-driven review jobs. There is no production upgrade path from earlier development migration histories. Existing development documents must be reindexed to create the new passage index; retry indexing to rebuild the passage index. Automatic filing applies to new uploads, explicit filing retries, and related documents previously filed automatically. Existing documents are not moved on startup.

Read security boundaries before deploying. Automated integration tests exercise real HTTP routes and an isolated PostgreSQL schema and the real local SpiceDB service; third-party providers use controlled responses. Real parsing and model acceptance require your keys and must be checked in your own organization.

For an isolated browser verification environment with synthetic content and provider responses:

pnpm fixture

This runs on port 4311, creates an isolated PostgreSQL schema, and prints its local test login. It uses synthetic provider responses and does not contact external providers. Do not expose this verification server publicly.

UI sources are vendored so this repository builds without sibling checkouts. See third-party notices.

Email/password sign-in uses Better Auth and requires email verification. Local invitation, verification, and password-reset emails appear in Mailpit after pnpm services:up. Run pnpm setup:local to generate the stable local auth secret. Deployed environments require SMTP settings and BETTER_AUTH_SECRET; see the deployment guide. Existing accounts keep their IDs and passwords, but must verify their email and sign in again after migration.

Contributing

We are not planning to take PRs on this repo, it is more to serve as a starting point/template for a system you can fork and make your own. We encourage you to deploy it in your own infra. If you see a bug or issue though, we would greatly appreciate you filing it on the Issues. Thank you!

jevbox (extend-hq/jevbox)

Searching Database…

729 ·GitHub
这是什么?Jevbox 是一个可自行托管的全栈、权限感知的文档库,带有空间化文件浏览器、组织范围共享、层级搜索,以及基于你文档内容、有据可依的 AI 对话。
这是托管服务,还是我自己运行的东西?它是一个自托管的全栈 Web 应用(Node 服务器、Vite 前端、PostgreSQL、SpiceDB),可以用 Docker Compose 在本地运行,或通过 Terraform 部署到 Render、Kubernetes/Helm 或 AWS/EKS。
怎么让它跑起来?运行 'pnpm setup:local' 创建 .env 和加密密钥,运行 'pnpm services:up' 在 Docker 中启动 PostgreSQL 和 SpiceDB,然后运行 'pnpm dev' 启动应用服务器、Vite 前端和 pg-boss 消费者;使用应用期间请保持该终端开启。
运行之前需要装好什么?你需要 Node 24.6+、pnpm 10.15.1,以及一个运行中且带 Compose 的 Docker 引擎;生产环境还需要一个私有 S3 存储桶和 SMTP 凭据。
不做额外配置,搜索和对话能用吗?搜索和文档问答特别需要为束式搜索配置 TypeSafe API 连接;没有关键字或嵌入向量的降级方案,所以缺了这个密钥,这些功能就完全无法使用。
如果自行托管,我的供应商 API 密钥安全吗?连接密钥(Extend、TypeSafe、对话供应商)都在服务器端加密,绝不会回传给浏览器。
Jevbox 里的 JEV 是什么?JEV 是经过权限过滤的层级束式搜索引擎:它搜索分类、文档和章节,为段落的有用程度打分,并在早期证据薄弱时扩大探索范围。
Extend UI Finder 到底能让我做什么?它是一个空间化的三维文件浏览器,你可以靠近文件夹以展开其结构,并在网格、列表、分栏和画廊视图之间切换查看你的文档库。
可以用哪些 AI 对话供应商来生成回答?原生适配器覆盖 OpenAI、Anthropic、Google Gemini、Azure OpenAI、Amazon Bedrock、Google Vertex、Mistral、Groq、DeepSeek、xAI、Cohere 等多家,还可以通过服务器扩展注册表接入任何 AI SDK 供应商。
新上传的文档是如何自动归档的?文档上传时,JEV 会遍历现有的文件夹树,把不确定的文档保留在合适的父级中,只在需要时才提议并验证新分支;管理员可以关闭此功能,或选择一个更便宜的命名模型。
Creator
extend-hq
Size
2.4 MB
Stars
729
Updated
CommitOct 07
Age
18d
Commits · 90 Days