React Developer

The app is slow and nobody can say why.
That is a hiring problem.

React is easy to start and unforgiving at scale. The engineers we place have taken over other people's front-ends, found where the renders go, and left behind a codebase the next person can work in. They sit in your sprints full-time and stay on our payroll.

Rate band
$26–46/hr
Lead time
4–7 days
Minimum term
1 month
Overlap
4+ hrs
One keystroke

What a single character costs you

A real search box on a real dashboard. On the left, the component tree as we found it. On the right, the same tree after four days of work by one senior engineer — no rewrite, no new framework.

Before
331
component renders
After
15
component renders
Component treeBeforeAfter
<App>
10
<Layout>
10
<Sidebar>re-rendered because context held the whole app state
10
<NavList> × 24
240
<Main>
11
<FilterBar>the only component that should react to a keystroke
11
<ResultsTable>
11
<Row> × 300virtualised; only the visible rows now render
30012
<Chart>memoised — its props never changed
10

Measured with the React Profiler on a mid-range laptop, six-times CPU throttle. The fix was context splitting, memoisation where props were genuinely stable, and row virtualisation — in that order.

What we interview for

Five opinions we expect them to hold

Syntax is table stakes and easy to test. These are the judgement calls that decide whether your codebase is still pleasant in eighteen months.

State goes where it is read, not at the top

Lifting everything into one context is the single most common cause of a sluggish React app. Ours push state down and split contexts by update frequency.

The server is allowed to do work

Not every list needs client state. Server components, URL state and plain forms remove entire categories of bug before they exist.

Effects are a last resort

Most useEffect calls in a mature codebase are derived state, a data fetch that belongs in a query library, or a bug waiting for a race condition.

Accessibility is not a ticket for later

Focus management, keyboard traps, labels and roles get done while the component is being written, because retrofitting them costs five times as much.

A design system, not a folder of buttons

Tokens, variants and documented props — so the twelfth developer builds the same button as the first.

The stack

Familiar on day one

Core
React 19 · TypeScript · Vite / Next.js
State & data
TanStack Query · Zustand · Redux Toolkit · RHF + Zod
Styling
Tailwind · CSS Modules · Radix · shadcn/ui · Framer Motion
Testing
Vitest · Testing Library · Playwright · Storybook
Quality
ESLint · TypeScript strict · Lighthouse CI · axe
Seniority

Three bands, quoted honestly

Mid-level

3–5 yrs$26–32/hr

Builds screens from a design with review. Solid on hooks and forms; still learning where performance goes wrong.

Senior

5–8 yrs$32–40/hr

Owns a surface area. Sets the state strategy, reviews others' components, and can read a flame graph.

Lead

8+ yrs$40–56/hr

Owns the design system and the front-end architecture, and is the person your designers actually want in the room.

Send us the repo — or just the complaint

“It feels slow”, “nobody wants to touch it”, “the design system is three design systems”. Any of those is enough for us to pick the right engineer.