All work

Strategy Studio

Designed and built it. Live in production.

Competitive research becomes something you can ask questions of from inside Claude, scoped to a single workspace, read only, revocable. No copy and paste between systems.

Next.js · TypeScript · Supabase · OAuth 2.1 · MCP · Anthropic + Google · Apify · Vercel

OAuth consent screen granting Claude read-only access to a single workspace
The consent screen. One workspace, read only, revocable, in language a non-engineer can act on.
Strategy Studio patterns view showing creative pattern frequencies across analysed ads
What Claude is reading. Captured competitor ads resolved into pattern frequencies and ad structures.

Strategy Studio captures competitor ads from Meta and TikTok into a workspace per client, then turns the pile into readouts. The point is not the ad wall, it is the pattern underneath it, so a brief opens with what the category is already running.

The harder half is the access layer. Claude connects to it as a remote MCP server through an OAuth 2.1 authorization server I built: dynamic client registration, authorization code flow with PKCE, scoped tokens bound to a single workspace, and a consent screen that tells a non-technical person exactly what they are granting.

Access tokens last an hour, refresh tokens last thirty days and rotate on every use. The old token is revoked in the same operation that issues the new one, guarded so a replayed refresh token is detected rather than honoured. Tokens are only ever stored as hashes.

That is the part worth paying attention to. Plenty of people have connected an AI tool to a database. Far fewer have built the authorization layer that makes it safe to let an agent into a system that holds more than one client's data.

Application
28,301 lines of TypeScript, 157 files
Surface
19 pages, 57 API routes
Tenancy
Workspaces with members, scoped end to end
Agent access
OAuth 2.1 with PKCE, per-workspace tokens
Token handling
SHA-256 at rest, rotation with reuse detection
Retrieval
Embeddings and a knowledge layer
Production
Sentry, Upstash rate limiting, PostHog

Check it yourself

The authorization server is live. These are public endpoints, so you can confirm the whole thing without asking me anything.

  • curl -i https://strategy-studio.vercel.app/.well-known/oauth-protected-resource

    Protected resource metadata. Returns 200, RFC 9728 metadata naming the resource and its scopes.

  • curl -i https://strategy-studio.vercel.app/.well-known/oauth-authorization-server

    Authorization server metadata. Returns 200, RFC 8414 metadata with the full endpoint set.

  • curl -i https://strategy-studio.vercel.app/api/mcp

    The MCP endpoint itself. Returns 401 with a WWW-Authenticate bearer challenge pointing back at the metadata.

More work
MCP servers, running on a client accountOne product photo becomes a campaignPaid video at batch scale