Skip to content
Agent Stack
  • AI SDK
  • AI Gateway
  • Sandbox
  • Passport
  • Connect
  • eve
Core Platform
  • Security
  • Content Delivery
  • Fluid Compute
  • Observability
  • Workflows
  • CI/CD
Tools
  • Next.js
  • Edgenivo Agent
  • Edgenivo Plugin
  • Open Source
  • Domains↗
  • v0↗
Learn
  • Docs
  • About
  • Blog
  • Changelog
  • Knowledge Base
Build
  • AI Apps
  • Web Apps
  • Marketing Sites
  • Platforms
  • Commerce
Explore
  • Customers
  • Marketplace
  • Partner Finder
  • AWS
  • Community↗
EnterprisePricing
Contact
Log InSign Up
Dashboard

Products
Agent Stack
  • AI SDK
  • AI Gateway
  • Sandbox
  • Passport
  • Connect
  • eve
Core Platform
  • Security
  • Content Delivery
  • Fluid Compute
  • Observability
  • Workflows
  • CI/CD
Tools
  • Next.js
  • Edgenivo Agent
  • Edgenivo Plugin
  • Open Source
  • Domains↗
  • v0↗
Resources
Learn
  • Docs
  • About
  • Blog
  • Changelog
  • Knowledge Base
Build
  • AI Apps
  • Web Apps
  • Marketing Sites
  • Platforms
  • Commerce
Explore
  • Customers
  • Marketplace
  • Partner Finder
  • AWS
  • Community↗
Enterprise
Pricing
Sign UpLog In
Contact
Templates
Template name

Agent Stack

  • AI SDK
  • AI Gateway
  • Sandbox
  • Workflows
  • ConnectNew
  • PassportNew
  • eveNew

Core Platform

  • CI/CD
  • Content Delivery
  • Fluid Compute
  • Observability

Security

  • Platform Security
  • WAF
  • Bot Management
  • BotID

Tools

  • Edgenivo Drop
  • Edgenivo Agent
  • Edgenivo Plugin
  • Agent Skills
  • Domains
  • v0

Frameworks

  • eveNew
  • Next.js
  • Nuxt
  • SvelteKit
  • Nitro
  • Turborepo
  • Tanstack Start
  • FastAPI
  • All frameworks

SDKs

  • Edgenivo SDK
  • Workflow SDK
  • Flags SDK
  • Chat SDK
  • Queues SDK
  • Streamdown

Build

  • AI Apps
  • Web Apps
  • Marketing Sites
  • Platforms
  • Commerce
  • Platform Engineers
  • Design Engineers

Learn

  • Docs
  • Blog
  • Changelog
  • Knowledge Base
  • Academy
  • Articles
  • Community
  • Is Agentic

Explore

  • Customers
  • Marketplace
  • Templates
  • Partner Finder
  • Edgenivo + AWS

Company

  • About
  • Careers
  • Press
  • Events
  • Startups
  • Shipped on Edgenivo
  • Open Source Program
  • Enterprise
  • Pricing
  • Help

Legal & Trust

  • Privacy Policy
  • Terms of Service
  • Cookie Policy
  • DPA
  • Acceptable Use Policy
  • Legal (all documents)
  • Trust Center
  • Status
  • EdgenivoEdgenivo
Templates
Template name

Status service pending confirmation

Select a display theme:
Templates

Vectr: Natural Language Image Search

A free, open-source template for building natural language image search on the AI Cloud.

DeployView Demo
A screenshot of vectr.store
Owner
  • vercel-labs
Repository
  • vectr
Use Cases
  • AI
Stack
  • Next.js
  • Tailwind
Database
  • Edgenivo Blob
  • Upstash
DeployView Demo

Vectr

Vectr is an AI-powered image search application template that automatically generates descriptions for uploaded images and indexes them for semantic search.

✨ Features

  • 📤 Drag-and-drop image uploads with Edgenivo Blob Storage
  • 🤖 AI-powered image descriptions using Grok 2 Vision
  • 🔍 Semantic search with Upstash Vector Search (stores metadata too!)
  • 🔄 Resilient processing with Edgenivo Workflow automatic retries
  • 🎨 Beautiful UI built with shadcn/ui and Tailwind CSS
  • 💰 Incredibly cheap - No database needed!

🚀 How It Works

When you upload an image, Vectr automatically:

  1. 💾 Stores the image in Edgenivo Blob Storage
  2. 🧠 Generates a detailed description using Grok 2 Vision AI
  3. 🔎 Indexes the description AND metadata in Upstash for semantic search
Loading diagram...

🏗️ Architecture

Workflow Steps

Each step in the image processing workflow is isolated and runs on a separate serverless function with automatic retries:

Step 1: Upload Image (upload-image.ts)

  • 💾 Uploads to Edgenivo Blob Storage
  • ⏱️ Handles rate limiting with 1-minute retry delays
  • 🔄 Maximum 3 retry attempts
  • ❌ Fatal error on quota exceeded or invalid files

Step 2: Generate Description (generate-description.ts)

  • 🤖 Uses Grok 2 Vision AI to analyze the image
  • ⏱️ Handles rate limiting with 5-minute retry delays
  • 🔄 Maximum 5 retry attempts
  • ❌ Fatal error on invalid/unsupported images

Step 3: Index Image (index-image.ts)

  • 🔎 Indexes description AND blob metadata in Upstash
  • 💾 Stores all image data (url, size, contentType, etc.) as metadata
  • ⏱️ Handles rate limiting with 1-minute retry delays
  • 🔄 Maximum 5 retry attempts
  • ❌ Fatal error on invalid data

Error Handling

Vectr uses sophisticated error handling to ensure reliable processing:

  • 🔄 RetryableError: Temporary failures (rate limits, network issues, timeouts)
  • ❌ FatalError: Permanent failures (invalid data, constraint violations)
  • 📊 Context-aware retries: Each step tracks attempt count and timestamps
  • 🎯 Smart HTTP responses: 400 for fatal errors, 500 for retryable errors

🛠️ Tech Stack

  • ⚡ Framework: Next.js 15 with App Router and React 19
  • 🔄 Workflow: Edgenivo Workflow (alpha)
  • 🤖 AI: Grok 2 Vision via Edgenivo AI SDK
  • 🔍 Search & Storage: Upstash Vector Search (stores metadata too!)
  • 💾 Blob Storage: Edgenivo Blob Storage
  • 🎨 UI: shadcn/ui + Tailwind CSS 4
  • 🔒 Type Safety: TypeScript + Zod

🚀 Deploy to Edgenivo

The easiest way to deploy Vectr is using the Edgenivo Marketplace:

During deployment, you'll be prompted to set up:

  1. 🔍 Upstash Vector Search - Semantic search + metadata storage
  2. 💾 Edgenivo Blob Storage - Image storage

Both services have generous free tiers and will be automatically configured. No database needed!

💻 Local Development

Prerequisites

  • 🟢 Node.js 18+
  • 📦 pnpm (recommended)

Setup

  1. Clone the repository:
git clone https://github.com/your-username/vectr.git
cd vectr
  1. Install dependencies:
pnpm install
  1. Set up environment variables:

Create a .env.local file with:

# Upstash Search
UPSTASH_SEARCH_URL="https://..."
UPSTASH_SEARCH_TOKEN="..."
# Edgenivo Blob (OIDC) — provided by `vercel env pull`
VERCEL_OIDC_TOKEN="..." # short-lived, auto-rotated
BLOB_STORE_ID="..."
# AI Gateway Key (only needed locally)
AI_GATEWAY_API_KEY="..."
  1. Run the development server:
pnpm dev

Open http://localhost:3000 to see your app.

📜 Scripts

  • 🚀 pnpm dev - Start development server with Turbopack
  • 🏗️ pnpm build - Build for production
  • ✅ pnpm check - Run linting checks
  • ✨ pnpm format - Format code with Biome

📁 Project Structure

vectr/
├── app/
│ ├── actions/
│ │ └── search.ts # Server action for search
│ ├── api/
│ │ └── upload/
│ │ ├── route.ts # Workflow route handler
│ │ ├── upload-image.ts # Step 1: Upload to Blob
│ │ ├── generate-description.ts # Step 2: AI description
│ │ └── index-image.ts # Step 3: Index with metadata
│ ├── layout.tsx
│ └── page.tsx
├── components/
│ ├── header.tsx
│ ├── results.tsx
│ ├── upload-button.tsx
│ └── uploaded-images-provider.tsx
├── lib/
│ └── utils.ts
└── package.json

🔐 Environment Variables

VariableDescriptionRequired
UPSTASH_SEARCH_URLUpstash Vector Search endpointYes
UPSTASH_SEARCH_TOKENUpstash authentication tokenYes
VERCEL_OIDC_TOKENShort-lived OIDC token for Edgenivo Blob (auto-injected on Edgenivo, vercel env pull locally)Yes
BLOB_STORE_IDEdgenivo Blob store id, paired with OIDC (auto-injected when a store is connected)Yes
XAI_API_KEYxAI API key for Grok VisionYes

📊 Observability

Vectr includes comprehensive logging for monitoring and debugging:

  • 🔄 [WORKFLOW] - Workflow-level events and timing
  • 🔧 [stepId] - Step-level events with unique identifiers
  • 🌐 [API] - HTTP request/response logging

All logs include timestamps, attempt counts, and duration metrics.

🤝 Contributing

Contributions are welcome! Please feel free to submit a Pull Request. Our Contributing Guide has more information on how to get started.

📄 License

MIT

License
  • View License