A testimonial wall for one site is a form, a moderation queue and a script tag that draws cards, and an agent can write all of that in one sitting with the videos kept on your own disk. What Senja adds is reach and finish: imports from review sites such as Google, G2 and Trustpilot, in-browser video recording, and widgets you can place on Webflow or other builders without code. If you collect a handful of quotes a month, the free plan's 15 testimonials may already be enough.
Before you buildSenja Free keeps unlimited widgets and walls with 15 testimonials. If you have fewer, you may not need to pay.
Build me a testimonial collector and wall to replace Senja. Requirements: - Node.js 22 + TypeScript: a Fastify server with server-rendered pages (Eta) and a little vanilla JS. `npm start` serves http://localhost:4700: admin at /admin, forms at /t/<form-slug>. - Storage: better-sqlite3 in ./data/proof.db (forms, testimonials, walls). Uploaded photos and videos go to ./data/uploads/ under random file names, never the names the sender chose. - Collection form: name, role or company, 1-5 stars, a text box, an optional photo (JPEG or PNG, 2 MB) and an optional video (MP4, WebM or MOV, 100 MB) via `@fastify/multipart` with hard limits. A hidden honeypot field, `@fastify/rate-limit` (5 submissions per IP per hour) and a consent checkbox whose answer is stored with the testimonial. - Moderation: /admin behind one password in .env (signed cookie). New items arrive as "pending"; approve, reject, edit the text, add tags, mark as featured or delete. CSV import (name, text, rating, date, source) and a CSV export of everything. - Wall: /w/<wall-slug> lists approved testimonials, featured first, with a tag filter. - Widget: /embed.js reads data-wall, data-layout (grid, list or single) and data-max from its own script tag, fetches /api/walls/<slug>.json and draws the cards inside a Shadow DOM so the host site's CSS cannot leak in. The JSON endpoint only answers origins listed in ALLOWED_ORIGINS (.env). - Escape every submitted string wherever it is rendered; videos play in <video controls>. - Optional SMTP notice (nodemailer, settings in .env) for each new submission. - Single user. No accounts, no telemetry, local-first. Outbound calls: your SMTP server only. - Out of scope: imports from Google, G2 or Trustpilot, video editing, AI tagging, payments. - README: exposing the server through a tunnel or a VPS with HTTPS, the script tag to paste into a site, where ./data lives for backups, and a warning that phone videos run tens of MB each.
Opens your agent with the prompt filled in, you press enter. Or copy it and paste it into an empty folder.
The first prompt builds the core. Run these one at a time in the same folder to grow it into your own Senja.
Add invitations to the testimonial app in this folder. Requirements: - Paste or upload a CSV of name and email; create one invite per row with a random token and a link /t/<form-slug>?i=<token> that pre-fills the name. - Send the email through the existing SMTP settings with a subject and body from a template in the admin; cap sending at 1 message per second. - Mark an invite as answered when a submission carries its token; a token works once. - An admin page lists invites with sent, opened-link and answered states, and a button to remind only the ones who have not answered. - Update the README.
Add video processing to the testimonial app in this folder. Requirements: - After a video upload, run `ffmpeg` (check it exists at start-up and say how to install it if not) to make a 720p H.264 MP4 and a JPEG poster frame at 1 second. - Process one video at a time in a queue stored in SQLite; show "processing" in the admin and use the poster on walls until it is ready. - Keep the original for 7 days, then delete it. - Reject videos longer than 3 minutes after probing with `ffprobe`. - Update the README with the ffmpeg install step.
Add a Senja importer to the testimonial app in this folder. Requirements: - Read SENJA_API_KEY from .env. Page through GET /testimonials on the Senja REST API with the key as a Bearer token and create a testimonial for each, keeping text, rating, name, date and tags. - Download images and videos into ./data/uploads/ before saving the rows. - Imported items arrive as approved; record the Senja id so a second run skips duplicates. - Print a summary of what was copied and what was skipped. - Update the README with where the API key is found (Automate in the Senja dashboard).
Add notifications to the testimonial app in this folder. Requirements: - WEBHOOK_URL in .env: POST a JSON message (name, stars, first 200 characters) for each new pending testimonial; works with a Slack or Discord incoming webhook. - Every Monday at 08:00 server time, send one email through the existing SMTP settings listing last week's new, approved and rejected counts and any pending items. - Retry a failed webhook 3 times with a growing delay and log failures to a file. - Update the README.
Founders and freelancers use it so social proof stops being a design chore: send one link, collect text or video, pull in reviews that already exist elsewhere, and paste a widget into a site without a developer. The paid plans lift the 15-testimonial ceiling, after which new submissions are collected but kept hidden.
Estimate · Runs on a free tunnel or a $5 VPS. Video uploads are the only thing that grows, at tens of MB each. The build is token usage on your agent plan.
| Plan | Monthly | Annual, per month | What you get |
|---|---|---|---|
| Free | $0/workspace | $0/workspace | 15 testimonials, unlimited widgets and Walls of Love. The pricing page doesn't list form, project or seat counts for Free. |
| Starter | $29/workspace | $24.17/workspace | Unlimited testimonials, 3 forms, 1 project, 2 seats. |
| Pro | $59/workspace | $49.17/workspace | Unlimited testimonials and forms, 5 projects, 5 seats. |
Free keeps 15 testimonials, with unlimited widgets and Walls of Love.
Yes. An AI coding agent such as Claude Code, Codex or Cursor can build a usable personal version in one session with the prompt on this page, running on your own machine.
About $29 a month on the Starter plan, $348 a year (checked 2026-10-14).
Automatic imports from Google, G2, Trustpilot, Product Hunt and other review sites; Ready-made widget layouts and a Webflow-friendly embed; The Chrome extension that copies a testimonial as an image or downloads its video; Zapier, webhook and Slack automations around new testimonials; Hosted video storage, so the files are not your disk's problem. If any of those matter to you, keep paying.
Yes: Strong Testimonials (free), testimonials (Rails engine) (open source).