Skip to content
cccskills
FreePublished on GitHub

webhook-design

Design and implement webhooks for event-driven architecture.

The English summary is being prepared. Showing the original description.

See how to install

Files included (1)

  • SKILL.md3.0 KB

SKILL.md (original)

Review the instructions the agent will receive before you install.

Webhook Design Skill

Design and implement secure, reliable webhooks for event-driven integrations.

When to use this skill

  • Integrating with third-party services
  • Setting up real-time notifications
  • Implementing event-driven workflows
  • Configuring Sanity webhooks
  • Building automated pipelines

Workflow

  1. Define events — Identify trigger events
  2. Design payload — Create consistent payload structure
  3. Implement security — Add signature verification
  4. Handle failures — Implement retry logic
  5. Monitor — Track delivery and failures

Webhook Handler (Next.js)

// app/api/webhooks/route.ts
import { NextRequest, NextResponse } from 'next/server';
import crypto from 'crypto';

function verifySignature(
  payload: string,
  signature: string,
  secret: string
): boolean {
  const expected = crypto
    .createHmac('sha256', secret)
    .update(payload)
    .digest('hex');
  return crypto.timingSafeEqual(
    Buffer.from(signature),
    Buffer.from(expected)
  );
}

export async function POST(request: NextRequest) {
  const body = await request.text();
  const signature = request.headers.get('x-webhook-signature');

  if (!verifySignature(body, signature!, process.env.WEBHOOK_SECRET!)) {
    return NextResponse.json({ error: 'Invalid signature' }, { status: 401 });
  }

  const event = JSON.parse(body);

  switch (event.type) {
    case 'content.updated':
      // Handle content update
      break;
    case 'content.deleted':
      // Handle content deletion
      break;
    default:
      console.log(`Unhandled event type: ${event.type}`);
  }

  return NextResponse.json({ received: true });
}

Sanity Webhook Configuration

// app/api/sanity/webhook/route.ts
import { NextRequest, NextResponse } from 'next/server';
import { revalidatePath } from 'next/cache';

export async function POST(request: NextRequest) {
  const secret = request.headers.get('x-sanity-webhook-secret');

  if (secret !== process.env.SANITY_REVALIDATE_SECRET) {
    return NextResponse.json({ error: 'Invalid secret' }, { status: 401 });
  }

  const body = await request.json();
  const { _type, slug } = body;

  // Revalidate based on document type
  switch (_type) {
    case 'post':
      revalidatePath('/blog');
      revalidatePath(`/blog/${slug}`);
      break;
    case 'project':
      revalidatePath('/projects');
      revalidatePath(`/projects/${slug}`);
      break;
  }

  return NextResponse.json({ revalidated: true });
}

Best Practices

  • Verify signatures on all incoming webhooks
  • Return 200 quickly, process asynchronously
  • Implement idempotency keys
  • Log all webhook events
  • Set up retry handling
  • Use queues for high-volume webhooks

Checklist

  • Signature verification implemented
  • Payload validation added
  • Error handling configured
  • Retry logic implemented
  • Logging in place
  • Monitoring and alerts set up

Reviews

No reviews yet. Tell others what you thought.

Comments

No login needed. Share how it worked for you, ask a question, or note where it did not run.

No comments yet. Be the first to write one.

Comments are published right away. Do not include personal information such as email addresses or phone numbers. Up to 2 URLs.

0 / 1,000 characters

This form is protected by reCAPTCHA, and the Google Privacy Policy and Terms of Service apply.

More skills from this repository

Audit and fix accessibility issues across the portfolio to ensure WCAG 2.1 AA compliance.

The English summary is being prepared. Showing the original description.

PP-Namias/Portfolio2Updated Oct 16, 2026

Creates a new blog post document in the Sanity studio. Use when the user wants to write a blog post, publish an article, or schedule a future post.

The English summary is being prepared. Showing the original description.

PP-Namias/Portfolio2Updated Oct 16, 2026

Creates a new certification document in the Sanity studio. Use when the user wants to add a credential, certificate, or professional accreditation to the Certifications collection.

The English summary is being prepared. Showing the original description.

PP-Namias/Portfolio2Updated Oct 16, 2026

Adds a new skill MD file to the studio's skills collection. Use when the user wants to author a new step-by-step recipe for the studio's in-app Skills tool or the .agents mirror.

The English summary is being prepared. Showing the original description.

PP-Namias/Portfolio2Updated Oct 16, 2026

Creates a new project document in the Sanity studio. Use when the user wants to add a new portfolio project, a case study, or a work sample to the Projects collection.

The English summary is being prepared. Showing the original description.

PP-Namias/Portfolio2Updated Oct 16, 2026

Creates a new experience document in the Sanity studio. Use when the user wants to add a job, role, internship, or work history entry to the Experience collection.

The English summary is being prepared. Showing the original description.

PP-Namias/Portfolio2Updated Oct 16, 2026

See all skills by PP-Namias

Report a problem with this skill