A static frame can become a clickable, stateful prototype in an afternoon — real inputs, real navigation, real conditional logic — good enough for usability tests and stakeholder demos. This playbook runs that pipeline through Figma Make, v0 or Lovable, with the production-code boundary stated before the first generation.
Workflow area: Figma AI & Prototyping · Tier: Core · Hands-on time: ~40 minutes
Prototype fidelity used to be a budget decision: clickable mocks were cheap and shallow, coded prototypes were deep and expensive. Prompt-to-prototype tools collapsed that trade-off — you can now test flows with real text inputs, validation, and branching logic without an engineer. What has not changed: prototype code is prototype code. It is generated for speed, not for your stack, your security review, or your design system's implementation. Teams that let a convincing prototype slide toward production ship the demo's shortcuts at production scale. Say the boundary out loud, then enjoy the speed.
Write the boundary line where the prototype will live. In the project readme or the prototype's cover screen: "Throwaway prototype for testing and demo. Not production code; no code from this artifact ships." Thirty seconds now saves an awkward month later.
Turn the frame into a behavior spec. The screenshot tells the tool what it looks like; the spec tells it what it does. Write both down before generating:
Build an interactive prototype of this screen (image attached).
BEHAVIOR:
- Search field filters the list live, matching on name and tag.
- Empty search results show the empty state: "No projects match"
with a "Clear search" action.
- "New project" opens a modal: name (required, max 60 chars),
template picker (3 options), Create button disabled until valid.
- Creating adds the project to the top of the list with a
highlight that fades after 2 seconds.
- List item click navigates to a detail screen (stub is fine).
STYLE: match the attached frame — spacing, type scale, and the
colors in it. Do not invent additional features, screens, or
settings. Ship exactly this scope.
In Figma Make, select the frame and attach the spec as the prompt. In v0 or Lovable, upload the screenshot with the same text.
Iterate in small, named moves — credits are real. Generation caps on free tiers punish vague thrashing. One change per prompt: "The modal's Create button enables even when name is empty — fix the validation." Screenshot-diff against your frame and fix the two or three visual drifts that matter for the test; ignore the rest. When a generation goes sideways, revert and re-prompt rather than stacking corrections on a broken base.
Add the one deliberate failure state. Real flows fail, and tests that never show failure measure optimism. Add it explicitly: "When a project named 'Q3 Launch' is created, simulate a save error: show the error state with retry. Retry succeeds." Watching a participant meet an error tells you more about your design's honesty than ten happy paths.
Dry-run, then deploy to its actual job. Run the full task yourself twice — once as intended, once trying to break it. Fix only what would derail a session. Then share the link for the usability test or demo, and note in your test plan which behaviors are real and which are stubbed, so observed friction gets attributed to design rather than to prototype scaffolding.
Prototype platforms host your artifact on their infrastructure — do not paste real customer data, credentials or unreleased pricing into prototype content, and use placeholder data that cannot leak anything if the share link travels further than intended.
The behavior spec you wrote in step 2 is not throwaway even though the prototype is — it is the seed of the handoff spec pack (pb-12), already validated by the fact that a machine could build the flow from it.