npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

shapo-review-widgets

v1.0.3

Published

The easiest way to embed beautiful Shapo review widgets and testimonial forms into your website. Lightweight, and fully customizable.

Readme

🎉 Shapo Review Widgets

The easiest way to embed beautiful review widgets and testimonial forms into your website

npm version npm downloads License: MIT TypeScript

Get StartedExamplesHelp

🚀 What is Shapo?

Shapo is the leading testimonial and review management platform trusted by thousands of businesses to collect, manage, and showcase customer testimonials. Display beautiful review widgets, collect testimonials with custom forms, and build trust with social proof to boost conversions and sales.

Shapo Hero Image

✨ Features

  • Lightweight - Minimal bundle size, no heavy dependencies
  • 🎨 Fully Customizable - Style widgets to match your brand
  • 📱 Mobile Responsive - Works perfectly on all devices
  • 🔧 TypeScript Support - Full type definitions included
  • ⚛️ React Ready - Simple React components
  • 🌐 Framework Agnostic - Works with vanilla HTML too
  • 🎯 Multiple Widget Types - Grid, Carousel, Marquee, Floating, Badge, and more
  • 📝 Form Integration - Collect testimonials directly on your site

🚀 Quick Start

npm install shapo-review-widgets

React Component

import { ShapoWidget } from 'shapo-review-widgets';

function App() {
  return (
    <div>
      <ShapoWidget widgetId="abc123def456" />
    </div>
  );
}

HTML/Vanilla JavaScript

<div id="shapo-widget-abc123def456"></div>
<script id="shapo-embed-js" type="text/javascript" src="https://cdn.shapo.io/js/embed.js" defer></script>

That's it! 🎉

📖 Usage

React Component - Widget

import { ShapoWidget } from 'shapo-review-widgets';

function ProductPage() {
  return (
    <div>
      <h1>Customer Reviews</h1>
      <ShapoWidget widgetId="abc123def456" />
    </div>
  );
}

React Component - Form

import { ShapoForm } from 'shapo-review-widgets';

function ReviewForm() {
  return (
    <div>
      <h2>Leave a Review</h2>
      <ShapoForm formId="abc123def456" />
    </div>
  );
}

HTML/Manual Embedding

<!DOCTYPE html>
<html>
<head>
  <title>My Product Page</title>
</head>
<body>
  <h1>Customer Reviews</h1>
  
  <!-- Widget -->
  <div id="shapo-widget-abc123def456"></div>
  
  <!-- Form -->
  <div id="shapo-form-your-abc123def456"></div>
  
  <!-- Embed Script (only needed once per page) -->
  <script id="shapo-embed-js" type="text/javascript" src="https://cdn.shapo.io/js/embed.js" defer></script>
</body>
</html>

🎨 Widget Types

| Widget Type | Description | Use Case | |------------|-------------|----------| | Reviews Grid Widget | Display testimonials in a responsive grid layout | Product pages, landing pages | | Single Review Widget | Highlight a single testimonial | Featured reviews | | Reviews Carousel Widget | Rotating carousel of testimonials | Homepage hero sections | | Multi Carousel Review Widget | Multiple carousels on one page | Comparison pages | | Review Badge Widget | Rating badge with average score | Trust signals | | Reviews Marquee Widget | Continuous scrolling testimonials | Footer, sidebar | | Review List Widget | Vertical list of testimonials | Review pages | | Floating Review Toast | Floating popup notifications | Engagement boost |

Customize colors, fonts, layouts, and more through your Shapo Dashboard.

📚 API Reference

ShapoWidget Props

| Prop | Type | Required | Description | |------|------|----------|-------------| | widgetId | string | ✅ Yes | Your Shapo widget ID |

ShapoForm Props

| Prop | Type | Required | Description | |------|------|----------|-------------| | formId | string | ✅ Yes | Your Shapo form ID |

💡 Examples

Multiple Widgets on One Page

import { ShapoWidget, ShapoForm } from 'shapo-review-widgets';

function ProductPage() {
  return (
    <div>
      {/* Rating Badge */}
      <ShapoWidget widgetId="badge-widget-id" />
      
      {/* Review Grid */}
      <ShapoWidget widgetId="grid-widget-id" />
      
      {/* Review Form */}
      <ShapoForm formId="form-id" />
    </div>
  );
}

Using Environment Variables

import { ShapoWidget } from 'shapo-review-widgets';

function App() {
  return (
    <ShapoWidget widgetId={process.env.REACT_APP_SHAPO_WIDGET_ID} />
  );
}

Standalone Script (No React)

<!-- Multiple widgets on the same page -->
<div id="shapo-widget-abc123def111"></div>
<div id="shapo-widget-dfg123def222"></div>
<div id="shapo-form-qwe123def666"></div>

<!-- Initialize once -->
<script id="shapo-embed-js" type="text/javascript" src="https://cdn.shapo.io/js/embed.js" defer></script>

🔧 How It Works

  1. Render Container - The component renders a <div> with the correct ID format:

    • Widgets: shapo-widget-{widgetId}
    • Forms: shapo-form-{formId}
  2. Inject Script - Automatically injects the Shapo embed script if it doesn't already exist

  3. Auto-Initialize - The embed script finds all Shapo containers and initializes them automatically

📦 TypeScript Support

Full TypeScript definitions are included:

import { 
  ShapoWidget, 
  ShapoForm, 
  ShapoWidgetProps, 
  ShapoFormProps 
} from 'shapo-review-widgets';

🎯 Getting Your Widget/Form ID

  1. Log in to your Shapo Dashboard
  2. Navigate to Widgets or Forms
  3. Select the widget/form you want to embed
  4. Copy the Widget ID or Form ID from the settings
  5. Use it in your code!

📄 License

This project is licensed under the MIT License - see the LICENSE file for details.

💬 Support

Made with ❤️ by Shapo

Collect, manage, and showcase your best testimonials, hassle-free.