September 29, 2026

From Figma to Cursor: Building a Prototype That Actually Works

I've been designing in Figma for years, and I love it. But lately I've been wanting more. I've grown tired of spending countless hours prototyping within Figma's interface. Yes, it works well for small interactions, but it takes so long for major applications. So I started experimenting with turning Figma files into real, working prototypes using Cursor.

My first thought: this is either going to be magic or a total mess.

Spoiler: it works surprisingly well... "Why didn't I try this sooner?" well.

Why try this method?

Figma prototypes are great for showing the idea. But a prototype built in code does something Figma can't quite pull off: it lets people see the product in action.

  • Developers see how things actually work. Menus, navigation, and interactions behave the way they will in the real thing, so there's less guesswork at handoff.
  • Stakeholders get something real to react to. Instead of "imagine this part works," they can click around and feel it.
  • You can test with users before development starts. That means catching problems while they're still cheap to fix, not after they're already built.

And honestly, building all of that by hand in Figma would take forever. Every interaction, every state, every connection.

How I Did It

Here's the setup I landed on. It looks like a lot of steps, but most of them you only do once.

  1. Install Cursor on your laptop.
  2. Install GitHub Desktop on your laptop.
  3. Install the Figma plugin inside Cursor and authenticate your account.
  4. Open your Figma file in Dev Mode and select Set Up MCP Server. This is what lets Cursor actually "see" your designs.
  5. Head back to Cursor and have it build out the screens you've selected.
  6. Iterate on the prototype until it's working like you want it to (note: this is the tedious part).
  7. Connect Cursor to GitHub.
  8. Create a repo in GitHub and turn on GitHub Pages so the prototype gets its own live link.
  9. Push the prototype to GitHub from Cursor.

And that's it! You end up with a real, clickable prototype with a link you can share with anyone. There's something so satisfying about sending someone a link and knowing they'll see exactly what you intended, in action.

One note: you'll need paid GitHub and Cursor accounts for this. But it's a drop in the bucket compared to the time you'd spend prototyping by hand in Figma.

Reality Check: It Took a Few Rounds

I'd love to say I followed those steps and a perfect prototype popped out the other side. It did not.

The first version was a decent start, but it was clear pretty quickly that Cursor needed more direction from me. So I went back in and started getting specific:

  • Tweaking the designs. Some screens needed adjustments once I saw them working, so I had Cursor modify things.
  • Spelling out the design system. I gave clearer instructions about which design system the files were built on and how its components and tokens should be used, so it stopped improvising its own versions of things.
  • Setting up the demo data. I explained exactly how I wanted data entered and displayed for the demo, so the prototype showed realistic content instead of placeholder filler.

Each round got it closer. It took multiple passes of reviewing, clicking through, spotting what felt off, and giving more precise direction before it was working decently. But I'll be honest: watching it come together a little more each round was half the fun.

That's not so different from any design process. The first draft is rarely the final one.

And those rounds taught me the biggest lesson of all: the more structure and clarity I gave it, the better the result. Which brings me to the nerdy part.

Okay, Let's Get Nerdy

Here's the part that makes this work, and the part most "look what I built" posts skip: the design system. (Fair warning: this is where I get really excited.)

My working files aren't a pile of one-off components. They're connected to an attached design system library, and everything in them is built from it: components, variables, and tokens. That's what lets the prototype come out built from the same parts I designed with, instead of a rough approximation. Through the Figma MCP server, Cursor gets the actual structure: the layer hierarchy, auto layout, the components being used, and the variables behind every value.

Variables and tokens are the secret sauce. I set my system up in layers:

  • Primitives are the raw values: the color scales like gray-900 and brand-600, plus a spacing scale built on a 4px base.
  • Semantic tokens point to those primitives and describe what they're for: text-primary, border-primary, spacing-xl, radius-md. The best part is that each one holds a light-mode and a dark-mode value, so text-primary is a dark gray in light mode and flips to near-white in dark mode without touching a single component.

Because the prototype pulls in semantic tokens instead of hex codes, the code reads like a real codebase: CSS custom properties with meaningful names instead of hard-coded values scattered everywhere. Change the token once, and it updates everywhere. Same as in Figma.

Components carry the logic. A button in my design system isn't just a rectangle with text on it. It's a component with properties: variants for size and hierarchy (primary, secondary, tertiary), booleans for things like "has icon," instance swaps for which icon, and states like default, hover, focused, and disabled. When those properties are set up cleanly in Figma, they translate almost one-to-one into props in code: size="sm", hierarchy="secondary", isDisabled.

And because the states are already designed, the build knows what a dropdown looks like open vs. closed, or what a nav item looks like when it's active. That's how menus and navigation come out behaving like real UI instead of looking like pictures of it.

Garbage in, garbage out. Here's the honest truth: this only works as well as your file hygiene. The things that made the biggest difference for me:

  • Auto layout everywhere. It maps almost directly to flexbox, so spacing and alignment survive the trip into code.
  • Clear, consistent names. For layers, components, and properties. "Frame 427" tells the build nothing. "Nav item / Active" tells it everything.
  • No detached instances. A detached component is just loose shapes, and it loses its connection to the system.
  • Variables bound to properties, not typed in by hand. If a color is typed as a hex code instead of linked to text-primary, the build has no idea it's part of your system.

If your file is tidy, the prototype is tidy. If your file is chaos, well… you'll get a very faithful reproduction of the chaos.

Let's be real: clean files are hard. Deadlines happen. Someone asks for "just one quick change," and suddenly there's a detached instance with a one-off tweak in an otherwise perfect screen. Nobody sets out to make a messy file. It happens.

In a static workflow, that mess stays mostly hidden. When a clean file means a better prototype, tidying up finally feels worth it.

It's a loop, not a handoff. The old way was linear: design, hand off to dev with notes, and hope for the best. With the design system as the shared source of truth, it becomes a loop. I can design in Figma, build in Cursor, notice something feels off once it's actually clickable, and go back and fix it at the system level. I can iterate on behavior, not just layout.

The Takeaway

The design thinking still happens in the design. The tokens, the components, the structure: those are decisions I made, and this workflow just carries them into code faithfully. The better the system, the better the prototype.

What I'm most excited about is the bigger picture, and I can't stop thinking about it.

For as long as I've been doing this work, there's been a gap between design and development. Designers hand off static files and notes. Developers interpret them. It's a clunky system at best.

This workflow shrinks that gap in a real way. When a designer can hand off something that already works, the whole conversation changes. Instead of "what should this menu do?" it becomes "here's how the menu works, does it feel right?" Developers get a head start built on the same tokens and components they'll use in production. Stakeholders stop nodding along to mockups and start giving real feedback. And we can test it with users before real work begins.

I'm curious how far we can take this. A few things I want to explore next:

  • Making clickable prototypes a standard part of design reviews
  • Tighter connections between Figma components and the real code components developers already use
  • Testing with users earlier and more often, with prototypes that feel like the real thing
  • Getting designers and developers working from the same source of truth from day one

Working this way gives designers and developers a shared language and a lot more time to spend on the parts that really matter. I can't wait to keep learning, keep building, and share what comes next.

October 1, 2025

Adventures in FUI work on a Film

I had the honor of being recommended to work on a film being produced here in Birmingham that needed custom UI prototypes on set. I love movies—I’ve been going to Sidewalk Film Festival religiously for years—so stepping behind the scenes to do what I do best was an incredible, collaborative adventure.

The production needed a dating app interface for a classic “meet cute” moment. A major company had product placement in the film, so they sent over some prototype files in Figma. My first thought: easy peasy—I’ll tweak these, load them up, and we’ll be ready to roll.

Spoiler: it was not that simple.

The Problem

The files they sent… didn’t exactly cooperate.

  • Figma requires internet. Which is fine for design reviews, but not so fine for a film set where Wi-Fi and cellular connections can’t be trusted.
  • The prototypes glitched. White screens after a swipe or two—if you even made it that far.
  • They sent iPhone files. We were filming on Android. Cue facepalm.

Clearly, I had to improvise.

Rebuilding the Prototype

I pivoted to Proto.io, which lets you download prototypes for offline use. I rebuilt the swiping feature there to make things seamless. But soon discovered another issue: Proto.io’s Android app had an aspect ratio bug. On a brand-new Pixel 10 Pro, the prototype would stubbornly show white bars on the sides. No full-screen option. No fix.

So after hours of rebuilding, I realized I needed another solution.

The Workaround

I exported the prototype to HTML, zipped up the assets, and loaded them onto the phone with an sHTTP server app. Android, of course, tried to scatter my files into Photos and Documents, so I had to wrangle everything back into place. Then came the pixel density problem—the prototype was about 35 pixels too big. Back to the drawing board to resize everything properly.

Oh, and did I mention the original assets were Apple-specific? So I made myself a real Android login to the dating app, grabbed screenshots, and recreated the UI from scratch to make sure it looked accurate on set. Ironically, even on shoot day, the official Android files the company finally sent still glitched out with white screens and had iPhone menu bars left in.

Thankfully, my rebuilt version worked.

Extra Asks

Like any good production, there were last-minute requests:

  • Scrolling profile view. I added it literally the night before so the love interest’s profile could appear on camera.
  • Green screen mode. I swapped the app’s background to a specific blue that minimized reflections on the actor’s hands.

On Set

Once we got rolling, everything went smoothly. I worked with the props team to manage the phone between takes, reset the prototypes, and switch between green screen, scrolling, and swiping modes as needed. The actress using the phone was tech-savvy and even learned to reset it herself, which made shooting a breeze.

By the end of the day, I had learned how to:

  • Adapt to a film set’s fast-moving needs
  • Prototype a dating platform from scratch
  • Make it run offline as a standalone Android app
  • Troubleshoot pixel ratios, servers, and kiosk settings under pressure

The Takeaway

Was it chaotic? Yes. Did I regret a few tool choices along the way? Definitely. But in the end, the prototype worked, the shoot went smoothly, and I felt proud knowing I played a small but significant part in bringing movie magic to life.

Sometimes design isn’t about perfect conditions—it’s about solving problems creatively, even when the Wi-Fi’s down and the files are glitching.

Most of all, I loved the entire process. It was such a fun challenge to merge my design skills with the fast-paced energy of a film set. I’d jump at the chance to do more movie work in the future—it’s an exciting space where tech, storytelling, and creativity collide.


January 12, 2018

Why we emphasize discovery (and what that is anyhow)


Published on the Range Blog in 2018

If you reach out to Range for an estimate, you’ll probably receive a quote that includes “Discovery.” It’s a fun, albeit nebulous, word that means our team works with you to unearth important information.

What is Discovery?

It looks different from project to project but the basic approach is the same. Our team brings questions and your team brings responses. Then we talk through the gray or tricky stuff together. At the end, everyone has a better idea of where to go and how to get there.

This is where the term Discovery comes from – our team discovers more about your business, pain points and how we can help. Your team discovers more about how we work and how we’d like to solve your frustrations. Most of our clients walk away understanding their own goals, audience and brand better than before.

What happens in Discovery?

Our team brings up topics like:

  • Your business: Stories are powerful and, in the first part of Discovery, our team wants to hear the true story of how your business or idea came about. We also want to hear about the problem(s) you’re solving and your ideas for the future.
  • Your audience: When our team asks about your Audience, we’re asking about the people who interact with your brand and the people you’d like to interact with your brand. We want to hear what they love, what they hate and what they particularly love about you.
  • Your brand: A lot of our clients don’t have detailed brand guidelines and that’s okay. When our team brings up your brand, we’ll ask you about who you are now and who you’d like to be a few years from now. We’ll also ask you to describe your brand personality. For example, are you more serious or more playful?
  • Content: The words on your site are pretty important. And, for a lot of our clients, so is the content on their blog. Our team asks a lot of questions about content strategy, goals and voice. It helps us get to know your brand better and make sure your website advances your content, not hinders it.

There are a lot more questions we can (and do) ask, but these are the basics for most projects.

What’s the result?

In addition to some unquantifiable momentum, Discovery clearly outlines Big Problems and how to fix them in the context of your business, brand, audience, and content. Chances are we’ve solved your Big Problem before; Discovery helps our team know how to solve it in your unique setting.

In terms of deliverables (an output our team gives to you), that looks like Site Goals or terms of success. It can also look like audience profiles or user workflows, depending on your project.

Why does it matter?

The deliverables that come out of Discovery are things our team and your team will reference throughout the rest of the project. Site goals help our team determine whether a new feature or design element is worth including. Audience profiles help determine whether landing pages meet customer needs. Our team checks both of these often to make sure your project is heading in the right direction.

Discovery is valuable for what it provides, but it’s also valuable for what it prevents. A detailed conversation at the beginning of the project helps prevent questions like, “why wasn’t this discussed earlier?” and “how come no one knew about this requirement?”.

Do you do any projects without this?

On very rare occasions, yes. Usually, no. And really, we don’t ever want to skip discovery. Neither do our clients. Discovery meetings are fun (as in actually fun, not just endurable) and they motivate every team member to do their piece. Even if most of the information our team would ask for is already available, we don’t want to skip the opportunity to get to know you and kick things off on a good note.

Can you answer more Discovery questions?

You bet! If you have more questions, give us a shout. We’d love to chat about our process and what this piece looks like.

August 16, 2017

Purpose-Driven Productivity

Posted on the Range Blog in 2017
This post could come across as anti-productivity. To be clear, I’m all for productivity. I think my team and I have amazing skills that we can and should optimize this week.

What I am not for is haphazard productivity – the pursuit of crossing something off a todo list as fast as possible (just because it’s there) to get to the next item (just because it’s there).

If we have a limited amount of mental and physical energy each day, I want my team working on the right tasks and some meaningful end goal. I want our productivity to be purpose-driven.

What most posts don’t mention

But most productivity posts I read don’t focus on why we should be productive. They’re full of 12 secrets or 7 steps or 5 ways to squeeze every minute of a work day. And while many of these articles actually are full of very good and helpful tips, they don’t hone in on the purpose of our productivity. They don’t start with why.

Instead, they make a handful of assumptions.

Productivity assumptions

Most authors assume your answer to “why should I be productive?” is one of the following:

  1. You’d like a raise. “Do more, make more” is an unwritten mantra in your company so you hustle to do more.
  2. You enjoy the feeling of being productive. Completing tasks boosts your self-esteem so you check off every box you can find.
  3. There’s something else you’d rather be doing. You’re in it to win it…just not at your day job. You knock work out fast so you can spend more time elsewhere.
  4. You crave control. Sure, you’d like to be more productive, but what you’re really after here is controlling your time as much as possible.
  5. You’d like relief. Your work day feels something like drowning and if someone could just throw you a life ring, that’d be great.

I don’t think many of these reasons, these whys, are inherently awful, but a lot of them look like they have bad side effects. For example, burnout seems imminent with the first two whys. And the third and fourth? They don’t necessarily lead to better work, just to treading water.

Is that where we want all this cultivated time and energy to lead – to burnouts or treading water, just-barely-surviving?

The big what-if

What if we started with more meaningful, more purposeful whys?

What if our productivity hinged on these kind of whys:

  • Our work has a significant and positive impact on our teams, and we want to optimize that.
  • Our efforts are part of a larger, meaningful company vision and we care to advance it.
  • The things we create impact society in a good way and we want to spread good influence.
  • What we produce paves the way for others to succeed and we want to construct a clear and helpful path.

What might we produce if we did more for these kind of reasons as opposed to crossing off to-dos for the first kind of reasons? Where might our work lead us?

Give a purpose-driven approach a try. Identify a distinct purpose for your efforts, put all those good tips to work, and see if you and your team can’t accomplish some seriously meaningful goals.

May 31, 2017

Paradise Gold: A Sara Cannon Art Opening at TrimTab Brewing

Sara Cannon Art is back at Trim Tab brewery! Stop on by and drink good beer, get some food from Tropicalio food pop up, and listen to great tunes curated by theafterparty!
Read more

January 7, 2016

Pushing the Creative Limit

This post, adapted from a lightning talk that Sara Cannon gave at WordCamp US, is about creativity and the ever present push to continually find that spark or that idea. We feel that this doesn't just apply to design, but to other mediums as well.

Read more

May 29, 2014

Product Review: Quirky + GE Aros Smart Window Air Conditioner

My house gets really hot in the Alabama heat. I have central AC controlled by a Nest Learning Thermostat. But the upstairs is decidedly hotter in this 1912 house despite new insulation in the attic. For a few months out of the year, the upstairs rooms need an extra boost to keep things comfy without freezing out the downstairs and making the power bill insane.

I had been using a fridgid air for a few years and decided to put that in a different room and "upgrade" to a tech savvy model: the Quirky + GE Aros Smart Window Air Conditioner. It's been an interesting change with a lot of pro's and con's. Let me lay it out for you:

Pro's:

  • syncs to your smart phone for easy-anywhere control.
  • the wink app knows when your gone and when your home because of your phone's location and will turn on or off the unit. amazing.
  • the wink app keeps track of your budget for running the unit to save you money and energy
  • the look of the unit is incredibly more beautiful than normal models
  • despite being not functional, the wings on the unit are pretty
  • the UI is simple and easy to use

Con's:

  • the unit came with two detached parts that were not in the instruction assembly manual. put those on first before installing the unit. they hold the wings in place.
  • the wink app keeps logging me out and its a pain to have to enter your password from bed when you want to adjust the unit.
  • the unit blows air up out of the top instead of straight into the room. I have made a modification using a Baseboard Register Air Deflector that works pretty well.
  • they are pretty, but the wings on the unit are flimsy roller shades that do not seal well and let bugs in
  • the unit is louder than my fridgid air
  • the blue lights are very bright but seem to auto shut off after a bit

Annoying log in screen when I just want to turn the unit down

Insane Customer Service

I reached out to Quirky, they have excellent customer service. They are even mailing me more bug-proof wings to install on my machine after telling them about the issue. Quirky even offered to have me speak directly to an app developer/technician because my phone keeps logging out. I don't think I've had such a great same-day response with a product before.

Conclusion

I really think that the model needs some improvements, but this is expected of a first run product. Hopefully they'll improve the unit significantly on the next model. I am not sure if I am happy shelling out the amount of money that I did considering the con's, but I am keeping the unit anyway. Technology makes me happy.

disclosure: this post has amazon affiliate links in it. ;)

May 28, 2014

Here’s to you, Maya Angelou.

Here's to you, Maya Angelou. Thank you for living a beautiful life of encouragement, wisdom, and grace.

Nothing can dim the light which shines from within

- Maya Angelou

August 22, 2013

WordCamp Birmingham 2013 is this weekend!

avatarIt is happening this weekend! Yet another #WPYall WordCamp Birmingham! Brian Krogsgard, Andrew Searles, and I have been working relentlessly to make it the best camp yet! We're so excited for the awesome line of speakers, incredible sponsors, new venue, and more. If you live anywhere in the southeast, please register now! #WPYall

Sara Cannon is a Product Designer crafting thoughtful digital experiences - from software products to film | UI • UX • Web • Brand
She's also an Artist.

Do you have a project she can help you with? Contact Sara at sara@saracannon.com.