**Vaessl: Product and technical vision**

# Product vision
Vaessl is an AI-powered bridge designed to connect physical reality to digital management systems. It functions as an intelligent intermediary that performs image analysis and semantic search, enriching raw data before "serving" it to a primary application via REST API.

# Technical requirements & stack

## Frontend
- Framework: Vite (React)

- Styling: Tailwind CSS + SCSS

- Core Task: Provide a streamlined interface for capturing or uploading photos (single or multi-item) and a dedicated UI for reviewing AI-generated metadata.

## Backend
- Framework: Spring Boot

- AI Orchestration: Spring AI

- AI Gateway: LiteLLM (A proxy container that allows Vaessl to communicate with various LLM providers—such as Gemini, Claude, or local models—using a unified protocol).

- Core Task: Managing the lifecycle of an item from initial photo upload to final API export.

## Database
- System: PostgreSQL + pgvector (initial iteration)

- Role: Acts as the vector store for intelligent search and the engine for the image processing

# Functionality
## Intelligent search
Vaessl does not rely on exact word matching. Because it stores data in a vector-capable database, users can search via Natural Language Prompts.

Example: Searching for "tool to tighten a bolt" will return a "Wrench," even if the word "bolt" or "tighten" isn't in the item's title.

Process: The search prompt is converted into a vector by the AI, and Postgres performs a "Cosine Similarity" check to find the closest matches in the staging or history tables.

## Image processing workflow (Start to Finish)
The image processing is the heart of Vaessl's "bridge" functionality. It ensures data quality before it reaches your primary app.

- Ingestion: When a photo is uploaded, the raw image and its initial metadata are saved into a temporary staging table in Postgres.

- Analysis: Vaessl sends the image to the AI (via LiteLLM). The AI identifies the items and returns structured data (names, categories, coordinates).

- Expansion: The database creates individual records for every detected item, linking them to the original source photo. These records are marked with a STAGED status.

- Refinement: The user interacts with the UI to edit, delete, or confirm the AI's findings. At this point, Spring AI generates a vector embedding of the final description and stores it in the pgvector column for future searching.

- Execution: Once the user hits "Confirm," Vaessl maps the staged data to the target application's format (e.g., Homebox JSON) and pushes it via REST API.

- Cleanup: Upon successful export, the staged record is either archived or removed from the local database, keeping the bridge lean.

## Deployment
Vaessl is deployed via Docker Compose for high portability.

- Container 1: Vite (Web UI)
- Container 2: Spring Boot
- Container 3: PostgreSQL + pgvector
- Container 4: LiteLLM
