Seven ready-made backend services: sign-in, email, waitlists, social feeds, web scraping, feature flags and notifications. Your AI agents can work with them too, within the limits you set.

Seven products, already built.

Use one or all seven. Each has its own API, docs and SDK. One account covers them all.

  1. Open a workspace. Sign in to the console. All seven products live in it.

  2. Create an API key. One key works for all seven, and you choose what it can do.

  3. Install and call. npm install productcraft, then pc.auth, pc.mail, pc.waitlist, pc.social, pc.trawl, pc.flags or pc.notify.

Auth

Passkeys, two-factor and organizations, without writing auth.

Add Apple, Google or GitHub sign-in. Setup checks your credentials as you save them. Move your users over from Auth0 or your own database, passwords included, so nobody has to reset.

Passkeys with Face ID, Touch ID or a security key, and two-factor codes from an authenticator app or by email.

  • Your customers' own API keys. Let them create keys for their own scripts. A key can never do more than the person who made it, and every key expires.
  • An audit log you can export. Every app keeps a log that nobody can edit.

Mail

Send email from your domain, not ours.

Write templates with a live preview, then send them with one API call.

  • Your domain, verified. Add the DNS records once and every email is signed as you, so receiving servers know it came from you.

  • Broadcasts. Send to a segment or a topic, now or on a schedule, with one-click unsubscribe.

  • Retries never send twice. If your code sends the same request twice, the email still goes out once.
  • Use your own email provider. Send through any SMTP service, per workspace or per domain.

ProductCraft sends its own email through Mail.

Trawl

Describe the data. Get JSON that matches.

Give it a page, a one-sentence description and a JSON Schema. A browser agent reads the page and returns JSON that fits. Results arrive on a signed webhook.

  1. Describe it The schema and the sentence you send.

    The five most recent releases: package name and version.

    {
      "type": "object",
      "properties": {
        "releases": {
          "type": "array",
          "maxItems": 5,
          "items": {
            "type": "object",
            "properties": {
              "package": {
                "type": "string"
              },
              "version": {
                "type": "string"
              }
            },
            "required": [
              "package",
              "version"
            ]
          }
        }
      },
      "required": [
        "releases"
      ]
    }
  2. Get JSON The data the agent returned, checked against your schema.

    {
      "releases": [
        {
          "package": "productcraft",
          "version": "0.3.1"
        },
        {
          "package": "@productcraft/social",
          "version": "1.0.0"
        },
        {
          "package": "productcraft",
          "version": "0.3.0"
        },
        {
          "package": "@productcraft/waitlist",
          "version": "0.2.0"
        },
        {
          "package": "@productcraft/trawl",
          "version": "0.2.0"
        }
      ]
    }
package maps to productcraftversion maps to 0.3.1

From the first signup to the first feed.

Waitlist

Signups that don't live in a spreadsheet.

Referrals and A/B tests. Each friend who joins with someone's referral link moves them up the line, and two versions of your pitch can split your visitors.

  • Works from a static page. Your signup form posts straight to it, with no backend or API key. The console gives you the snippet.
  • Approve, then invite people into your app. Or download the list as a CSV.

Social

Feeds, follows and ranking you don't have to build.

Ranked feeds you can tune. Balance new posts against popular ones for each community, with no machine-learning pipeline to run.

  • Use it on its own. No ProductCraft Auth app required.
  • Stories, DMs and video. Stories with polls and close-friends lists. Video uploads up to 512 MB, ready to stream.

One workspace

One workspace. One key. Seven products.

Everything you create lives in one workspace, and one sign-in opens all seven products in the console.

sdk
@productcraft/auth · mail · waitlist · social · trawl · flags · notify, plus the productcraft umbrella. Node.js / TypeScript, server-side, MIT.
webhooks
Signed webhooks on all seven products, each with Send test, a 30-day event log and replay.

signin.ts

import { ProductCraft } from "productcraft";

// Sign-in acts for the end user: no API key is sent
const pc = new ProductCraft();

const consumer = pc.auth.consumer("my-app");
const tokens = await consumer.signin({
  identifier: "alice@example.com",
  password: "...",
});
import { ProductCraft } from "productcraft";

// Public route: no API key is sent
const pc = new ProductCraft();

const consumer = pc.auth.consumer("my-app");
const tokens = await consumer.signin({
  identifier: "alice@example.com",
  password: "...",
});

200 OK

{
  "access_token": "eyJ…",
  "refresh_token": "eyJ…",
  "token_type": "Bearer",
  "expires_in": 3600
}

Plain REST, with optional typed SDKs for your server. The docs, the SDKs and the MCP server are all built from one OpenAPI spec.

PoliciesPolicies decide what every key and every agent can touch.
The consent screen at auth.productcraft.co for an MCP client: Mail and Waitlist ticked among the seven products, the Read-only preset, which changes nothing, then Deny and Allow access and the line “Closing this window denies the request. Nothing is shared until you allow it.” Demo session; the client name and the workspace list above are cropped out.

From your editor

Claude, Cursor and VS Code can work in your workspace.

An MCP server at mcp.productcraft.co. You approve the connection in the browser, a policy preset caps what it may do, and every call lands in the audit log.

claude mcp add --transport http productcraft 'https://mcp.productcraft.co/mcp' # then, inside Claude Code: /mcp # pick "productcraft" and follow the browser prompt
How many people are on the demo-lp-launch waitlist, how many came through a referral, and who are the first three in the queue?
waitlist_list_waitlists {"limit": 50}
<<<UNTRUSTED-DATA tool="waitlist_list_waitlists">
"slug": "demo-lp-launch",
"display_name": "<<untrusted> Northwind Tea: autumn menu <untrusted>>",
waitlist_get_waitlist_analytics {"waitlist_id": "…"}
<<<UNTRUSTED-DATA tool="waitlist_get_waitlist_analytics">
"total_entries": 16,
"viral_coefficient": 0.75,
"referred_count": 12,
waitlist_list_waitlist_entries {"waitlist_id": "…", "limit": 5, "is_test": false}
<<<UNTRUSTED-DATA tool="waitlist_list_waitlist_entries">
"email": "ada@example.com",
"email": "grace@example.com",
"email": "alan@example.com",

demo-lp-launch ("Northwind Tea: autumn menu") has 16 people on it, not counting test signups. All 16 are approved. All of them signed up today, 2026-11-05.

12 of the 16 came through a referral (about 75%). Those referrals came from 3 people:

- Grace Hopper: 6 referrals

- Alan Turing: 4

- Katherine Johnson: 2

First three in the queue:

1. Ada Lovelace (ada@example.com)

2. Grace Hopper (grace@example.com)

3. Alan Turing (alan@example.com), who was referred by Grace

Referral rewards have moved people up the queue. Ada, Grace, Alan and Katherine Johnson (4th) all now share effective position 1. So if you're ranking by effective position, those four are tied at the front, and the original signup order is what breaks the tie.

  • Presets: readonly, mail, support, full. No preset lets an agent give itself more access.
  • Approve only the products it needs. Within those, it can do whatever your policy allows.

Note what the command leaves out: no token, no key, no secret. The URL is the only setting.

Connect your editor

Changelog

Shipped, dated, linked.

Every entry is a production deploy.

Get started

The parts every app needs are done. Build the rest.

Start with the product that brought you here. The rest use the same key.

Package manager
npm install productcraftpnpm add productcraftyarn add productcraft

Each product has a free tier large enough to ship a side project on. Pricing is coming soon.