User Research Suite — Automating repetitive UX research tasks with AI
Design and development of a full SaaS tool, from blank page to production — AI-generated study protocols, stakeholder briefs as slides, Word/PDF/PowerPoint exports. Powered by Claude AI, deployed on Vercel.
- Role
- Designer & Developer
- Duration
- 6 days
- Tools
- Next.js · Anthropic API · Supabase · Stripe · Vercel

Context
UX research generates a lot of repetitive documentation: moderator guides, screeners, framing briefs, insights reports. These deliverables follow known structures, but writing them takes several hours per study — time taken away from fieldwork.
The idea: if the structures are predictable, AI can generate them. One system prompt per study type, an expected JSON schema, streaming for the generation UX — and the researcher gets a structured, exportable deliverable in under 30 seconds.
This project grew out of a personal need during my practice at RAJA, and evolved into a real SaaS product with authentication, payments and saved projects.
What the tool does
Protocol Generator
AvailableDescribe the context, choose the study type. The AI generates a complete protocol: written moderator guide, tasks and scenarios, observation questions and tips. Word and PDF export in one click.
Brief Builder
AvailableOnce the protocol is generated, create the stakeholder brief without leaving the page. Claude generates 9 HTML slides with inline styles, viewable in a 16:9 viewer. PowerPoint and PDF export. Included in the same credit.
Results Analyser
In progressImport raw data (CSV from Maze/UserTesting/Typeform, verbatims, notes). Structured insights report with prioritised recommendations. Excel and Word export.


Approach
Use case identification
Analysis of repetitive research tasks: protocol writing, brief preparation, data synthesis. Definition of 3 priority use cases with their expected JSON output schema (protocol structure, brief structure, report structure).
Prompt engineering
A distinct system prompt per study type, with the expected JSON schema embedded. Internal reflection phase (<reflexion>) + generation phase (<brief>) for the Brief Builder. Adaptive prompts: moderated/unmoderated distinction, 3 sub-designs for unmoderated tests (monadic, A/B, benchmark).
Architecture and development
Next.js API routes with mandatory streaming (ReadableStream + Anthropic SDK) to avoid Vercel timeouts. Supabase Auth + RLS to isolate data per user. Stripe webhook to credit accounts. Server-side exporters only (docx, pptxgenjs, @react-pdf/renderer don't work browser-side).
Production deployment
6 sprints from MVP to advanced features: multi-type protocols, brief builder with slide viewer, saved projects system, full auth, Stripe payments, GDPR legal pages, Vercel analytics. Continuous deployment on Vercel.

Key technical decisions
Mandatory streaming
All API routes use ReadableStream with the Anthropic SDK. Without streaming, 10–15 second generations trigger Vercel timeouts (10s in prod). The client receives tokens in real time and displays step-by-step progress.
Constrained structured JSON
Claude always responds with valid JSON, never free-form markdown. The expected schema is embedded in the system prompt — a distinct schema per study type. The discriminated union on <code/> handles the 3 sub-designs of the unmoderated test (monadic | A/B | benchmark) in the same endpoint.
Server-side exporters only
docx, pptxgenjs and @react-pdf/renderer are not browser-compatible. They run exclusively in API routes. The result is returned to the client as a Uint8Array (Buffer → Uint8Array required in Next.js 16).
Atomic credits
Credit deduction is an atomic SQL function on Supabase (<deductCode/>). It executes after successful generation — never before — to avoid charging for a failed generation. The Stripe webhook uses <addCode/>, also atomic.

What I learned
- Prompt engineering for structured JSON is a craft in itself. Constraining Claude to respect a 20+ field schema without hallucination required multiple iterations per study type — particularly for discriminated unions (unmoderated A/B vs benchmark).
- Streaming completely changes the UX of an AI tool. Displaying tokens as they arrive transforms an anxious 15-second wait into a reassuring generation experience. The progress stages detected in the buffer (JSON markers) make the interface dynamic without complex JavaScript.
- Building a SaaS solo in 6 weeks is achievable with the right tools. Supabase (auth + DB + RLS), hosted Stripe Checkout and Vercel eliminated most of the infrastructure plumbing. Claude Code accelerated development by 40% on repetitive parts (exporters, prompts, preview components).
- Exporters are the real bottleneck. Generating a faithful PPTX from HTML inline-styles (produced by Claude) requires an htmlToLines() function that extracts text and reformats it in pptxgenjs. The A4 PDF with @react-pdf/renderer is more stable but less flexible.
Result
A production tool, usable by any UX researcher. 5 free credits on sign-up allow generating 5 complete protocols — no credit card required. Generating a moderator guide for a moderated test (tasks, scenarios, probe questions, post-task questions) takes under 30 seconds where manual writing takes 2 to 3 hours.
- < 30s
- per generation
- 5 types
- of studies supported
- 3 formats
- of export
- 6 days
- from start to finish
Let's work together
Interested in this case study? Let's discuss what user research can bring to your product.