PuppiBecome a design partner

Your cron job said it worked. Did it?

Data syncs as TypeScript code. A bad result gets held back, not shipped.

Lineage graph in prod. hubspot/companies is held back after a schema check failed. The other assets kept running.

One source changed a field. Puppi held that result back. Everything else kept running.

01

Catch the broken sync before your customers do.

Every result is checked against its schema, plus any rules you write in TypeScript. If a check fails, Puppi holds the result back. The last good version keeps serving.

02

Let Claude Code write it. Puppi checks it.

Pipelines are TypeScript files in your repo, so Cursor or Claude Code can read and fix them. No Python. No Docker. No Kubernetes. Ship with puppi deploy --env prod. Roll back to the last good version with one command.

assets/core/customer.ts
1import { model, source } from "@puppi/sdk";23const schema = {4  columns: [5    { name: "id", type: "string" },6    { name: "name", type: "string" },7    { name: "email", type: "string" },8  ],9};1011export const companies = source({12  key: "hubspot/companies",13  schema,14  run: async (ctx) => {15    await ctx.emit([{ id: "1", name: "Acme", email: "ada@acme.com" }]);16  },17});1819export const customer = model({20  key: "core/customer",21  schema,22  checks: {23    custom: {24      email_present: {25        severity: "block",26        run: ({ rows }) => ({27          result: rows.every((row) => row.email != null && row.email !== "")28            ? "pass"29            : "fail",30          detail: "a customer row is missing email",31        }),32      },33    },34  },35  run: async (ctx) => {36    const up = ctx.input("hubspot/companies");37    const { rows } = await ctx.query(`select id, name, email from ${up}`);38    await ctx.emit(rows);39  },40});
Terminal
$ puppi deploy --env prod
  typecheck  3 assets ok
  bundle     dist/puppi.js
  upload     dep_8f3a21c0
  pointer    prod → dep_8f3a21c0 Active.

03

Sync the APIs you already use.

Pull from these, or from any REST API. Runs on app.puppi.dev, so you don't run any servers.

  • Postgres
  • Stripe
  • Salesforce
  • HubSpot
  • BigQuery
  • Snowflake

Build it with us.

We're working hands-on with a few TypeScript teams on Vercel, Fly or Render, with no DevOps hire. We'll get your first pipeline running with you, on a call.

Become a design partner