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…

727 ·GitHub
What is this?Jevbox is a full stack, permission-aware document library you self-host, with a spatial file browser, organization-wide sharing, hierarchical search, and source-grounded AI chat over your documents.
Is this a hosted service or something I run myself?It is a self-hosted full stack web app (Node server, Vite frontend, PostgreSQL, SpiceDB) that you run locally with Docker Compose or deploy to Render, Kubernetes/Helm, or AWS/EKS via Terraform.
How do I get it running?Run 'pnpm setup:local' to create a .env and encryption key, 'pnpm services:up' to start PostgreSQL and SpiceDB in Docker, then 'pnpm dev' to start the app server, Vite frontend, and pg-boss consumers; keep that terminal open while using the app.
What do I need installed before I can run it?You need Node 24.6+, pnpm 10.15.1, and a running Docker engine with Compose; production also needs a private S3 bucket and SMTP credentials.
Will search and chat work without extra setup?Search and document Q&A specifically require a TypeSafe API connection for the beam search; there is no keyword or embedding fallback, so without that key those features simply don't work.
Are my provider API keys safe if I self-host this?Connection keys (Extend, TypeSafe, chat providers) are encrypted on the server and never sent back to the browser.
What is JEV in Jevbox?JEV is the permission-filtered hierarchical beam search engine: it searches categories, documents, and sections, scores passage usefulness, and widens exploration when early evidence is weak.
What does the Extend UI Finder actually let me do?It is a spatial, three-dimensional file browser where you can move closer to folders to reveal structure, and switch between grid, list, column, and gallery views of your library.
Which AI chat providers can I use for answers?Native adapters cover OpenAI, Anthropic, Google Gemini, Azure OpenAI, Amazon Bedrock, Google Vertex, Mistral, Groq, DeepSeek, xAI, Cohere, and several more, plus any AI SDK provider via a server extension registry.
How does automatic filing of new uploads work?When a document is uploaded, JEV walks the existing folder tree, keeps uncertain documents in a suitable parent, and only proposes and validates new branches when needed; administrators can disable this or pick a cheaper naming model.
Creator
extend-hq
Size
2.4 MB
Stars
727
Updated
CommitOct 07
Age
17d
Commits · 90 Days