React Delivery
Turning wireframes into production React interfaces
A wireframe is a promise, not a specification. It says roughly where things go and what they mean, but it leaves the hard decisions — spacing rhythm, responsive behaviour, empty and error states, what happens when the data is ten times longer than the sample — to the person building it. My job as a front end engineer is to keep that promise while filling every gap with intent.
Over the past four years I've built interfaces from every kind of starting point: pixel-perfect Figma files, whiteboard photos, a paragraph in a Jira ticket, and once a napkin sketch sent over Viber. The process below is what survived all of them. It's not a framework — it's the sequence of decisions I make, in the order I make them, so the result is something a client can put in front of real users without apologising.
Read the wireframe for structure first
Before writing a line of JSX I read the wireframe the way an editor reads a draft: what is a section, what is a card, what repeats, what's navigation versus content. That reading becomes the component tree, and the component tree is what everything else hangs off. If two blocks look 80% alike, I decide right then whether they're one component with variants or two components that happen to rhyme — deciding late is how you end up with a `Card` that takes fourteen props.
I also mark what I call the load-bearing content: the pieces that come from a database or CMS and will change length, count, and language. A heading that's hardcoded in the wireframe as 'Our Services' is one thing; a project title typed by a client is another. The second kind gets defensive treatment — truncation rules, min-heights, wrapping behaviour — from the very first commit.
Block the layout before touching pixels
My first pass is deliberately ugly: semantic sections, a single content container, and the grid — nothing else. Getting the skeleton right early means the responsive story is almost free. Collapsing a two-column grid to one column is a one-line change when the structure is honest; it's an afternoon of surgery when layout was faked with margins and absolute positioning.
I test the skeleton at three widths before styling anything: a small phone, a tablet, and a wide desktop. Not because those are magic numbers, but because if the structure holds at the extremes and the middle, it holds everywhere. Only once the layout survives all three do I invest in the finish — typography scale, borders, shadows, motion. Polishing pixels on top of a shaky layout is the most expensive kind of wasted work, because you get to do it twice.
Design tokens keep five pages feeling like one product
Every colour, radius, and spacing value routes through CSS custom properties. That single indirection is what lets an entire interface flip between light and dark themes without touching a component, and it keeps a five-page site feeling like one product instead of five products that share a logo.
The discipline matters more than the tooling. Whether it's Tailwind arbitrary values referencing tokens, SCSS variables, or a theme object, the rule is the same: components never know a hex code. When the client inevitably asks to 'warm up the greys' three days before launch, that request is a five-minute change instead of a find-and-replace across forty files.
Ship the states nobody drew
The wireframe shows the happy path: a full list, a loaded image, a successful submit. Production shows the loading skeleton, the empty list, the failed request, the 3G connection, and the too-long string. Building those in from the start is the difference between a demo and something a client can actually deploy.
My checklist per screen is short and brutal: What does this look like while loading? With zero items? With one item? With an error? With content twice as long as the design assumed? If I can't answer all five, the screen isn't done — no matter how good the happy path looks in a screenshot.
Feedback loops beat big reveals
The worst way to deliver frontend work is to disappear for two weeks and return with a finished page. Clients don't review abstractions well; they review things they can click. I push work-in-progress to a preview URL early — skeleton first, then one polished section — so course corrections happen when they're cheap.
This also protects the relationship. A client who sees the layout at day two and says 'actually the testimonials should come before the pricing' has made a free request. The same request at day twelve is a negotiation. Most 'difficult client' stories I've heard are really 'late feedback' stories in disguise.
What production-ready actually means
Production-ready is a specific bar, not a feeling: the layout holds from 320px to 4K, every interactive element is reachable by keyboard and readable by a screen reader, images are sized and lazy-loaded, the metadata is real, and the states nobody drew all exist. It's the difference between 'the design is implemented' and 'the product is finished'.
None of this is glamorous, and that's the point. The craft in frontend work isn't in the parts that make good screenshots — it's in the hundred small decisions that make an interface feel inevitable, like it couldn't have been built any other way. Wireframes start that story. The engineering finishes it.
