Private beta

Drop-in reviews
for SaaS products.

Star ratings, threaded reviews, reactions, and moderation — embedded in your product with two IDs and a signed JWT. Ship today. revws handles persistence, auth federation, and rendering.

Quickstart

Three steps. One afternoon, tops.

  1. 1

    Get your keys

    Every product gets a public id (pub_…) and a signing secret (sk_…) in the dashboard. The secret stays on your server; rotate it any time.

  2. 2

    Mint a JWT for your user

    Your users, your identity — revws never owns accounts.

    # Your backend mints a short-lived JWT per signed-in user.
    import jwt, time
    
    token = jwt.encode(
        {
            "iss": "pub_...",            # your product id
            "sub": user.id,               # YOUR user id
            "name": user.display_name,
            "exp": int(time.time()) + 600,
        },
        PRODUCT_SIGNING_SECRET,           # sk_... from the dashboard
        algorithm="HS256",
    )
  3. 3

    Drop the tag

    The widget mounts, fetches the thread, and renders. Theme with one CSS variable.

    <script src="https://cdn.revws.io/v1/widget.js"
            data-product="pub_..."
            data-page="<your page id>"
            data-user-token="<signed JWT>"></script>
    <div id="revws"></div>

What we do

One drop-in widget. Three integration surfaces.

Widget

One script tag, two IDs, a signed user token. Star ratings, threaded reviews, reactions. Vanilla DOM, grayscale chrome that disappears into your product.

REST API

GET /v1/threads, POST /v1/reviews, POST /v1/reactions. For server-side rendering, custom UIs, mobile clients, and exports.

Webhooks

Roadmap

review.created, review.deleted — signed payloads so your policy engine can act on every event. Not live yet; moderation runs in the dashboard today.

< 30 KB

widget budget, gzipped

< 150 ms

p95 render target

0

revws accounts for your users

Pricing

Honest numbers. No call required.

Enterprise — contract pricing, per-workspace limits, priority support. Talk to us.

FAQ

The questions engineers actually ask.

How does auth federation work?
Your backend signs a short-lived HS256 JWT with your product's signing secret (sub, name, exp). The widget sends it as a bearer token on every call. Your users never create revws accounts — we never own their identity or email them.
What counts toward monthly usage?
Every review AND every reply written through the public API counts. Reads, reactions, and widget loads are free at every tier.
What happens when a free workspace hits its cap?
New reviews are declined for the rest of the UTC month — the widget shows readers a neutral notice and everything already written keeps rendering. Paid tiers are never blocked.
Who owns the review data? Can we export it?
You do. Every thread and review is readable through the REST API with your own signed tokens, so a full export is a script, not a support ticket. Delete your product and the keys die with it.
How heavy is the widget?
The bundle budget is 30 KB gzipped and today's build is well under it. It's vanilla DOM — no framework runtime — and renders threads from a single API call.
Do you show ads or track our users?
No ads, no trackers, no selling data — reviews render for your readers, not for an ad network. The only identity we see is the id your JWT carries.
Is there an SDK for my framework?
The REST API and the drop-in widget work with any stack today. Framework packages (React/Vue wrappers, server SDKs) are on the roadmap.

Ready when you are

Reviews shipped before
the next standup.

Private beta — keys granted within a day.