How zoxt/vouch works
Vouch collects customer testimonials, processes media asynchronously, then makes completed testimonials searchable and publishable as embeds. Owners use the authenticated dashboard for campaigns, requests, library search, embed management, and billing; customers submit anonymously through public links; site visitors view captioned walls and players. The README documents the worker pipeline and integrations, while sampled source confirms search, embedding, and embed rendering details. Some domain-service wiring is unsampled, so those links are omitted where ownership is unclear.
Main entry points: queues Job queues · index.ts HTTP API · App.tsx Dashboard · pages Public submission
Components 22
User surfaces
- Dashboard
frontend/src/App.tsx - Public submission
frontend/src/features/submission/pages
API and domain
- HTTP API
src/index.ts - Campaign management
src/controllers/campaign.controller.ts - Testimonial management
src/controllers/testimonial.controller.ts - Authentication
src/controllers/auth.controller.ts - Billing
src/controllers/subscription.controller.ts
Media processing
- Job queues
src/queues - Media validation
src/workers/media.worker.ts - Transcription and captions
src/workers/transcription.worker.ts - AI analysis
src/workers/ai.worker.ts - Embedding worker
src/workers/embedding.worker.ts - Video storage
src/config/s3.ts
Search and delivery
- Postgres and pgvector
src/config/prisma.ts - Embedding service
embedding-service/main.py - Semantic search
src/controllers/search.controller.ts - Server-rendered embeds
src/controllers/embed.controller.ts
Other components
- Business owner
- Testimonial customer
- Site visitor
- Paddle
- Groq AI services
Connections 30
- Business owner → Dashboard: manages
- Testimonial customer → Public submission: submits
- Site visitor → Server-rendered embeds: views
- Dashboard → HTTP API: calls API
- Public submission → HTTP API: confirms submission
- HTTP API → Campaign management: dispatches
- HTTP API → Testimonial management: dispatches
- HTTP API → Authentication: dispatches
- HTTP API → Billing: dispatches
- Campaign management → Video storage: issues upload URL
- Public submission → Video storage: uploads directly
- Campaign management → Job queues: enqueues processing
- Job queues → Media validation: dispatches jobs
- Media validation → Video storage: reads media
- Media validation → Job queues: queues transcription
- Job queues → Transcription and captions: dispatches jobs
- Transcription and captions → Groq AI services: transcribes
- Transcription and captions → Job queues: queues analysis
- Job queues → AI analysis: dispatches jobs
- AI analysis → Groq AI services: analyzes transcript
- AI analysis → Job queues: queues embedding
- Job queues → Embedding worker: dispatches jobs
- Embedding worker → Postgres and pgvector: reads transcript; writes vector
- Embedding worker → Embedding service: requests embedding
- Semantic search → Embedding service: embeds query
- Semantic search → Postgres and pgvector: queries vectors
- Dashboard → Semantic search: searches library
- Server-rendered embeds → Postgres and pgvector: reads embed data
- Server-rendered embeds → Site visitor: serves wall and player
- Billing → Paddle: verifies billing events