React · Next.js · TypeScript1 slot · June 2026

React developer portfolio

I'm a freelance React developer who ships production SaaS dashboards, AI-powered product surfaces, and Figma-to-React builds with TypeScript end-to-end. Every project ships with documented component APIs, a typed data layer, and Lighthouse 95+ performance and accessibility — built so your next engineer can extend it without a rewrite.

  • React 18 + Server Components with Next.js App Router
  • TypeScript end-to-end, no untyped boundaries
  • Documented component systems and design tokens
  • Tailwind, Radix, shadcn, Framer Motion
  • TanStack Query, Zustand, and route-level data fetching
  • WCAG AA accessibility and Core Web Vitals from day one
  • Figma to React conversion with pixel-accurate handoff
  • Component testing with Vitest and Playwright
Book a 30-min call
Selected case studies

Shipped work for the same brief.

Craft — inside a component

What a production React component actually looks like.

Hiring managers screening React talent want to see what a component looks like under the hood, not a portfolio of screenshots. The walkthrough below is one real component shipping on this site — the magnetic CTA button — and the decisions behind it. If this is the depth you screen for, the rest of my codebase looks like this.

Server-first by default, client only where motion lives

The button itself is a Server Component — pure markup, no JS shipped to the browser for the static case. The magnetic motion effect lives in a Client Component wrapper. Static buttons stay zero-JS; interactive ones pay only for the motion code. This is the App Router pattern most teams misuse by marking the whole tree client-side.

Typed component API, no any

Props are typed with a discriminated union — the button can be a link, a form submit, or a popover trigger, and the prop shape changes per variant. TypeScript catches the wrong combination at compile time. Children is ReactNode; className merges via cn(); ref forwards through with forwardRef and proper generic inference. No prop gets a default that masks a missing value.

Accessibility from the first commit

Focus ring uses :focus-visibleso keyboard users get the outline and mouse users don't. The motion effect respects prefers-reduced-motion — users with motion sensitivity get a static button, not a degraded experience. Disabled state sets aria-disabled and tabIndex=-1, not just visual opacity.

Design tokens, not magic numbers

Every color, radius, and spacing value comes from CSS variables that map to Tailwind's theme extension. When the design system changes a token, every component picks it up — no find-and-replace, no drift. The button doesn't know what “black” means; it knows what --foreground means.

Tested at the boundary that matters

Unit tests would prove the className composition works — which isn't the bug worth catching. Instead, Playwright covers the actual user paths: keyboard focus order, the popover opens, the form submits, the magnetic motion doesn't break layout. Tests at the user boundary, not the implementation boundary.

That's one component. A typical SaaS build has fifty of them. The discipline scales: typed APIs, server-first defaults, accessibility from commit one, tokens for everything, tests where users actually click.

Common questions

What founders ask before reaching out.

  • Do you take on freelance React projects from outside India?

    Yes. I work async-first on UTC+5:30 and have shipped for founders across North America, the EU, and APAC. Daily PRs and weekly walkthroughs mean you see progress in your timezone, not mine.

  • What's your stack inside React?

    Next.js App Router for SSR/SSG, TypeScript end-to-end, Tailwind and shadcn for styling, TanStack Query for data, Zustand for client state, Framer Motion for interactions, Vitest and Playwright for tests. I'll deviate when the build genuinely calls for it.

  • Can you convert a Figma file into a production-grade React component system?

    Yes. I read the file like a developer reads a spec: tokens, variants, interactions, edge states. The output is a documented component library with stable APIs, not throwaway pages.

  • How long does a typical React build take?

    A focused sprint — landing page, perf rescue, or single feature surface — ships in 5 to 7 days. A full SaaS frontend with auth, data layer, and admin panel typically lands in 4 to 8 weeks depending on scope.

  • Do you cover the backend too, or just React?

    Both. My strongest layer is React, but I cover the full MERN stack and Supabase when the build needs it. One engineer, one invoice, from Figma to deployed backend.

  • Why hire one freelance React developer instead of an agency?

    Fewer handoffs, faster decisions, and you get the person actually writing the code on every call. Agencies bill for project managers and the back-and-forth between design and engineering. Solo engagements remove that overhead and ship faster on most early-stage builds.

Related
Next step

Let's see if it's a fit.

30-minute call. No pitch, no slides. Tell me what you're building, including the AI parts, and the constraints. I'll tell you if I can help, and who else to call if I can't.

Book a 30-min call
1 slot · June 2026Usually replies within 24 hoursAsync-friendly · UTC+5:30