How riddhimaan-senapati/recuvia works
Recuvia helps people report found belongings and search for lost items using text or images, then review similarity-ranked matches. Its main workflow embeds a query with CLIP, searches item vectors in Supabase, and displays matching item details; clicking an item can launch a similar-item search. Reporting requires authentication and stores an image plus item metadata and its embedding. The README documents Google OAuth, adjustable thresholds/result counts, and deletion. Some page-to-component wiring and database implementation details were not sampled, so those connections are shown only where documented or evidenced.
Main entry points: supabase.ts Vector data helpers · useSearch.ts Search actions · upload/route.ts Upload route · text/route.ts Text search route
Components 23
User experience
- Landing page
frontend/app/page.tsx - Search dashboard
frontend/app/main/page.tsx - Search panel
frontend/components/SearchPanel.tsx - Match results
frontend/components/ResultsGrid.tsx - Search actions
frontend/hooks/useSearch.ts - Found item form
frontend/components/UploadForm.tsx - Upload actions
frontend/hooks/useUpload.ts
API workflows
- Text search route
frontend/app/api/search/text/route.ts - Image search route
frontend/app/api/search/image/route.ts - Upload route
frontend/app/api/upload/route.ts - Delete route
frontend/app/api/delete/route.ts
Embedding and data
- CLIP embeddings
frontend/app/utils/embeddings.ts - Vector data helpers
frontend/app/utils/supabase.ts - Supabase clients
frontend/app/utils/supabase-server.ts
Identity
- Sign-in and signup
frontend/app/auth - Auth form
frontend/components/AuthShell.tsx - Session context
frontend/contexts/AuthContext.tsx - OAuth callback
frontend/app/auth/callback/page.tsx
Other components
- Visitor
- CLIP model
- Supabase Postgres
- Supabase Storage
- Supabase Auth
Connections 31
- Visitor → Landing page: opens
- Landing page → Search dashboard: navigates
- Search dashboard → Search panel: renders
- Search panel → Search actions: uses
- Search actions → Text search route: posts query
- Search actions → Image search route: posts image
- Text search route → CLIP embeddings: embeds text
- Image search route → CLIP embeddings: embeds image
- CLIP embeddings → CLIP model: runs inference
- Text search route → Vector data helpers: searches vector
- Image search route → Vector data helpers: searches vector
- Vector data helpers → Supabase Postgres: queries matches
- Text search route → Match results: returns matches
- Image search route → Match results: returns matches
- Search actions → Text search route: posts similar query
- Search dashboard → Found item form: renders
- Found item form → Upload actions: uses
- Upload actions → Upload route: posts item
- Upload route → Supabase clients: creates session client
- Upload route → Supabase Storage: stores image
- Upload route → CLIP embeddings: embeds image
- Upload route → Vector data helpers: inserts item
- Vector data helpers → Supabase Postgres: writes item
- Search actions → Delete route: requests deletion
- Delete route → Vector data helpers: deletes item
- Delete route → Supabase Storage: deletes image
- Visitor → Sign-in and signup: opens account
- Sign-in and signup → Auth form: renders form
- Session context → Supabase Auth: checks session
- Sign-in and signup → Supabase Auth: authenticates
- OAuth callback → Supabase Auth: completes OAuth