CI/CD Integration Guide

Add human QA testing to your deployment pipeline. Every time you deploy, TestMyVibes sends real humans to test your app and reports back with findings.

Jump to platform:
Replit Vercel Netlify GitHub Actions Railway Render Fly.io Lovable Docker / Custom CI
💬

Easiest Way: Just Ask Your AI Agent

Building on Replit, Cursor, Windsurf, or Lovable? Skip this entire page. Paste this prompt to your AI agent:

You
Set up TestMyVibes to run human QA tests on my app after every deploy. The full API reference is at https://testmyvibes.com/api-docs β€” read it first. The base URL is https://testmyvibes.com, auth is a Bearer token, and the key endpoints you'll use are POST /v1/jobs to submit a test and the webhook payload (or GET /v1/jobs/:id) to receive results. Ask me for my TestMyVibes API key (it starts with tmv_), store it as a secret named TESTMYVIBES_API_KEY, then wire up the integration end-to-end and commit the changes.

Your agent will read our API docs, ask for your API key, store it safely as a secret, and wire up the integration. Zero code from you.

On Replit: if your Agent is in Plan mode it can't edit files β€” switch it to Build mode (toggle at the top of the chat) so it can actually wire up the integration.

Get Your API Key Open the API reference →

How It Works

1

You deploy your app

Push code, hit publish, merge a PR β€” however you ship.

2

A test is submitted automatically

Your CI calls our API (or a deploy hook fires) to submit a human QA test against your live URL.

3

A real person tests your app

A vetted QA checker goes through your app, records their screen, fills out the checklist, and files bugs.

4

You get results

Results arrive via webhook, or you poll the API. You get a score, bug reports with screenshots/video, and a detailed checklist.

Quick Start: API Key Method

The fastest way to integrate. Works with any CI system, any language, any platform.

1

Get your API key

Go to Dashboard β†’ API Keys and generate a key. It starts with tmv_.

2

Submit a test

After your deploy step, make a POST request:

curl -X POST https://testmyvibes.com/v1/jobs \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://your-app.com",
    "title": "Post-deploy QA check",
    "jobType": "General QA"
  }'
3

Get results

Either set up a webhook to receive results automatically, or poll:

curl https://testmyvibes.com/v1/jobs/JOB_ID \
  -H "Authorization: Bearer YOUR_API_KEY"

Quick Start: Deploy Hook Method

Even simpler β€” no API key needed in your CI. Just hit a URL.

1

Create a project

Go to Dashboard β†’ Projects, create a project with your app's URL and preferred test type.

2

Copy the deploy hook URL

Each project gets a unique deploy hook URL shown on the project card. It looks like:
https://testmyvibes.com/hooks/deploy/YOUR_TOKEN

3

Call it after deploys

Add a POST request to your deploy script. The hook auto-submits a test using your project's settings.

curl -X POST https://testmyvibes.com/hooks/deploy/YOUR_TOKEN
Deploy hooks are smart: They pull in regression items from previous test failures, so your next test re-checks things that broke last time.

Learn more in the Deploy Hooks guide.

Replit

πŸ”§ Using Replit Deployments

After you publish your Replit app, trigger a test from a separate Replit project or use the deploy hook approach.

Option A: Deploy Hook (Simplest)

Add this to your Replit project's .replit run command or a post-deploy script:

curl -X POST https://testmyvibes.com/hooks/deploy/YOUR_TOKEN

Option B: API Script

Create a script in your Replit project that runs after deploy:

// test-after-deploy.js
const TMV_KEY = process.env.TMV_API_KEY;
const APP_URL = process.env.REPLIT_DEV_DOMAIN
  ? `https://${process.env.REPLIT_DEV_DOMAIN}`
  : "https://your-app.replit.app";

async function submitTest() {
  const res = await fetch("https://testmyvibes.com/v1/jobs", {
    method: "POST",
    headers: {
      "Authorization": `Bearer ${TMV_KEY}`,
      "Content-Type": "application/json",
    },
    body: JSON.stringify({
      url: APP_URL,
      title: "Post-deploy QA",
      jobType: "General QA",
    }),
  });
  const data = await res.json();
  console.log("Test submitted:", data.id || data);
}

submitTest();

Option C: Poll for Results

After submitting, you can poll until the test completes:

// poll-results.js
const TMV_KEY = process.env.TMV_API_KEY;

async function pollJob(jobId) {
  while (true) {
    const res = await fetch(`https://testmyvibes.com/v1/jobs/${jobId}`, {
      headers: { "Authorization": `Bearer ${TMV_KEY}` },
    });
    const job = await res.json();
    console.log(`Status: ${job.status}`);

    if (job.status === "completed") {
      console.log("Score:", job.report?.overallScore);
      console.log("Issues:", job.report?.criticalIssues?.length || 0);
      return job;
    }
    if (job.status === "cancelled") {
      console.log("Test was cancelled");
      return job;
    }
    // Wait 30 seconds before checking again
    await new Promise(r => setTimeout(r, 30000));
  }
}

// Usage: node poll-results.js JOB_ID
pollJob(process.argv[2]);

Vercel

β–² Vercel Deploy Hooks

Vercel can call a webhook after each deployment. Use our deploy hook URL as a Vercel integration webhook, or add a post-deploy script.

Option A: Vercel Webhook (Dashboard)

In your Vercel project settings, go to Settings β†’ Integrations or use a custom webhook. Point it at your deploy hook URL.

Option B: package.json Script

{
  "scripts": {
    "postdeploy": "curl -X POST https://testmyvibes.com/hooks/deploy/YOUR_TOKEN"
  }
}

Option C: API Route (In-App)

Add an API route in your Next.js app that submits a test on demand:

// app/api/run-qa/route.ts
export async function POST() {
  const res = await fetch("https://testmyvibes.com/v1/jobs", {
    method: "POST",
    headers: {
      "Authorization": `Bearer ${process.env.TMV_API_KEY}`,
      "Content-Type": "application/json",
    },
    body: JSON.stringify({
      url: process.env.VERCEL_URL
        ? `https://${process.env.VERCEL_URL}`
        : "https://your-app.vercel.app",
      title: "Vercel deploy QA",
      jobType: "General QA",
    }),
  });
  return Response.json(await res.json());
}

Netlify

β—† Netlify Deploy Notifications

Netlify has built-in deploy notifications. Go to Site settings β†’ Deploy notifications β†’ Outgoing webhook and add your deploy hook URL.

Event: Deploy succeeded
URL: https://testmyvibes.com/hooks/deploy/YOUR_TOKEN

Or use a Netlify plugin / build command:

# netlify.toml
[build]
  command = "npm run build"

[build.lifecycle]
  onSuccess = "curl -X POST https://testmyvibes.com/hooks/deploy/YOUR_TOKEN"

GitHub Actions

πŸ™ Run Human QA After Deploy

Add this step to your GitHub Actions workflow after your deploy step:

# .github/workflows/deploy.yml
name: Deploy & Test
on:
  push:
    branches: [main]

jobs:
  deploy-and-test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      # ... your deploy steps here ...

      - name: Submit QA Test
        env:
          TMV_API_KEY: ${{ secrets.TMV_API_KEY }}
        run: |
          RESPONSE=$(curl -s -X POST https://testmyvibes.com/v1/jobs \
            -H "Authorization: Bearer $TMV_API_KEY" \
            -H "Content-Type: application/json" \
            -d '{
              "url": "https://your-app.com",
              "title": "Deploy ${{ github.sha }}",
              "jobType": "General QA"
            }')
          echo "Test submitted: $RESPONSE"
          JOB_ID=$(echo $RESPONSE | jq -r '.id')
          echo "job_id=$JOB_ID" >> $GITHUB_OUTPUT
Tip: Add TMV_API_KEY as a repository secret in GitHub Settings β†’ Secrets and variables β†’ Actions.

Or use the simple deploy hook:

      - name: Trigger QA Test
        run: curl -s -X POST https://testmyvibes.com/hooks/deploy/YOUR_TOKEN

Railway

πŸš‚ Railway Post-Deploy

Railway doesn't have built-in deploy webhooks, but you can trigger a test after each deploy using the CLI or a post-deploy script.

# After railway up, trigger a QA test:
railway up && \
curl -X POST https://testmyvibes.com/v1/jobs \
  -H "Authorization: Bearer $TMV_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://your-app.up.railway.app",
    "title": "Railway deploy QA",
    "jobType": "General QA"
  }'

Or use the zero-config deploy hook:

curl -X POST https://testmyvibes.com/hooks/deploy/YOUR_TOKEN

Render

πŸ”· Render Deploy Hooks

Render supports deploy notifications. Add a webhook in your Render dashboard to trigger a TestMyVibes test on every deploy.

# In Render: Settings β†’ Notifications β†’ Deploy Notifications
# Add a webhook with your deploy hook URL:
https://testmyvibes.com/hooks/deploy/YOUR_TOKEN

Or trigger via API after deploying:

curl -X POST https://testmyvibes.com/v1/jobs \
  -H "Authorization: Bearer $TMV_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://your-app.onrender.com",
    "title": "Render deploy QA",
    "jobType": "General QA"
  }'

Fly.io

πŸͺ Fly.io Post-Deploy

Chain a TestMyVibes test right after fly deploy completes:

fly deploy && \
curl -X POST https://testmyvibes.com/v1/jobs \
  -H "Authorization: Bearer $TMV_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://your-app.fly.dev",
    "title": "Fly.io deploy QA",
    "jobType": "General QA"
  }'

Or the zero-config deploy hook:

curl -X POST https://testmyvibes.com/hooks/deploy/YOUR_TOKEN

Lovable

πŸ’œ Lovable Post-Deploy

After deploying your Lovable app, trigger a TestMyVibes human QA test to verify everything the AI built actually works for real users.

Option A: API Call

curl -X POST https://testmyvibes.com/v1/jobs \
  -H "Authorization: Bearer $TMV_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://your-app.lovable.app",
    "title": "Lovable App QA",
    "jobType": "General QA"
  }'

Option B: Deploy Hook

curl -X POST https://testmyvibes.com/hooks/deploy/YOUR_TOKEN
Tip: Run a First Impression test on your Lovable app to see how real users experience the AI-generated interface.

Docker / Custom CI

🐳 Any CI Pipeline

Works with Jenkins, CircleCI, GitLab CI, Bitbucket Pipelines, or any system that can run a curl command.

After your deploy step:

curl -X POST https://testmyvibes.com/v1/jobs \
  -H "Authorization: Bearer $TMV_API_KEY" \
  -H "Content-Type: application/json" \
  -d "{
    \"url\": \"$DEPLOY_URL\",
    \"title\": \"Build #$BUILD_NUMBER QA\",
    \"jobType\": \"General QA\"
  }"

Or the zero-config deploy hook:

curl -X POST https://testmyvibes.com/hooks/deploy/YOUR_TOKEN

Available Job Types

Job Type Credits Best For
First Impression2Quick smoke test, first-time user perspective
General QA3–5Thorough bug hunting, feature testing
Payment Flow4–6Checkout, billing, subscription flows
Custom2–6Your own checklist, specific scenarios
AI Review1/personalityAI-powered review (no human checker)

Next Steps

Webhooks

Get notified when tests finish

Deploy Hooks

Zero-config test triggers

Status Badges

Embed QA status in your README

API Reference

Full endpoint documentation