◆ REACT & REACT NATIVE MASTERY     ◆ TYPESCRIPT FIRST     ◆ FROM APPRENTICE TO SENIOR     ◆ 7 STAGES     ◆ REAL PROJECTS, NO FLUFF     ◆ 40–52 WEEKS     ◆ REACT & REACT NATIVE MASTERY     ◆ TYPESCRIPT FIRST     ◆ FROM APPRENTICE TO SENIOR     ◆ 7 STAGES     ◆ REAL PROJECTS, NO FLUFF     ◆ 40–52 WEEKS    
// master curriculum · v2025

REACT &
REACT NATIVE
MASTERY

Your mentor's complete map — from zero to senior engineer, in TypeScript, with real work every step of the way.

7
Stages
52
Max Weeks
40+
Real Builds

// The Apprentice's Pact

This is not a list of tutorials to watch. It is a forge. You will be given concepts, shown the patterns, then immediately thrown into real code. The only way to become a senior engineer is to make senior-level decisions — hundreds of times — until they become instinct. Every stage ends with a project you should be embarrassed to show at first, and proud to show after iteration.

// How to Use This Roadmap

  • Read the tasks, then build before reading resources
  • Check off tasks as you genuinely understand them
  • Each assignment must be GitHub-published
  • Shortcuts are for speed — learn the long way first
  • If you feel comfortable, you're moving too slowly
  • TypeScript is non-negotiable from day one
  • Re-read this map every 2 weeks and update your pace
Total Timeline
Stage 01
JS & TypeScript Core
Wk 1–6
Stage 02
React Foundations
Wk 7–12
Stage 03
React Intermediate
Wk 13–20
Stage 04
React Advanced
Wk 21–28
Stage 05
React Native Basics
Wk 29–34
Stage 06
React Native Advanced
Wk 35–42
Stage 07
Senior Edge
Wk 43–52
Stage 01
01

JavaScript & TypeScript Core

⏱ Weeks 1–6 ⬤ Beginner ⬡ Foundation
Stage Progress
📋
Core Tasks
  • Closures, scope, hoisting, the event loop
  • Prototypal inheritance vs. class syntax
  • ES6+: destructuring, spread/rest, optional chaining, nullish coalescing
  • Promises, async/await, error handling patterns
  • Array methods: map, filter, reduce, flatMap, find — no loops
  • Modules: ESM import/export, CommonJS difference
  • TypeScript: types, interfaces, union/intersection types
  • TypeScript generics — write 10 generic utility functions
  • TypeScript utility types: Partial, Required, Pick, Omit, Record, ReturnType
  • tsconfig.json: strict mode, paths, target — understand every key flag
  • Type narrowing: typeof, instanceof, discriminated unions
  • Write 50 TypeScript katas on Exercism/TypeHero
📚
Resources (curated & uncommon)
DOCS MDN — JavaScript Reference: Read the spec-level descriptions, not just examples. Build your mental model from source.
🔑 HIDDEN TypeHero.dev — Type-level puzzles that force you to think in the type system, not just around it.
BOOK "Programming TypeScript" by Boris Cherny — Chapter 6 on advanced types is worth the whole book price.
🔑 HIDDEN Total TypeScript (Matt Pocock) — Pro Essentials course; watch 1 module, immediately recode from scratch.
VIDEO Jake Archibald: In the Loop (JSConf 2018) — The definitive video on the event loop. Watch twice.
TOOL Exercism TypeScript track — 100+ exercises graded by mentors. Enables real feedback loops.
🚀
Simulation Assignment
Build: Typed Promise Utility Belt

Create a TypeScript library (no React yet) of 8 async utility functions — fully typed generics, JSDoc, and unit tests. Think of it as your own mini Lodash-async.

  • retry<T>(fn, times): retries async fn on fail
  • timeout<T>(fn, ms): rejects after ms
  • memoizeAsync<T>(fn): caches by args
  • batch<T>(items, fn, concurrency): parallel with limit
  • All functions typed with strict generics
  • 100% test coverage with Vitest
  • Published as a GitHub repo with a README
Shortcuts & Mentor Tips
TS Strict First

Set "strict": true in tsconfig immediately. Never turn it off. Every error it shows is a future bug.

Infer > Annotate

Let TS infer wherever possible. Only annotate function params, return types, and API boundaries.

Never `any`

Use `unknown` instead of `any`. Then narrow it. `any` is a silent type-system hole.

as const Pattern

Use `as const` on config objects and string arrays to get literal types. Unlocks powerful patterns.

// as const gives literal types const ROUTES = { home: '/home', profile: '/profile', } as const; type Route = typeof ROUTES[keyof typeof ROUTES]; // Route = '/home' | '/profile'
Stage 02
02

React Foundations

⏱ Weeks 7–12 ⬤ Beginner–Mid ⬡ Core Rendering
Stage Progress
📋
Core Tasks
  • JSX: what it compiles to, why keys matter, reconciliation basics
  • Functional components with typed props (React.FC vs plain functions)
  • useState, useReducer — know when each fits
  • useEffect: dependency arrays, cleanup, avoiding common pitfalls
  • useRef: DOM refs vs mutable ref container
  • useMemo, useCallback — learn WHEN they help (and when they don't)
  • Context API: creating, typing, providing, consuming
  • Component composition: children, render props, compound components
  • Forms: controlled vs uncontrolled, validation pattern
  • React Router v6: routes, nested routes, loaders, useNavigate
  • Vite: set up a project from scratch, understand the config
  • ESLint + Prettier: configure for React + TypeScript
📚
Resources
DOCS react.dev — Read every page of "Learn React" and "API Reference." This is your primary source, not YouTube.
🔑 HIDDEN Dan Abramov's "A Complete Guide to useEffect" (overreacted.io) — Read it 3 times. Internalize the mental model of synchronization vs. lifecycle.
🔑 HIDDEN "Before You memo()" by Dan Abramov — Teaches you composition before optimization. Most devs do this backwards.
VIDEO Jack Herrington — "No Bs TS" — YouTube series on typing React properly. Practical and opinionated.
TOOL React DevTools Profiler — Install it day one. Start reading render cycles from the very beginning.
BOOK "React TypeScript Cheatsheet" (github.com/typescript-cheatsheets) — The most complete reference for typing React patterns. Bookmark it.
🚀
Simulation Assignment
Build: Personal Finance Tracker

A fully client-side budgeting app with no backend. Real-world state management practice.

  • Add/edit/delete transactions (typed with discriminated unions)
  • Category breakdown with live chart (use Recharts)
  • Filter by month, category, type
  • Persist to localStorage with a typed custom hook
  • All state managed with useReducer + Context
  • Full TypeScript — no implicit any errors
  • Deploy to Vercel or Netlify
Shortcuts & Mentor Tips
Children Typing

Use `React.PropsWithChildren<T>` or explicit `children: React.ReactNode` for wrapper components.

Event Typing

Type handlers inline: `(e: React.ChangeEvent<HTMLInputElement>)`. Hover over the element to discover the type.

Avoid FC<>

Prefer plain function syntax over React.FC — it's more flexible, gives better error messages.

Stable References

Every function passed to a child or dep array needs useCallback. Every computed value needs useMemo. Check with the profiler, then optimize.

💡

Mentor secret: When you can't understand a re-render, add a console.log('render:', Date.now()) at the top of the component. Then open the Profiler. Most engineers never develop this instinct before their third year — build it in month two.

Stage 03
03

React Intermediate

⏱ Weeks 13–20 ⬤ Mid-Level ⬡ Data & Architecture
Stage Progress
📋
Core Tasks
  • Custom hooks: extract and reuse stateful logic, type them fully
  • TanStack Query (React Query): queries, mutations, invalidation, optimistic updates
  • Zustand: global state with typed slices, devtools, middleware
  • Zod: schema validation, type inference from schemas, safe parsing
  • React Hook Form + Zod: fully typed form + validation pipeline
  • Error boundaries: class-based, react-error-boundary library
  • Suspense: lazy loading routes, components, data (experimental)
  • Testing with Vitest + React Testing Library: render, user-event, queries
  • Accessibility (a11y): ARIA roles, keyboard nav, screen reader testing
  • Component library: build 10 generic, typed, accessible components
  • Next.js 14+: App Router, Server Components, client/server split
  • API integration: fetch with typed responses, error states, loading states
📚
Resources
DOCS TanStack Query Docs — Read the "Guides" section entirely, especially caching, background refetch, and mutations.
🔑 HIDDEN Dominik Dorfmeister's Blog (tkdodo.eu) — Author of React Query. Every post is a masterclass. Read all 20+ in order.
🔑 HIDDEN "Testing Trophy" by Kent C. Dodds — Understand what to test and at what layer. Most devs waste time on the wrong tests.
COURSE Epic React by Kent C. Dodds — The exercises are the entire value. Do every one. Skip the lectures if needed, not the exercises.
TOOL Zod + tRPC combination — Even if you don't use tRPC in production, build one project with it to understand end-to-end type safety.
🔑 HIDDEN Storybook — Build your component library in isolation. Forces you to think in prop contracts, not page contexts.
🚀
Simulation Assignment
Build: Full-Stack SaaS Dashboard (Next.js)

Clone the core UI of a real SaaS tool (Vercel's dashboard, Linear, or Notion). Backend optional (mock with MSW).

  • Next.js App Router — server and client components correctly split
  • TanStack Query for all data fetching with loading/error states
  • Zustand for UI state (sidebar, modals, filters)
  • React Hook Form + Zod for 3 different form types
  • 10 tests (RTL): at least 3 testing async behavior
  • Storybook: document 5 core components
  • Zero TypeScript errors, strict mode on
Shortcuts & Mentor Tips
Query Key Factory

Create a typed query key factory object. Never write inline string arrays as query keys — it kills consistency.

Zod Inference

Use `z.infer<typeof schema>` for all API response types. Single source of truth for type + validation.

MSW for Testing

Mock Service Worker lets you test data-fetching flows without a real backend. Set it up once, use forever.

Server Components

Default to Server Components in Next.js App Router. Add 'use client' only when you need interactivity or browser APIs.

Stage 04
04

React Advanced

⏱ Weeks 21–28 ⬤ Advanced ⬡ Performance & Patterns
Stage Progress
📋
Core Tasks
  • React Fiber architecture: reconciliation, diffing, commit phases
  • Concurrent features: useTransition, useDeferredValue, Suspense boundaries
  • Advanced patterns: HOC, render props, compound components, headless UI
  • forwardRef + useImperativeHandle: when and why
  • Performance: virtualization with TanStack Virtual (replace any long lists)
  • Code splitting: React.lazy, dynamic imports, bundle analysis
  • Web Workers with React: offload heavy computation
  • Advanced TypeScript: conditional types, mapped types, template literal types
  • Design systems: theming with CSS variables, design tokens
  • Monorepo setup with Turborepo: shared packages, build pipelines
  • CI/CD: GitHub Actions for lint, test, type-check, deploy
  • Web Vitals: LCP, FID, CLS — measure and improve them
📚
Resources
🔑 HIDDEN React source code (github.com/facebook/react) — Read packages/react-reconciler. You don't need to understand it all, but seeing it demystifies everything.
🔑 HIDDEN "Patterns.dev" by Lydia Hallie & Addy Osmani — Free online book on React and JS design patterns. The performance patterns section is exceptional.
VIDEO Nadia Makarevich — "React advanced" talks (JSConf/React Summit) — Her talks on re-renders and closures are the clearest explanations available.
BOOK "Advanced React" by Nadia Makarevich — The only advanced React book written in the hooks era. Every page is practical.
TOOL Webpack Bundle Analyzer / rollup-plugin-visualizer — Visualize your bundle. Run it after every major dependency addition.
🔑 HIDDEN Chrome DevTools Performance tab — Record a user interaction, read the flame graph. This skill separates mid from senior.
🚀
Simulation Assignment
Build: Real-Time Collaborative Editor

A Notion-like block editor with real-time sync (use Liveblocks or Supabase Realtime). This forces concurrent state, optimistic updates, and performance at scale.

  • Virtualized block list — no performance drops at 500 blocks
  • useTransition for all typing/rendering flows
  • Optimistic mutations with rollback on error
  • Undo/redo with useReducer history pattern
  • Web Worker for markdown parsing
  • Bundle size under 200KB initial JS (check with analyzer)
  • Lighthouse score: 90+ on Performance
Shortcuts & Mentor Tips
Template Literals

Use template literal types to build typed route strings, CSS classnames, and event names. Massive DX boost.

useTransition

Wrap non-urgent state updates (filtering long lists, tab changes) in startTransition. Keeps UI responsive.

Headless First

Build logic-first components (headless), then layer styles. See Radix UI and TanStack Table for inspiration.

Profile First

Never memoize speculatively. Always profile first, then optimize exactly what the Profiler shows is slow.

// Conditional types — advanced TS type ApiResponse<T> = T extends string ? { data: string; type: 'text' } : { data: T[]; type: 'list' }; // Template literal types type EventName = `on${Capitalize<string>}`;
Stage 05
05

React Native Foundations

⏱ Weeks 29–34 ⬤ Intermediate ⬡ Mobile Core
Stage Progress
📋
Core Tasks
  • Expo vs bare RN: understand the tradeoffs and when to pick each
  • Core primitives: View, Text, TextInput, ScrollView, FlatList, SectionList
  • StyleSheet: how it differs from CSS, platform-specific styles
  • Flexbox in RN: defaultAxis differences from web
  • Navigation: Expo Router (file-based) + React Navigation v6 stacks, tabs, drawers
  • Platform APIs: Keyboard, Dimensions, StatusBar, SafeAreaView
  • Native modules: what they are, how to use community ones
  • Async Storage, SecureStore, MMKV for persistence
  • Image handling: Expo Image, caching, lazy loading, blurhash
  • Gestures: React Native Gesture Handler — Pan, Tap, Swipe
  • Keyboard avoiding patterns, bottom sheets, modals
  • App lifecycle: AppState, background tasks, deep linking basics
📚
Resources
DOCS Expo Docs (docs.expo.dev) — Start here, not with raw RN docs. Expo has vastly better DX for learning.
🔑 HIDDEN William Candillon — "Can it be done in React Native?" (YouTube) — The most educational RN animations channel. Watch 5 episodes to build visual intuition.
🔑 HIDDEN Expo Router docs — "File-based routing" — Modern way to build RN apps. Mirrors Next.js mental model, so it clicks fast.
COURSE "React Native — The Practical Guide" (Udemy/Maximilian) — Best bang-for-buck course. Skip theory sections, rebuild all projects in TS.
TOOL Reactotron — RN-specific debugging tool. Better than console.log for state, network, and async operations.
🔑 HIDDEN MMKV by Marc Rousavy — 30× faster than AsyncStorage. Use it by default for all key-value persistence. The GitHub README is the full tutorial.
🚀
Simulation Assignment
Build: Social Feed App (iOS + Android)

A Twitter/X-style feed. Forces you to handle all core RN patterns: lists, navigation, forms, persistence, and cross-platform parity.

  • Tab + Stack navigation (Expo Router)
  • Infinite scroll FlatList with skeleton loading
  • Post creation: image picker, text input, character count
  • MMKV persistence for draft posts and auth token
  • Pull-to-refresh with optimistic UI
  • Works on iOS Simulator AND Android Emulator identically
  • No TypeScript errors, proper platform-specific file extensions used
Shortcuts & Mentor Tips
.ios.tsx / .android.tsx

Split platform-specific code at the file level, not with Platform.OS conditionals inside components.

FlatList keyExtractor

Always use a stable, unique string — not index. Missing this is the #1 cause of list bugs in production RN apps.

getItemLayout

Implement getItemLayout on fixed-height FlatLists. Enables scroll-to-index and eliminates layout thrashing.

Avoid Inline Styles

Never write style objects inline. Use StyleSheet.create for memoization and RN's style optimization pipeline.

⚠️

Critical difference: RN's default flex direction is column, not row. This trips up every web dev for the first two weeks. Write it on a sticky note.

Stage 06
06

React Native Advanced

⏱ Weeks 35–42 ⬤ Advanced ⬡ Animations & Native
Stage Progress
📋
Core Tasks
  • Reanimated 3: useSharedValue, useAnimatedStyle, withTiming, withSpring
  • Gesture Handler + Reanimated: swipe-to-dismiss, draggable cards, bottom sheets
  • Skia (React Native Skia): custom drawing, gradients, canvas animations
  • New Architecture: JSI, Fabric renderer, TurboModules — read the RFC
  • Write a basic native module (Swift/Kotlin): expose a native API to JS
  • Push notifications: Expo Notifications, FCM, APNs setup
  • Background tasks: expo-background-fetch, expo-task-manager
  • Offline-first architecture: optimistic UI, conflict resolution
  • Deep linking: universal links (iOS), App Links (Android), Expo Router integration
  • Performance: Flashlist (Shopify), hermes engine, bundle profiling
  • OTA updates: Expo Updates, rollout strategy
  • EAS Build: set up build profiles, submit to App Store + Play Store
📚
Resources
DOCS Reanimated 3 Docs (docs.swmansion.com/react-native-reanimated) — The "Fundamentals" section is required reading. Do not skip the worklet explanation.
🔑 HIDDEN Reanimated + Gesture Handler recipes by Catalin Miron — GitHub + YouTube. He rebuilds production animations step by step.
🔑 HIDDEN Shopify Engineering Blog — FlashList — Read the technical post on why FlatList fails at scale and how FlashList solves it.
VIDEO "Rethinking Navigation" — Satyajit Sahoo (App.js Conf) — Deep understanding of Expo Router's architecture and design decisions.
TOOL EAS (Expo Application Services) — Cloud builds, OTA updates, and submission automation. Learn the full pipeline with a real app.
🔑 HIDDEN Marc Rousavy's talks (App.js / Chain React) — He built Reanimated, JSI bindings, and VisionCamera. Every talk is a deep dive into native architecture.
🚀
Simulation Assignment
Build: Fitness Tracking App — Production-Grade

A Strava/Nike Run Club–style app. This is your portfolio centerpiece. It must be shipped to TestFlight and Google Play Internal Testing.

  • Animated onboarding (Reanimated 3, Skia gradients)
  • Gesture-driven workout log (swipe-to-delete, drag reorder)
  • Custom animated progress ring (React Native Skia)
  • Offline-first with sync on reconnect (MMKV + TanStack Query)
  • Push notifications for workout reminders
  • Background step counting (expo-task-manager)
  • Shipped to TestFlight + Play Internal via EAS Build
Shortcuts & Mentor Tips
Worklets

Reanimated worklets run on the UI thread. Never reference JS-thread state inside them without `runOnJS()`.

FlashList First

Always use FlashList over FlatList for any list >50 items. Drop-in replacement, 10× faster.

EAS Profiles

Set up development, preview, and production build profiles early. Switching profiles mid-project is painful.

Hermes Always

Enable Hermes (on by default in Expo 50+). Smaller bundle, faster startup, better garbage collection.

// Reanimated 3 animated style const offset = useSharedValue(0); const animStyle = useAnimatedStyle(() => ({ transform: [{ translateX: withSpring(offset.value) }], })); // Runs entirely on the UI thread ⚡
Stage 07
07

The Senior Edge

⏱ Weeks 43–52 ⬤ Senior ⬡ Architecture & Leadership
Stage Progress
📋
Senior-Level Tasks
  • Architect a feature from scratch: write the RFC, pick the stack, plan the API contract
  • Lead a code review: give written feedback on a PR from a junior dev (find OSS to review)
  • Micro-frontend architecture: understand Module Federation, when it helps
  • Contribute to an OSS React/RN library: fix a bug, write a new feature
  • Security: XSS in React, token handling in RN, certificate pinning
  • Observability: Sentry integration (React + RN), custom error tracking, performance monitoring
  • Feature flags: LaunchDarkly or Unleash — implement without touching the UI layer
  • Mentor a mock junior: explain reconciliation, hooks rules, and the event loop in simple terms
  • Interview prep: solve 10 React-specific system design questions in writing
  • Write a technical blog post on something you struggled with in this roadmap
  • Mock interviews: 5 technical, 2 behavioral, 1 system design — record yourself
  • Build your portfolio: 3 projects on GitHub, each with a README, live demo, and architecture decision log
📚
Resources
🔑 HIDDEN "Staff Engineer" by Will Larson — Not React-specific, but defines what senior+ engineers actually do and how they think. Read it before interviews.
🔑 HIDDEN React RFC GitHub (github.com/reactjs/rfcs) — Read how new features are proposed. Understand the reasoning behind Server Components, Actions, and Compiler.
🔑 HIDDEN Gregor Hohpe — "The Architect Elevator" — Mental models for technical leadership and communicating complexity across levels.
TOOL Sentry Performance Monitoring — Set it up in both your web and RN apps. Learn to read traces and spans to diagnose production issues.
VIDEO React Conf talks (every year) — Watch the past 3 years of React Conf. This is the primary source for where React is heading.
🔑 HIDDEN Frontend System Design (frontendmasters.com/guides) — System design for frontend engineers. Most candidates are never asked these — prepare and stand out.
🚀
Final Capstone — The "I'm Hireable" Project
Build: Cross-Platform Productivity Suite

A web app (Next.js) + mobile app (Expo) sharing a monorepo with shared TypeScript packages. This is your proof-of-work. It should look, perform, and function like a real product that a paying user would use.

  • Turborepo monorepo: packages/ui (shared components), packages/types (shared TS types), packages/utils
  • Web: Next.js App Router, Server Actions, streaming, optimistic UI
  • Mobile: Expo + Expo Router, Reanimated 3 animations, FlashList, EAS Build
  • Shared auth: JWT with secure storage on mobile, HttpOnly cookies on web
  • Real backend: Hono or Next.js API routes, Drizzle ORM, PostgreSQL
  • Offline-first mobile with sync, push notifications, background tasks
  • CI/CD: GitHub Actions — type-check + test + build + deploy on every PR
  • Sentry monitoring on both platforms
  • Architecture Decision Record (ADR) document in the repo
  • Live on the web, TestFlight + Play Store internal testing
Senior Readiness Checklist

React Mastery

  • Explain reconciliation & Fiber without googling
  • Debug any re-render with DevTools Profiler
  • Write advanced TS generics for React patterns
  • Architecture a state management solution from scratch
  • Optimize Web Vitals to 90+ Lighthouse on a real app
  • Build accessible, tested component libraries
  • Teach Server Components vs Client Components tradeoffs

React Native Mastery

  • Build 60fps animations with Reanimated worklets
  • Ship to both App Store and Play Store via EAS
  • Debug native crashes with Flipper / native logs
  • Write a custom native module (Swift + Kotlin)
  • Implement offline-first with conflict resolution
  • Profile and fix performance bottlenecks with Systrace
  • Set up deep linking, push notifications, background tasks

Engineering Leadership

  • Write ADRs that junior devs can follow
  • Give constructive, specific code review feedback
  • Estimate project complexity with written justification
  • Communicate technical risk to non-technical stakeholders
  • Mentor at least one developer through a concept
  • Have an OSS contribution or published blog post
  • Pass a senior system design interview on camera
🎯

When you can check all 21 items above and explain every one to a stranger, you are interview-ready for a senior role. The projects are your evidence. The checklist is your standard. The blog posts are your voice. Go.