The study runner is the buildable part: a link for testers that walks them through questions, a first click on a screen image, a card sort and a tree test, then a report with success rates, times and a click heatmap. An agent gets that working in a weekend, and Figma's embed API even reports clicks inside a prototype if you register an app. What you can't build is the panel of more than 7 million testers, the Figma setup that turns a prototype into a test in minutes, or the AI interviews and reports. With the self-serve plan gone, a solo designer is really choosing between this build and the free plan's one study a month.
Before you buildMaze's free plan still runs one study a month with up to 5 seats. If that's your pace, try it before building.
Build me a self-hosted runner for unmoderated usability studies to replace Maze. Requirements: - Node.js 22 + TypeScript: a Fastify API and a React front end built with Vite. `npm start` serves the study builder, the tester view and the reports on port 4750. - Storage: better-sqlite3 in ./data/studies.db; uploaded screen images in ./data/screens/. Each study exports to one JSON file and imports back. - Block types: instructions, multiple choice, open text, opinion scale (1-5), a first-click test on an image (store x/y as a fraction of the image size plus time to click), a five-second test, an open or closed card sort (dnd-kit), and a tree test on a menu tree I paste as indented text. - Builder at /admin, guarded by ADMIN_PASSWORD from .env. Publishing gives a public link /s/:id. Testers stay anonymous; an optional ?pid= value is saved with their answers so I can match IDs from a recruiting service. - Reports per block: response counts, answer breakdowns, median times, a click heatmap drawn over the screen image, success rate against a target area I draw, a card-sort similarity matrix, and tree-test success and directness. - CSV export per block and per study. A tester who reloads the page continues the same session instead of creating a duplicate response. - No accounts for testers, no tracking scripts, no telemetry. - Out of scope: clickable prototype embeds, screen and voice recording, recruiting. - README: run locally, expose it with a tunnel or Caddy, and how to share a study.
Opens your agent with the prompt filled in, you press enter. Or copy it and paste it into an empty folder.
The first prompt builds the core. Run these one at a time in the same folder to grow it into your own Maze.
Add a Figma prototype block to the study runner in this folder. Requirements: - Embed the prototype with Figma's Embed Kit 2.0 iframe, using FIGMA_CLIENT_ID from .env (create an app in Figma's developer settings first). - Record MOUSE_PRESS_OR_RELEASE and PRESENTED_NODE_CHANGED messages from https://www.figma.com: frame IDs, whether a hotspot was hit, and timestamps. - I pick a goal frame; success is reaching it. Report success rate, median time, misclick rate and the most common paths. - Show a clear error when the file isn't shared with anyone who has the link. - Update the README with the Figma app and sharing steps.
Add optional screen and voice recording to the study runner in this folder. Requirements: - Ask for consent on a separate screen; testers can skip recording and still take part. - Record with getDisplayMedia and getUserMedia through MediaRecorder, upload in 10-second chunks to ./data/recordings/, and resume after a dropped connection. - Transcribe each recording locally with whisper.cpp and show the transcript next to a player in the report. - Delete a tester's recording on request from /admin. - Update the README with browser support and the whisper.cpp model download.
Add theme summaries to the study runner in this folder. Requirements: - For any open-text block, send the answers to an LLM (key in .env, or Ollama via OLLAMA_URL) and get back 3 to 8 themes, each with a count and up to 3 quotes linked to their responses. - Run only when I click Summarize; cache the result until new answers arrive. - Never send tester IDs or anything other than the answer text. - Update the README with what leaves the machine.
Research teams pay for speed: import a Figma prototype, buy testers from the panel and read a report with paths and heatmaps the same afternoon. That, plus AI interviews and one place where the whole team keeps findings, is hard to match with a homemade link and testers you have to find yourself.
| Plan | Monthly | Annual, per month | What you get |
|---|---|---|---|
| Free | $0 | $0 | 1 study a month, 5 seats; basic prototype, survey and information-architecture tests; panel testers paid per use. |
| Enterprise | custom | — | Custom number of studies, unlimited seats, panel credits included, interviews and AI-moderated interviews, live website and mobile testing, recordings, SSO. |
Free covers 1 study a month for up to 5 seats, with basic prototype tests, surveys and card sorts; panel testers cost extra.
Kinda. The core is a weekend build with the prompt on this page, but real gaps remain: The participant panel with screening and targeting, Clickable Figma prototype tests with path analysis, set up in minutes.
Maze's pricing is usage-based or varies by plan.
The participant panel with screening and targeting; Clickable Figma prototype tests with path analysis, set up in minutes; AI-moderated interviews, transcripts and automatic reports; Live website and mobile app tests with screen and voice recordings; A shared research workspace with roles and SSO. If any of those matter to you, keep paying.
Yes: Formbricks (open source), LimeSurvey (open source), OpenReplay (open source).