Your users are telling you your roadmap, in writing, every day. It's in your prompt logs
Founders pay for interviews and beg for survey responses to learn what people are actually trying to do. Meanwhile, your users type their intent into your product, in their own words, hundreds of times a day - and nobody performs for a prompt box.
The largest research corpus you own
Founders pay for user interviews, beg for survey responses, and squint at session recordings - all to answer one question: what are people actually trying to do with my product? Meanwhile, if your product is AI-powered, users type their intent into it, in their own words, hundreds of times a day. The prompt log is the largest user-research corpus you own, and it's the only one with zero observer bias: nobody performs for a prompt box. The reason nobody mines it: reading ten thousand prompts is a job. Summarizing one user's prompts into "what is this person trying to accomplish" used to be an intern-week. Now it's an API call.
The per-user research memo
My app meters AI usage through Vevee (@vevee/sdk) with prompt logging enabled. compose() can use those prompts as a data source, which makes per-user intent analysis one call:
import { createClient } from "@vevee/sdk";
const vevee = createClient({ apiKey: process.env.VEVEE_SECRET_KEY! });
interface IntentMemo {
jobToBeDone: string; // what they're actually trying to accomplish
workarounds: string[]; // signs they're fighting the product
unmetNeeds: string[]; // things they ask for that we don't do
vocabulary: string[]; // THEIR words for what we call our features
fitVerdict: "core" | "adjacent" | "wrong_tool";
}
const memo = await vevee.compose<IntentMemo>(
"user-intent-memo",
userId
);
if (memo.status === "generated") {
await appendToResearchDoc(userId, memo.output);
}What it surfaces that interviews don't
The compose type's prompt: "From this user's recent prompts and usage, describe the job they are hiring this product to do - in their framing, not ours. List workarounds (repeated rephrasing, manual chaining, fighting defaults). List asks the product doesn't support. Quote their actual vocabulary. Verdict: is this our core use case, an adjacent one, or the wrong tool?" Data sources: user prompts, user events, user usage. Run it weekly over your 30 most active users and you have a standing research panel that never gets interview fatigue. A real memo from my batch:
- Job to be done: staging real-estate photos for rental listings - every prompt is "empty room, scandinavian furniture, bright" variants.
- Workarounds: runs the same prompt 4-6 times and keeps one - no way to lock a style and batch. Manually numbers outputs ("listing 23 bedroom") - using prompts as a filing system.
- Unmet needs: asked twice for "same furniture as last image, different angle" - we don't do consistency across generations.
- Vocabulary: says "staging," never "generation." Calls presets "my setups."
- Verdict: core.
Three roadmap items and a landing-page rewrite
That's three roadmap items and a landing-page rewrite in one memo. The vocabulary line alone is worth the setup: my pricing page said "AI image generation," my best users say "staging." Guess whose words convert better - and a compose-personalized paywall can now speak in the user's own terms. Aggregate the memos and the founder questions answer themselves: when five heavy users share an unmet need, that's a roadmap with receipts. When fitVerdict says "wrong_tool" for a loud feature-requester, that's a no you can say with confidence. When churned users' memos show workarounds piling up in week 3, you've found the leak.
The part you must not skip
Prompts are the most sensitive data you hold. The setup only works inside the consent and hygiene the platform enforces - and they're load-bearing, not legal garnish:
- Prompt logging is opt-in per app, fields are capped and truncated server-side, and retention is short by design - days, not forever; logs are purged on a schedule.
- Users who opted out of AI personalization come back as opted_out: no memo, no prompt assembled into anything. The discriminated-union return type makes the branch unskippable.
- The memos describe use cases; treat them as research artifacts, not surveillance. Quote vocabulary, not paragraphs.
The corpus that was there all along
User interviews tell you what people say they do, analytics tell you that they did something, and prompts tell you what they were trying to do - including every attempt that failed. That third corpus has been sitting in your logs the whole time. The only thing that changed is that reading it now costs a fraction of a cent per user (usage.costMicroUsd, capped by a monthly budget) instead of a week.
Keep reading
Reading a split funnel
The funnel chart tells you how many got through. The split table under it tells you who. Here is a row by row reading of one, from a study app's mock month.
AnalyticsHybrid mode for privacy: put your own server in the middle
The browser never talks to Vevee. It talks to a forty-line route on the app's own server, which decides what leaves and what does not.