← Back

Meta Measure

April 5, 2026

Meta Measure takes a list of research ideas and drops them on a scatter plot: quantitative to qualitative on one axis, traditional to novel on the other, so you can see at a glance how a set of topics balances out methodologically. There's no scoring rubric anywhere in the app. Every placement comes from Claude reasoning about each idea fresh, so the graph ends up less a fixed taxonomy and more a snapshot of one model's judgment at one point in time.

The graph rendering isn't really the interesting part. The prompt behind it is. The API route sends the whole list of ideas in a single request and asks for strict JSON back: coordinates for each idea, plus a written explanation of the reasoning. It also asks the model to interrogate its own placements: what assumptions it made, what it defaulted to, and whether its evaluation quietly favors certain research approaches over others.

const message = `Given the following words: ${JSON.stringify(ideas)}

Your response must ONLY contain valid JSON in the following format, with no additional text:
{
  "ideas": [
    { "title": "string", "x": number, "y": number }
  ],
  "explanation": "string"
}

Evaluate each word on these scales:
- X-axis: Quantitative (-1) to Qualitative (1)
- Y-axis: Traditional (-1) to Novel (1)

In the explanation field, provide a detailed analysis of your reasoning process for
each placement... Be transparent about any default interpretations you applied when
information was limited. Address whether certain fields or methodologies were
implicitly favored in your evaluation and why.`;

That self-critique isn't a separate step tacked on afterward. It's asked for on every call, so the model has to justify its own coordinate system in the same response that produces it. The route itself is a thin Next.js handler sitting behind a cookie-gated access check, with a regex fallback to pull a JSON object out of the response in case Claude wraps it in extra text.