Skip to main content

Case study · SaaS / Marketing

PraiseboardCollect video and text testimonials with one link and embed them anywhere

Praiseboard is a testimonial web app built by DanixSoft: customers leave a text or video testimonial from one link without an account, the business approves the best in an inbox, and an embeddable wall shows only approved testimonials that were given with consent.

Collection links, in-browser video recording, a moderation inbox, and embeddable walls in masonry, grid or carousel layouts, for agencies, freelancers, coaches and small businesses.

What problem does Praiseboard solve?

Businesses collect praise in screenshots, emails and DMs, cannot easily get video testimonials, and have no clean way to show them on their site with a record that each person agreed to be quoted.

How does Praiseboard work?

A public collection page records text or video in the browser and stores the exact consent wording and time with each testimonial. Public walls read through a database function that returns only approved, consented items without emails, and media stays private in storage unless its testimonial is approved.

What we built

  • Collection links with text or video, time limits, daily caps and a thank-you message
  • Video recorded in the browser or uploaded, photos and star ratings
  • A moderation inbox with keyboard shortcuts, tags, favourites and undo
  • Import of existing text testimonials by pasting
  • Walls in masonry, grid or carousel with light and dark themes, embedded with one script tag or an iframe

What is Praiseboard built with?

Application
Next.js 16 (App Router, Server Actions), React 19, TypeScript, Tailwind CSS v4
Data
Supabase Postgres with row-level security, Auth and Storage
Quality
Vitest unit tests and a database rules and isolation check script

Engineering challenges

  • Consent wording and time stored with every testimonial; a giver's words cannot be edited
  • Storage policies that make media readable only while its testimonial is approved
  • Public walls served only through a security-definer function that never returns emails
  • Embeds framed from the product's own domain, with every other route refusing to be framed

Next step

Have a similar problem to solve?

A free 30-minute discovery call, then a written scope and a fixed-price quote — before you commit to anything.