Frame-only Farcaster mini dApp with semantic search
Share this URL in Warpcast or any Farcaster client to use the Frame interface
ANTHROPIC_API_KEY=your_claude_api_key OPENAI_API_KEY=your_openai_api_key NEXT_PUBLIC_SUPABASE_URL=your_supabase_url SUPABASE_SERVICE_KEY=your_supabase_service_key NEXT_PUBLIC_BASE_URL=https://your-domain.vercel.app
Run this SQL in your Supabase SQL Editor:
-- Enable pgvector extension
CREATE EXTENSION IF NOT EXISTS vector;
-- Create images table
CREATE TABLE images (
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
url TEXT NOT NULL,
caption TEXT NOT NULL,
style_tags TEXT[] NOT NULL,
mood TEXT NOT NULL,
colors TEXT[] NOT NULL,
embedding VECTOR(3072) NOT NULL,
created_at TIMESTAMPTZ DEFAULT NOW(),
updated_at TIMESTAMPTZ DEFAULT NOW()
);
-- Create vector index for fast similarity search
CREATE INDEX ON images USING ivfflat (embedding vector_cosine_ops)
WITH (lists = 100);
-- Create RPC function for vector search
CREATE OR REPLACE FUNCTION match_images(
query_embedding VECTOR(3072),
match_threshold FLOAT,
match_count INT
)
RETURNS TABLE (
id UUID,
url TEXT,
caption TEXT,
style_tags TEXT[],
mood TEXT,
colors TEXT[],
created_at TIMESTAMPTZ,
updated_at TIMESTAMPTZ,
similarity FLOAT
)
LANGUAGE SQL STABLE
AS $$
SELECT
id,
url,
caption,
style_tags,
mood,
colors,
created_at,
updated_at,
1 - (embedding <=> query_embedding) AS similarity
FROM images
WHERE 1 - (embedding <=> query_embedding) > match_threshold
ORDER BY similarity DESC
LIMIT match_count;
$$;Use the Ingest tab above or call the API:
curl -X POST https://your-domain.com/api/ingest \
-H "Content-Type: application/json" \
-d '{"image_url": "https://example.com/image.jpg"}'Share the Frame URL in Warpcast to see it in action!