Testimonial 100x is a testimonials collection and showcase platform.
It lets you:
- create a “space” for a product/service
- collect text and/or video testimonials via a public link
- manage testimonials in an admin dashboard
- publish a “Wall of Love” (embeddable testimonial wall)
- optionally enrich testimonials with background analysis (spam/sentiment/transcription) via a worker
The repo contains:
web_app/: Next.js application (UI + server actions + API routes)processor/: background worker (Bun) consuming Redis messages for async processing
- PostgreSQL: Primary database for users, spaces, questions, and testimonials/feedback.
- Prisma: ORM + migrations for type-safe database access.
- NextAuth (Auth.js v5 beta): Dashboard authentication (Google OAuth) and session/JWT handling.
- MinIO (S3-compatible storage): Stores uploaded assets (logos, images, videos) and imported media in local/dev.
- Redis: Message queue for async processing between
web_appandprocessor. - OpenAI (optional): Used by
processorfor analysis/transcription (requiresOPENAI_API_KEY). - PostHog (optional): Analytics and metrics queries (requires PostHog env vars).
- Node.js (for
web_app/) - pnpm (recommended) or npm/yarn
- Docker + Docker Compose
- Bun (for
processor/) if you want to run background workers locally
From the repo root:
docker compose -f docker-compose.dev.yml up -dThis starts:
- Postgres on
localhost:5432 - MinIO on
localhost:9000(consolelocalhost:9001) - Redis on
localhost:6379
Copy the example env files and then update the values as needed:
cp web_app/.env.example web_app/.env
cp processor/.env.example processor/.envMake sure INTERNAL_API_KEY matches in both files (the processor calls web_app via /api/update_feedback).
This repo expects environment variables for:
-
Database
DATABASE_URL
-
Auth (Google OAuth)
GOOGLE_CLIENT_IDGOOGLE_CLIENT_SECRET
-
S3/MinIO
S3_ENDPOINTS3_PORTS3_USE_SSLS3_ACCESS_KEYS3_SECRET_KEYS3_BUCKETS3_PUBLIC_CUSTOM_DOMAIN(optional)S3_SSL(used to build public URLs)
-
Redis
REDIS_HOSTREDIS_PORTREDIS_PASSWORD(optional)REDIS_TEXT_CHANNEL(optional)REDIS_VIDEO_CHANNEL(optional)REDIS_TEXT_GROUP_ID(processor)REDIS_VIDEO_GROUP_ID(processor)
-
Social import (X/Twitter)
TWITTER_TOKEN
-
Analytics (PostHog)
NEXT_PUBLIC_POSTHOG_KEYNEXT_PUBLIC_POSTHOG_HOSTPOSTHOG_METRICS_QUERY_URLPOSTHOG_QUERY_TOKEN
-
Optional worker/AI
OPENAI_API_KEY
Notes:
- The concrete
.envfiles live insideweb_app/andprocessor/(they are gitignored). - Use
docker-compose.dev.ymldefaults for local MinIO/Redis/Postgres values.
cd web_app
pnpm install
pnpm prisma generate
pnpm prisma migrate dev
pnpm devApp will be available at http://localhost:3000.
In another terminal:
cd processor
bun install
bun run text_processor
# and/or
bun run video_processorThe worker consumes messages from Redis and performs async processing.