← All projects

OnTract Contract Management System

A team-built contract intelligence platform for small and mid-sized businesses: it summarizes contracts, extracts key clauses, and lets users ask questions about their documents in chat. Built with Next.js, Supabase, OpenAI, LangChain, ChromaDB, and LangSmith.

Stack
  • Next.js
  • Supabase
  • OpenAI
  • LangChain
  • ChromaDB
  • LangSmith
  • Stripe
  • Resend
Role
Member of a seven-person team.
Links
Private repository. Live app

Screenshot

The OnTract landing page: the product name, the line 'Contract management built for modern teams', a Go to Dashboard button, and a Pricing, Compliance, Solutions navigation bar.
The OnTract landing page. The figures and company names on it are the app's own placeholder marketing copy, not results.

Purpose

Contract-analysis tools tend to be built and priced for enterprise legal teams. OnTract aims to give smaller businesses similar summarization, clause extraction, and document search at a lower cost, so they do not have to review every agreement by hand.

Team-level description based on a teammate's public case study of the project.

Team

Seven people built the platform: the Next.js front end, the Supabase backend (authentication, database, storage, edge functions), the AI pipeline for summarization, clause extraction, and chat, and the billing, tracing, and email integrations.

Technical architecture

  • Core. A Next.js front end on Supabase (authentication, Postgres, storage) and Supabase edge functions. Only Supabase is required to run the core app.
  • AI processing. Edge functions call OpenAI to summarize contracts and extract key clauses when a document is ingested. LangChain and ChromaDB provide semantic search and multi-turn chat over ingested contracts, and answers point back to the source excerpt.
  • Observability. LangSmith traces LLM calls, so a wrong answer can be traced to retrieval, the prompt, or the model.
  • Other integrations. Stripe for subscription billing and Resend for team and client invitation emails. These are optional and only switch on when their keys are configured.

Sources: the team's local setup guide and a teammate's public case study.

SUPABASENext.jsfront endAuth · PostgresstorageEdge functionsOpenAIsummaries, key clausesLangChain + ChromaDBsearch, multi-turn chatLangSmithtraces LLM callsStripebillingResendinvitesDashed: optional integrations and tracing
Components as described in the setup guide. Dashed boxes are optional integrations or tracing.

Technical decisions

  • Chunking on clause boundaries rather than fixed sizes, so a clause stays together with its key figures.
  • ChromaDB over a managed vector service to avoid recurring hosting cost while demand was being validated, with the retrieval layer kept swappable.
  • Optional-by-default integrations, so a new teammate can run the app locally with only Supabase.

Team decisions, as described in a teammate's public case study.

Known limitations

As the team has noted, pre-launch evaluation relied on manual spot-checks rather than a repeatable test set, and pipeline latency was not formally measured. Scanned PDFs without clean OCR give weaker summaries.