Skip to main content

System overview

This page explains ContentsVision in plain language. No code required. If you only read one architecture page, read this one.

The problem it solves

When a home or business suffers a loss (fire, flood, tornado, theft), an insurance claim needs a contents inventory: a line-by-line list of the damaged personal property, with each item's condition, age, brand, quantity, and a photo. Building that list by hand from a walkthrough is slow and tedious.

ContentsVision automates the first 80% of that work. A field specialist records the property once. The AI produces a draft inventory. A human reviews it and sends it to the claim.

The three ways to capture a property

ContentsVision accepts three kinds of input, and each has its own tuned pipeline:

VIDEO

Walkthrough video

A narrated walk through a room. The narration drives accuracy, the frames provide the visual record. Best for whole rooms.

PHOTO

Photo batches

Individual photos of items. The user groups photos of the same item before the AI runs, so duplicates are not guessed.

AUDIO

Voice memo

A spoken list of items (a voice memo or call recording). Transcribed, then read for items. No photos.

The big picture

ContentsVision is a classic two-tier web app (a Next.js frontend and a FastAPI backend) plus an AI processing pipeline that calls external AI services. It is deployed as a small set of Docker containers behind a reverse proxy and a Cloudflare Tunnel.

What each piece does:

PieceRole
Next.js frontendThe whole user interface: dashboard, claim and room pages, upload, review, settings, help. Talks to the backend over REST and Server-Sent Events.
FastAPI backendThe API, the AI pipeline orchestration, billing, auth, and the Adjust Square integration.
SQLite databaseAll structured data: claims, rooms, jobs, items, teams, users, activity. One file on disk.
Disk storageUploaded videos and photos, extracted frames, cropped item photos, and per-job logs.
Deepgram Nova-2Speech to text for video narration and audio uploads.
OpenRouter (Claude)The vision and analysis model that actually identifies items.
Adjust Square APIWhere finished claims and items are submitted.
AdjustSquare SSOThe single sign-on provider that issues the login tokens.
PostHogOptional product analytics: page views, session replay, and server-side events. Off unless a key is configured. See analytics.

How a piece of media becomes inventory

Every upload becomes a job, and every job runs the same shaped pipeline (the exact stages differ by media type, covered in detail in the AI pipeline):

The analyze stage is the expensive one. It runs many AI calls in parallel, and the user watches live progress stream into the UI while it works.

What makes it accurate

ContentsVision is not just "send frames to an AI." A few deliberate design choices drive the quality:

  • Narration is the source of truth for naming. If the specialist says "Samsung French-door refrigerator," that wins over what the camera alone can infer.
  • Time-chunking with overlap-aware dedup. Long videos are split into short time chunks analyzed in parallel, then near-boundary duplicates are merged so a couch seen by two chunks is not listed twice.
  • Photo grouping before AI. For photos, the user groups shots of the same item first, so the AI is told "these are one item" instead of guessing.
  • Human in the loop. Nothing is final until a person reviews and approves it. Low-confidence items are flagged automatically.
  • Contents-only. The AI is instructed to exclude structural parts of the building (walls, floors, built-in plumbing) and include movable property, cabinets, and appliances.

Who uses it, and how teams are isolated

Users sign in through AdjustSquare SSO. Every user belongs to a team, and all data (claims, rooms, items, spend) is scoped to that team. A user from one team can never see another team's claims. See authentication for the full flow.

Where to go next