👏 Bravowall
Collect testimonials, moderate them, embed a Wall of Love anywhere — self-hosted.
Senja charges $19/month — $228 a year, forever — to display quotes your customers wrote for free. Bravowall covers the whole loop: hosted collection forms, a moderation queue, a wall-of-love embed that can't break your site, and PNG card exports for social. One-time $29, on your own box.
Bravowall, as it actually looks — a real screenshot, not a mockup.
Features
Collection forms
A hosted page per product at /collect/your-slug: name, company, photo upload, 1–5 stars, testimonial text, optional YouTube/Loom/Vimeo link, consent checkbox.
Moderation queue
Everything lands as pending. Approve, reject, feature, or fix typos before publishing — the original text is always kept.
Wall of Love embed
One script tag renders a masonry wall inside shadow DOM: your site's CSS can't break it, its styles never leak out. Theme, accent, max items via data attributes.
PNG card export
Turn any testimonial into a polished 1080×1080 or 1600×900 image card, rendered server-side with sharp — quote auto-sizing, stars, avatar, your accent color.
CSV import
Migrate from Senja or Testimonial.to exports in one upload, with per-row error reporting.
Snippets & counters
Copy-paste standalone HTML per testimonial, plus a count API for "loved by N customers" badges.
Spam protection
Honeypot field plus a 10-submissions-per-hour-per-IP rate limit on the public form.
100% yours
SQLite on disk, avatars on disk, no telemetry, no external services. Desktop app or $5 VPS via Docker.
Bravowall vs Senja
Senja at $19/mo runs roughly $228/year — $456 over two years. Bravowall is $29, once.
| Bravowall | Senja | |
|---|---|---|
| Price | $29 once | $19/mo Starter, $39/mo Pro ($228–468/yr) |
| Your data | SQLite file you own | Their cloud |
| Testimonials & spaces | Unlimited | Limited by plan |
| Wall embed | Shadow-DOM script tag | Script tag |
| Image cards | Server-side PNG export | Yes |
| CSV import | Yes — from Senja exports | No |
| Works offline / air-gapped | Yes (desktop mode) | No |
| Source code | MIT, on GitHub | Closed |
Senja Starter is $228/year. Bravowall pays for itself in about 6 weeks — then it's free, forever.
Three steps, no subscription
Buy once on Whop
One-time $29 for the packaged Windows installer plus priority support — no subscription, ever.
Run it your way
Desktop app for zero-server use, or docker compose up on a $5 VPS when the collection form needs to be public.
Collect, approve, embed
Share your /collect link, approve the good ones, and paste one script tag anywhere you want the wall.
Honest answers
Is it really free on GitHub?
Yes — the full source is MIT at github.com/bensblueprints/bravowall and always will be. The $29 buys the packaged installer, 1-click setup and updates instead of a terminal session.
Can visitors record video testimonials?
No — that's a deliberate non-goal, and it's Senja's genuine edge. Bravowall embeds video links (YouTube, Loom, Vimeo) instead of recording and hosting video itself. If in-form video recording is essential, Senja earns its fee there.
Will the embed break my site's styling?
It can't. The wall renders inside shadow DOM, so your CSS can't reach in and its styles can't leak out. Masonry layout is pure CSS columns — no layout JavaScript.
Can I migrate from Senja or Testimonial.to?
Yes. CSV import handles their export files in one upload, with per-row error reporting so nothing silently disappears.
Does it import posts from X or LinkedIn?
No — scraping social platforms violates their Terms of Service, so we skipped it on purpose. Paste-in and CSV import cover the same ground legitimately.
Deep-dive comparisons:
Own Bravowall forever
$29 once. Deploy on your own server — your data never leaves it. No renewal, no account with us, no meter. Or build it yourself from the MIT source — it's the same app.