# Coordinator: I shipped an API queue control plane before the queue worker existed

Source: https://www.michaelchurley.com/blog/coordinatorapp-api-queue-control-plane  
Published: 2026-08-08  
Author: Michael C. Hurley  
Tags: coordinator, coordinatorapp, api-queue, rate-limiting, nextjs, convex, clerk, stripe, zapier, backpressure, hurleyus

![Coordinator home. Reliable queues for the APIs your product depends on](/blog/coordinatorapp-api-queue-control-plane/screenshots/home.png)

## Who

I got tired of watching production workers invent their own Stripe and GitHub throttles.

Every SaaS eventually grows a Friday-night 429 story. Someone hard-codes a sleep. Someone else adds a Redis queue "just for this provider." Zapier looks fine until flood protection is the product and connector count is the brochure.

Coordinator is for operators who want a **hosted control plane** for rate limits, retries, backoff, and replay. before they pretend the SDK already ships. Production teams who need queue depth and provider health readable in one zinc panel. Builders comparing Zapier / Make / n8n on backpressure instead of logo walls.

If you have ever paused a HubSpot sync because the provider blinked, this is for you.

## What

I built **Coordinator**. package name `coordinatorapp`, version **0.1.0**, private under **HurleyUS/coordinatorapp.com**. Metadata: *Smart API Queueing & Rate Limiting*. Tagline energy: **Connect. Queue. Execute.** Hero: **Reliable queues for the APIs your product depends on.**

Stack facts from the lockfile and tree, not the stale sitrep: **Next.js 16.2.6**, **React 19.2.6**, **Tailwind 4.3**, Bun, **Convex**, **Clerk**, **Stripe** checkout/portal/webhook with dynamic `price_data`, Sentry, PostHog, GA. Fifty-two commits. HEAD `b7e9b3b`.

![Live pricing. Free / $29 / $79](/blog/coordinatorapp-api-queue-control-plane/screenshots/pricing.png)

Surfaces that exist: `/` zinc lander with DashboardPreview (24,891 queued / 1,204 429s prevented / 2.4s retry; Stripe / GitHub / HubSpot rows), `/pricing`, `/docs` (every guide card says Coming soon), `/privacy`, `/terms`, `/sign-in`, `/sign-up`, `/events/[eventId]`, Stripe API routes under `app/api/stripe/`.

Convex tables: `waitlist`, `events`, `attendees`, `users`, `subscriptions`, `addOnPurchases`. Waitlist mutation + `WaitlistForm` exist. **not wired into the May redesign homepage**. Event RSVP (Mar 20 #31) tracks capacity, dietary notes, confirmed/tentative/cancelled.

![Billing drift. pricing page vs lib/billing.ts](/blog/coordinatorapp-api-queue-control-plane/screenshots/billing-drift.png)

Money path split brain: **live pricing page** sells Starter Free / Pro **$29**/user/mo / Business **$79**/user/mo. **`lib/billing.ts`** (what checkout reads) prices Starter **$19**, Pro **$49**, Business **$149**, plus Extra Executions **$19** and Priority Support **$99**. OPPORTUNITIES still promises an **n8n** backend. There is **no n8n** in the tree. Homepage teases `coordinator.queue(...)`, the SDK is marketing, not a package.

## Where

Code: [github.com/HurleyUS/coordinatorapp.com](https://github.com/HurleyUS/coordinatorapp.com). **private**. Live: [www.coordinatorapp.com](https://www.coordinatorapp.com) (**HTTP 200**, apex 307 to www). GitHub homepage: [coordinatorapp-com.vercel.app](https://coordinatorapp-com.vercel.app) (same prerender etag). `X-Robots-Tag: index, follow` from the Aug 8 `vercel.json` fix.

![Docs. Coming soon](/blog/coordinatorapp-api-queue-control-plane/screenshots/docs.png)

Audience sits next to Zapier / Make / n8n / Tray. flood protection and retry observability as the wedge. Sibling operator furniture: Blacksmith ship gates, Biome, Stripe snake_case webhook casting, Enterprise mailto `michael@hustlelaunch.com`.

![Sign-in. Clerk keys required](/blog/coordinatorapp-api-queue-control-plane/screenshots/sign-in.png)

## When

**2026-01-08.** `ae06d85` init Next/Convex/Tailwind. Same day OPPORTUNITIES + PLAN. Zapier competitors, flood protection, n8n-powered claim on day one.

**2026-02-06.** `2b54644` ship landing page: Next 16, dark theme, queue visualization.

**2026-02-13–22.** Stub pages, Clerk middleware + env validation, strip unverified SOC 2 claim, Navbar/Footer, Sentry, PostHog, site config, error/loading/not-found.

**2026-03-17–18.** www / Clerk middleware 500 debug cascade (aliases, middleware off, vercel.json thrash). robots, sitemap, GA, next-themes. Waitlist + Convex backend.

**2026-03-20–22.** Event signup form + attendee management (#31). Stripe standardization + webhook type casting.

**2026-05-13–15.** shipprep + Blacksmith CI / deploy verification burst.

**2026-05-22, 06:09 ET.** `3eec7ae` **redesign**, the live zinc control-plane lander.

**2026-08-08, 06:54 ET.** `b7e9b3b` set X-Robots-Tag to index, follow. HEAD. Fifty-two commits.

**Pack day 2026-09-08.** Live Chromium shots. www 200. Sign-in: **Clerk keys required**. `sitrep.md` still says prototype / no auth / Feb 6. treat as drift.

![SDK teaser on the lander](/blog/coordinatorapp-api-queue-control-plane/screenshots/sdk-snippet.png)

## Why

I did not want another automation brochure with a fake connector grid and no backoff story.

I wanted a control plane face. queued requests, 429s prevented, retry delay. before the worker existed. I wanted Stripe subscription sync and Convex waitlist/events on disk even while docs say Coming soon and the homepage SDK call is a `<pre>`.

So January named the category. February shipped the face. March fought www 500s, captured waitlist emails, bolted on event RSVP, and hardened Stripe. May redesign locked the zinc hero. August flipped robots on a live site that still needs Clerk env vars.

Would you fix the pricing page to match `billing.ts`, or ship Clerk keys to www before anyone can Start with GitHub?
