Vibecode Senja

track this build6 phases, 14 steps, beginner friendly
YES · one-shottable
price $29/moyou'd save $348/yrbuild time one sittingcategory 💬 testimonialsreplaced by 0 people

A form, an embed widget, and a wall page. $300/yr for what is essentially a guestbook.

the project pack5 files · written for this build, step by step
README.md
# Senja · indie build

Testimonial collection you own: a public submit page, avatars resized safely on your server, a moderation queue where nothing goes public until you approve it, a wall page, and an embeddable widget that renders the wall into any site without an iframe. No third-party hosting a page about you.

Estimated effort: **one sitting**. Work `BUILD_PLAN.md` top to bottom · every phase ends in a check that has to pass before the next one starts.

## Stack

| Part | Choice | Why |
| --- | --- | --- |
| Runtime | Node 22, node:http and node:sqlite | a submission is one INSERT; the wall is one SELECT |
| Images | sharp | the one dependency worth taking: resize, strip EXIF, reject fakes |
| Widget | One small vanilla-JS file, no iframe | inherits the host page's font and scopes its own styles |
| Hosting | A VPS behind Caddy | uploads need disk and the widget needs an HTTPS origin |

## Before you start

Have every one of these ready. The plan assumes them from step one.

- [ ] **Node.js 22 or newer** · free
  - Why: Everything in this build runs on it: the server, the scripts, the tests.
  - Get it: Download the LTS installer from nodejs.org, or install with your package manager (brew install node, or nvm install 22). Restart the terminal afterwards.
  - Verify: node --version prints v22 or higher
- [ ] **A terminal and a code editor** · free
  - Why: Every step below is a command you type or a file you edit.
  - Get it: VS Code (code.visualstudio.com), Cursor or Zed. Open a folder for the project and use the editor's built-in terminal.
  - Verify: You can open a folder and run a command in its terminal
- [ ] **Git** · free
  - Why: History for your code, and the way most hosts deploy.
  - Get it: Install from git-scm.com or with your package manager, then run git init in the project folder once it exists.
  - Verify: git --version prints a version
- [ ] **The site you will embed the wall into** · free
  - Why: Phase 5 is tested by rendering the widget on a different origin.
  - Get it: Your existing site, or a blank HTML page served locally on another port.
- [ ] **A random salt for hashing IPs** · free
  - Why: For rate limiting without storing addresses.
  - Get it: openssl rand -hex 32 into .env as IP_SALT.
- [ ] **A small always-on server (VPS)** (optional) · about $5 a month
  - Why: This needs one process running all the time with a public address. Uploaded avatars need disk that persists, and the widget needs an HTTPS origin.
  - Get it: Hetzner Cloud (from about 4 EUR), DigitalOcean or Fly.io. Ubuntu 24.04, the smallest size. You need SSH access and a public IP. Only needed for the deploy phase; develop locally first.
- [ ] **A domain or subdomain** (optional) · roughly $10 a year, or free on an existing domain
  - Why: A public address you own, so links you share never break when a provider changes.
  - Get it: Register at Cloudflare Registrar, Porkbun or Namecheap, or use a subdomain of one you already own. You add one DNS record in the deploy phase.
- [ ] **Caddy on the server** (optional) · free
  - Why: Automatic HTTPS in front of the Node process. Without TLS the browser features this relies on (and your visitors' trust) do not work.
  - Get it: On the VPS: follow the install steps at caddyserver.com/docs/install for Ubuntu. One Caddyfile with your domain and a reverse_proxy line is the whole config.
  - Verify: caddy version prints a version on the server

## Quick start

```sh
mkdir praise && cd praise && git init && npm init -y && npm pkg set type=module
npm install sharp@0.35.3
mkdir -p data/avatars && cp .env.example .env
```

Then copy `.env.example` to `.env` and fill in the values it documents.

## Honest limits

This build deliberately does not replace:

- In-browser video testimonials: permissions, encoding, storage and playback are genuinely hard and a real reason their price exists.
- Importing reviews from G2, Capterra or Google.
- Their widget template gallery.
- video testimonial recording in-browser
- imported reviews from other platforms
- their widget templates gallery
- a hosted collection URL that isn't yours

If one of those is essential to you, that is the reason to keep paying for Senja, and the README should say so rather than pretend.

$ choose a build depth, inspect the files, then open the complete pack in your agent

what you lose

xvideo testimonial recording in-browser

ximported reviews from other platforms

xtheir widget templates gallery

xa hosted collection URL that isn't yours

share on X ↗"I just replaced Senja ($29/mo) with one prompt"
the escape hatch

Don't feel like building it? These folks already made it free.

Real TestimonialsAnother WordPress route: forms, moderation, grids and sliders are free; video and the clever automation live upstairs.$0freeShosayUnlimited text, video and audio proof, imports, walls and 25-plus widgets; the bill is zero, the tiny Powered by pill is not.$0freeStrong TestimonialsA WordPress-only form, moderation queue, grid, slider and widget; simple enough once you already own the WordPress problem.$0free

all 3 free alternatives to Senja →· no votes, no pay-to-list · just what's real

the numbers

Senja pricing

planmonthlyannual (per mo)what you get
free$0/workspace$0/workspace15 testimonials for the lifetime of the account, 1 collection form, 1 project, 1 seat and 5 sizzle credits/month; unlimited widgets and walls.
starter$29/workspace$24.17/workspaceUnlimited testimonials, 3 forms, 1 project, 2 seats and 5 sizzle credits/month.
pro$59/workspace$49.17/workspaceUnlimited testimonials and forms, 5 projects, 5 seats and 5 sizzle credits/month.

free tier15 testimonials total for the lifetime of the account, 1 form, 1 project, 1 seat and 5 sizzle credits/month; unlimited widgets and walls.

billingmonthly + annual (2 months free); no traditional trial because the Free plan is permanent

hidden costsThe 15-testimonial free cap never resets, and deleting testimonials does not restore capacity; later submissions are collected but hidden. Pro charges $10/month per extra project and $5/month per extra seat.

verified 2026-08-11 · source ↗

questions
Is Senja free?

The free plan holds 15 testimonials with unlimited widgets and walls. Paid is the paid plan at $29/mo (checked 2026-08-07).

Vibecode Senja / Testimonial.to

Yes. A competent AI coding agent (Claude Code, Codex, Cursor) can build a usable personal Senja / Testimonial.to replacement in one session with the prompt on this page. It runs on your own machine or server with no subscription.

How much does Senja / Testimonial.to cost?

Senja / Testimonial.to costs about $29/month (paid plan, checked 2026-08-07), which is $348 per year. That's what you save by replacing it with one prompt.

What do I lose by replacing Senja / Testimonial.to?

Honestly: video testimonial recording in-browser; imported reviews from other platforms; their widget templates gallery; a hosted collection URL that isn't yours. If any of those are load-bearing for you, keep paying.

Is there an open-source alternative to Senja / Testimonial.to?

Yes: Real Testimonials (Another WordPress route: forms, moderation, grids and sliders are free; video and the clever automation live upstairs.) Shosay (Unlimited text, video and audio proof, imports, walls and 25-plus widgets; the bill is zero, the tiny Powered by pill is not.) Strong Testimonials (A WordPress-only form, moderation queue, grid, slider and widget; simple enough once you already own the WordPress problem.) All 3 curated free alternatives are at vibecodeit.com/testimonial-to/alternatives. The prompt is for when you want it exactly your way.