Skip to main content

Full-Stack Development in 2026: Complete Roadmap

mubaidr
Monday, February 16, 2026
Full-StackCareerWeb DevelopmentLearning PathJavaScript
Full Stack Development 2026 - Complete tech stack visualization with frontend, backend, and database

Full-Stack Development in 2026: Complete Roadmap

The role of a full-stack developer has evolved dramatically. In 2026, full-stack doesn't just mean knowing frontend and backend—it means understanding the entire development lifecycle, from database design to deployment, from performance optimization to security.

This comprehensive roadmap will guide you through becoming a successful full-stack developer in 2026.

The Modern Full-Stack Stack

Core Technologies

Frontend:
- TypeScript (mandatory)
- React/Vue/Svelte
- Next.js/Nuxt/SvelteKit
- Tailwind CSS
- TanStack Query

Backend:
- Node.js/Deno/Bun
- Hono/Express/Fastify
- PostgreSQL/MySQL
- Redis
- GraphQL/REST/tRPC

Infrastructure:
- Docker
- Kubernetes (basics)
- AWS/GCP/Azure
- Vercel/Netlify/Railway
- GitHub Actions

Learning Path

Phase 1: Foundations (Months 1-3)

JavaScript/TypeScript Mastery

// Essential concepts
const fundamentals = [
  "Closures and scope",
  "Async/await and Promises",
  "Event loop",
  "ES6+ features",
  "TypeScript types",
  "Generics",
]

HTML/CSS Deep Dive

/* Modern CSS features */
.container {
  display: grid;
  gap: 1rem;
  container-type: inline-size;
}

@container (min-width: 600px) {
  .item {
    grid-column: span 2;
  }
}

Phase 2: Frontend Specialization (Months 4-6)

Component Architecture

<script setup lang="ts">
// Nuxt 4 component
interface Props {
  title: string
  items: Array<{ id: string; name: string }>
}

const props = defineProps<Props>()
const emit = defineEmits<{
  select: [itemId: string]
}>()
</script>

<template>
  <div>
    <h2>{{ title }}</h2>
    <ul>
      <li v-for="item in items" :key="item.id" @click="emit('select', item.id)">
        {{ item.name }}
      </li>
    </ul>
  </div>
</template>

State Management

// Zustand example
import { create } from "zustand"

interface Store {
  items: Item[]
  addItem: (item: Item) => void
  removeItem: (id: string) => void
}

export const useStore = create<Store>((set) => ({
  items: [],
  addItem: (item) =>
    set((state) => ({
      items: [...state.items, item],
    })),
  removeItem: (id) =>
    set((state) => ({
      items: state.items.filter((i) => i.id !== id),
    })),
}))

Phase 3: Backend Development (Months 7-9)

API Design

// Hono API example
import { Hono } from "hono"
import { z } from "zod"

const app = new Hono()

const userSchema = z.object({
  name: z.string().min(1),
  email: z.string().email(),
})

app.get("/api/users", async (c) => {
  const users = await db.user.findMany()
  return c.json({ data: users })
})

app.post("/api/users", async (c) => {
  const body = await c.req.json()
  const data = userSchema.parse(body)
  const user = await db.user.create({ data })
  return c.json({ data: user }, 201)
})

Database Design

-- PostgreSQL schema
CREATE TABLE users (
  id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  email TEXT NOT NULL UNIQUE,
  name TEXT NOT NULL,
  created_at TIMESTAMPTZ DEFAULT NOW()
);

CREATE INDEX idx_users_email ON users(email);

Phase 4: DevOps & Deployment (Months 10-12)

Docker Configuration

# Dockerfile
FROM node:20-alpine

WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production

COPY . .
RUN npm run build

EXPOSE 3000
CMD ["node", ".output/server/index.mjs"]

CI/CD Pipeline

# .github/workflows/deploy.yml
name: Deploy

on:
  push:
    branches: [main]

jobs:
  deploy:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v3

      - name: Setup Node
        uses: actions/setup-node@v3
        with:
          node-version: "20"

      - name: Install dependencies
        run: npm ci

      - name: Build
        run: npm run build

      - name: Deploy
        run: ./deploy.sh

Essential Skills

1. Performance Optimization

// Frontend performance
const OptimizedComponent = () => {
  // Code splitting
  const HeavyComponent = dynamic(() => import('./Heavy'), {
    loading: () => <Spinner />
  })

  // Image optimization
  return (
    <Image
      src="/image.jpg"
      width={800}
      height={600}
      priority
      quality={80}
    />
  )
}

// Backend performance
app.get('/api/data', async (c) => {
  // Caching
  const cached = await cache.get('data')
  if (cached) return c.json(cached)

  const data = await fetchData()
  await cache.set('data', data, 3600)

  return c.json(data)
})

2. Security Best Practices

// Authentication
import { sign, verify } from "jsonwebtoken"

const createToken = (userId: string) => {
  return sign({ userId }, process.env.JWT_SECRET!, {
    expiresIn: "7d",
  })
}

// Rate limiting
import { Ratelimit } from "@upstash/ratelimit"

const ratelimit = new Ratelimit({
  limiter: Ratelimit.slidingWindow(10, "10 s"),
  redis: redisClient,
})

// Input validation
const schema = z.object({
  email: z.string().email(),
  password: z.string().min(8),
})

3. Testing

// Unit tests
import { describe, it, expect } from "vitest"

describe("UserService", () => {
  it("creates user", async () => {
    const user = await createUser({
      email: "test@example.com",
      name: "Test",
    })

    expect(user.email).toBe("test@example.com")
  })
})

// E2E tests
import { test, expect } from "@playwright/test"

test("user can login", async ({ page }) => {
  await page.goto("/login")
  await page.fill("[name=email]", "test@example.com")
  await page.fill("[name=password]", "password")
  await page.click("button[type=submit]")
  await expect(page).toHaveURL("/dashboard")
})

Specialization Paths

1. Frontend-Focused

Deep expertise:
- Advanced React/Vue patterns
- Performance optimization
- Accessibility (WCAG)
- Design systems
- Web animations

2. Backend-Focused

Deep expertise:
- Database optimization
- API design
- Microservices
- Message queues
- Caching strategies

3. DevOps-Focused

Deep expertise:
- Cloud infrastructure
- Container orchestration
- CI/CD pipelines
- Monitoring and logging
- Security compliance

Tools of the Trade

Development

# Essential CLI tools
npm install -g vercel        # Deployment
npm install -g prisma        # Database ORM
npm install -g wrangler      # Cloudflare Workers
npm install -g @anthropic/ai # AI assistance

VS Code Extensions

{
  "recommendations": [
    "dbaeumer.vscode-eslint",
    "esbenp.prettier-vscode",
    "bradlc.vscode-tailwindcss",
    "vue.volar",
    "formulahendry.auto-rename-tag"
  ]
}

Career Advice

1. Build Projects

// Portfolio projects
const projects = [
  "Full-stack e-commerce site",
  "Real-time chat application",
  "Data visualization dashboard",
  "Mobile-first PWA",
  "Open-source contribution",
]

2. Stay Current

- Follow industry blogs
- Attend conferences (virtual/in-person)
- Contribute to open source
- Write technical articles
- Build side projects

3. Network

  • Join Discord communities
  • Attend local meetups
  • Connect on LinkedIn
  • Participate in Twitter tech community
  • Mentor others

Salary Expectations (2026)

LevelExperienceSalary Range (US)
Junior0-2 years$70k - $95k
Mid2-5 years$95k - $140k
Senior5-8 years$140k - $180k
Staff8+ years$180k - $250k+

Common Mistakes to Avoid

1. Tutorial Hell

// ❌ Bad: Only following tutorials
// ✅ Good: Build original projects

const learningPath = {
  tutorials: 20%,
  originalProjects: 80%
}

2. Ignoring Fundamentals

// Don't skip:
// - JavaScript/TypeScript basics
// - HTTP/Network protocols
// - Database fundamentals
// - Security principles

3. Not Specializing

// Generalist → Specialist path
const careerPath = [
  "Learn basics (6 months)",
  "Build projects (6 months)",
  "Choose specialization (3 months)",
  "Deep dive specialization (ongoing)",
]

Resources

Learning Platforms

Documentation

Conclusion

Becoming a full-stack developer in 2026 requires dedication, continuous learning, and practical experience. Focus on fundamentals, build real projects, and specialize over time. The journey is challenging but rewarding.

Start with the basics, progress through the phases, and remember: consistency beats intensity. Code every day, even if it's just for 30 minutes.


Ready to start? Pick one item from Phase 1 and spend 30 minutes on it today. Small, consistent steps lead to big results.

Full-stack engineer leading teams to build scalable systems & tools, with solid DevOps expertise.

Muhammad Ubaid R.

\n\n\n","vue",[125,398,399,426,431,441,451,485,489,493,517,532,551,558,567,571,581,592,611,621,668,674,684,694,704],{"__ignoreMap":127},[149,400,401,404,408,411,414,416,418,421,423],{"class":151,"line":152},[149,402,403],{"class":170},"<",[149,405,407],{"class":406},"swJcz","script",[149,409,410],{"class":162}," setup",[149,412,413],{"class":162}," lang",[149,415,171],{"class":170},[149,417,186],{"class":170},[149,419,420],{"class":182},"ts",[149,422,186],{"class":170},[149,424,425],{"class":170},">\n",[149,427,428],{"class":151,"line":159},[149,429,430],{"class":155},"// Nuxt 4 component\n",[149,432,433,436,439],{"class":151,"line":16},[149,434,435],{"class":162},"interface",[149,437,438],{"class":279}," Props",[149,440,283],{"class":170},[149,442,443,446,448],{"class":151,"line":192},[149,444,445],{"class":406}," title",[149,447,292],{"class":170},[149,449,450],{"class":279}," string\n",[149,452,453,456,458,461,464,467,469,472,475,478,480,482],{"class":151,"line":204},[149,454,455],{"class":406}," items",[149,457,292],{"class":170},[149,459,460],{"class":279}," Array",[149,462,463],{"class":170},"<{",[149,465,466],{"class":406}," id",[149,468,292],{"class":170},[149,470,471],{"class":279}," string",[149,473,474],{"class":170},";",[149,476,477],{"class":406}," name",[149,479,292],{"class":170},[149,481,471],{"class":279},[149,483,484],{"class":170}," }>\n",[149,486,487],{"class":151,"line":216},[149,488,328],{"class":170},[149,490,491],{"class":151,"line":228},[149,492,334],{"emptyLinePlaceholder":333},[149,494,495,497,500,502,506,508,511,514],{"class":151,"line":240},[149,496,163],{"class":162},[149,498,499],{"class":166}," props ",[149,501,171],{"class":170},[149,503,505],{"class":504},"s2Zo4"," defineProps",[149,507,403],{"class":170},[149,509,510],{"class":279},"Props",[149,512,513],{"class":170},">",[149,515,516],{"class":166},"()\n",[149,518,519,521,524,526,529],{"class":151,"line":252},[149,520,163],{"class":162},[149,522,523],{"class":166}," emit ",[149,525,171],{"class":170},[149,527,528],{"class":504}," defineEmits",[149,530,531],{"class":170},"<{\n",[149,533,534,537,539,542,545,547,549],{"class":151,"line":359},[149,535,536],{"class":406}," select",[149,538,292],{"class":170},[149,540,541],{"class":166}," [",[149,543,544],{"class":279},"itemId",[149,546,292],{"class":170},[149,548,471],{"class":279},[149,550,255],{"class":166},[149,552,553,556],{"class":151,"line":375},[149,554,555],{"class":170},"}>",[149,557,516],{"class":166},[149,559,560,563,565],{"class":151,"line":381},[149,561,562],{"class":170}," void\n removeItem: (id: string) => void\n}\n\nexport const useStore = create((set) => ({\n items: [],\n addItem: (item) =>\n set((state) => ({\n items: [...state.items, item],\n })),\n removeItem: (id) =>\n set((state) => ({\n items: state.items.filter((i) => i.id !== id),\n })),\n}))\n",[125,721,722,727,753,757,766,778,804,826,830,834,872,883,898,918,945,955,969,987,1032,1040],{"__ignoreMap":127},[149,723,724],{"class":151,"line":152},[149,725,726],{"class":155},"// Zustand example\n",[149,728,729,732,735,738,741,744,747,750],{"class":151,"line":159},[149,730,731],{"class":339},"import",[149,733,734],{"class":170}," {",[149,736,737],{"class":166}," create",[149,739,740],{"class":170}," }",[149,742,743],{"class":339}," from",[149,745,746],{"class":170}," \"",[149,748,749],{"class":182},"zustand",[149,751,752],{"class":170},"\"\n",[149,754,755],{"class":151,"line":16},[149,756,334],{"emptyLinePlaceholder":333},[149,758,759,761,764],{"class":151,"line":192},[149,760,435],{"class":162},[149,762,763],{"class":279}," Store",[149,765,283],{"class":170},[149,767,768,770,772,775],{"class":151,"line":204},[149,769,455],{"class":406},[149,771,292],{"class":170},[149,773,774],{"class":279}," Item",[149,776,777],{"class":166},"[]\n",[149,779,780,783,785,788,791,793,795,798,801],{"class":151,"line":216},[149,781,782],{"class":406}," addItem",[149,784,292],{"class":170},[149,786,787],{"class":170}," (",[149,789,354],{"class":790},"sHdIc",[149,792,292],{"class":170},[149,794,774],{"class":279},[149,796,797],{"class":170},")",[149,799,800],{"class":162}," =>",[149,802,803],{"class":279}," void\n",[149,805,806,809,811,813,816,818,820,822,824],{"class":151,"line":228},[149,807,808],{"class":406}," removeItem",[149,810,292],{"class":170},[149,812,787],{"class":170},[149,814,815],{"class":790},"id",[149,817,292],{"class":170},[149,819,471],{"class":279},[149,821,797],{"class":170},[149,823,800],{"class":162},[149,825,803],{"class":279},[149,827,828],{"class":151,"line":240},[149,829,328],{"class":170},[149,831,832],{"class":151,"line":252},[149,833,334],{"emptyLinePlaceholder":333},[149,835,836,839,842,845,847,849,851,854,856,859,861,864,866,868,870],{"class":151,"line":359},[149,837,838],{"class":339},"export",[149,840,841],{"class":162}," const",[149,843,844],{"class":166}," useStore ",[149,846,171],{"class":170},[149,848,737],{"class":504},[149,850,403],{"class":170},[149,852,853],{"class":279},"Store",[149,855,513],{"class":170},[149,857,858],{"class":166},"(",[149,860,858],{"class":170},[149,862,863],{"class":790},"set",[149,865,797],{"class":170},[149,867,800],{"class":162},[149,869,787],{"class":166},[149,871,346],{"class":170},[149,873,874,876,878,881],{"class":151,"line":375},[149,875,455],{"class":406},[149,877,292],{"class":170},[149,879,880],{"class":166}," []",[149,882,189],{"class":170},[149,884,885,887,889,891,893,895],{"class":151,"line":381},[149,886,782],{"class":504},[149,888,292],{"class":170},[149,890,787],{"class":170},[149,892,354],{"class":790},[149,894,797],{"class":170},[149,896,897],{"class":162}," =>\n",[149,899,900,903,905,907,910,912,914,916],{"class":151,"line":29},[149,901,902],{"class":504}," set",[149,904,858],{"class":166},[149,906,858],{"class":170},[149,908,909],{"class":790},"state",[149,911,797],{"class":170},[149,913,800],{"class":162},[149,915,787],{"class":166},[149,917,346],{"class":170},[149,919,920,923,925,927,930,932,934,937,940,943],{"class":151,"line":573},[149,921,922],{"class":406}," items",[149,924,292],{"class":170},[149,926,541],{"class":166},[149,928,929],{"class":170},"...",[149,931,909],{"class":166},[149,933,276],{"class":170},[149,935,936],{"class":166},"items",[149,938,939],{"class":170},",",[149,941,942],{"class":166}," item]",[149,944,189],{"class":170},[149,946,947,950,953],{"class":151,"line":583},[149,948,949],{"class":170}," }",[149,951,952],{"class":166},"))",[149,954,189],{"class":170},[149,956,957,959,961,963,965,967],{"class":151,"line":594},[149,958,808],{"class":504},[149,960,292],{"class":170},[149,962,787],{"class":170},[149,964,815],{"class":790},[149,966,797],{"class":170},[149,968,897],{"class":162},[149,970,971,973,975,977,979,981,983,985],{"class":151,"line":613},[149,972,902],{"class":504},[149,974,858],{"class":166},[149,976,858],{"class":170},[149,978,909],{"class":790},[149,980,797],{"class":170},[149,982,800],{"class":162},[149,984,787],{"class":166},[149,986,346],{"class":170},[149,988,989,991,993,996,998,1000,1002,1005,1007,1009,1012,1014,1016,1019,1021,1024,1027,1030],{"class":151,"line":623},[149,990,922],{"class":406},[149,992,292],{"class":170},[149,994,995],{"class":166}," state",[149,997,276],{"class":170},[149,999,936],{"class":166},[149,1001,276],{"class":170},[149,1003,1004],{"class":504},"filter",[149,1006,858],{"class":166},[149,1008,858],{"class":170},[149,1010,1011],{"class":790},"i",[149,1013,797],{"class":170},[149,1015,800],{"class":162},[149,1017,1018],{"class":166}," i",[149,1020,276],{"class":170},[149,1022,1023],{"class":166},"id ",[149,1025,1026],{"class":170},"!==",[149,1028,1029],{"class":166}," id)",[149,1031,189],{"class":170},[149,1033,1034,1036,1038],{"class":151,"line":670},[149,1035,949],{"class":170},[149,1037,952],{"class":166},[149,1039,189],{"class":170},[149,1041,1042,1045],{"class":151,"line":676},[149,1043,1044],{"class":170},"}",[149,1046,1047],{"class":166},"))\n",[113,1049,1051],{"id":1050},"phase-3-backend-development-months-7-9","Phase 3: Backend Development (Months 7-9)",[137,1053,1055],{"id":1054},"api-design","API Design",[118,1057,1059],{"className":143,"code":1058,"language":145,"meta":127,"style":127},"// Hono API example\nimport { Hono } from \"hono\"\nimport { z } from \"zod\"\n\nconst app = new Hono()\n\nconst userSchema = z.object({\n name: z.string().min(1),\n email: z.string().email(),\n})\n\napp.get(\"/api/users\", async (c) => {\n const users = await db.user.findMany()\n return c.json({ data: users })\n})\n\napp.post(\"/api/users\", async (c) => {\n const body = await c.req.json()\n const data = userSchema.parse(body)\n const user = await db.user.create({ data })\n return c.json({ data: user }, 201)\n})\n",[125,1060,1061,1066,1086,1106,1110,1126,1130,1150,1181,1205,1212,1216,1251,1280,1309,1315,1319,1350,1374,1397,1429,1457],{"__ignoreMap":127},[149,1062,1063],{"class":151,"line":152},[149,1064,1065],{"class":155},"// Hono API example\n",[149,1067,1068,1070,1072,1075,1077,1079,1081,1084],{"class":151,"line":159},[149,1069,731],{"class":339},[149,1071,734],{"class":170},[149,1073,1074],{"class":166}," Hono",[149,1076,740],{"class":170},[149,1078,743],{"class":339},[149,1080,746],{"class":170},[149,1082,1083],{"class":182},"hono",[149,1085,752],{"class":170},[149,1087,1088,1090,1092,1095,1097,1099,1101,1104],{"class":151,"line":16},[149,1089,731],{"class":339},[149,1091,734],{"class":170},[149,1093,1094],{"class":166}," z",[149,1096,740],{"class":170},[149,1098,743],{"class":339},[149,1100,746],{"class":170},[149,1102,1103],{"class":182},"zod",[149,1105,752],{"class":170},[149,1107,1108],{"class":151,"line":192},[149,1109,334],{"emptyLinePlaceholder":333},[149,1111,1112,1114,1117,1119,1122,1124],{"class":151,"line":204},[149,1113,163],{"class":162},[149,1115,1116],{"class":166}," app ",[149,1118,171],{"class":170},[149,1120,1121],{"class":170}," new",[149,1123,1074],{"class":504},[149,1125,516],{"class":166},[149,1127,1128],{"class":151,"line":216},[149,1129,334],{"emptyLinePlaceholder":333},[149,1131,1132,1134,1137,1139,1141,1143,1146,1148],{"class":151,"line":228},[149,1133,163],{"class":162},[149,1135,1136],{"class":166}," userSchema ",[149,1138,171],{"class":170},[149,1140,1094],{"class":166},[149,1142,276],{"class":170},[149,1144,1145],{"class":504},"object",[149,1147,858],{"class":166},[149,1149,346],{"class":170},[149,1151,1152,1155,1157,1159,1161,1164,1167,1169,1172,1174,1177,1179],{"class":151,"line":240},[149,1153,1154],{"class":406}," name",[149,1156,292],{"class":170},[149,1158,1094],{"class":166},[149,1160,276],{"class":170},[149,1162,1163],{"class":504},"string",[149,1165,1166],{"class":166},"()",[149,1168,276],{"class":170},[149,1170,1171],{"class":504},"min",[149,1173,858],{"class":166},[149,1175,1176],{"class":308},"1",[149,1178,797],{"class":166},[149,1180,189],{"class":170},[149,1182,1183,1186,1188,1190,1192,1194,1196,1198,1201,1203],{"class":151,"line":252},[149,1184,1185],{"class":406}," email",[149,1187,292],{"class":170},[149,1189,1094],{"class":166},[149,1191,276],{"class":170},[149,1193,1163],{"class":504},[149,1195,1166],{"class":166},[149,1197,276],{"class":170},[149,1199,1200],{"class":504},"email",[149,1202,1166],{"class":166},[149,1204,189],{"class":170},[149,1206,1207,1209],{"class":151,"line":359},[149,1208,1044],{"class":170},[149,1210,1211],{"class":166},")\n",[149,1213,1214],{"class":151,"line":375},[149,1215,334],{"emptyLinePlaceholder":333},[149,1217,1218,1221,1223,1226,1228,1230,1233,1235,1237,1240,1242,1245,1247,1249],{"class":151,"line":381},[149,1219,1220],{"class":166},"app",[149,1222,276],{"class":170},[149,1224,1225],{"class":504},"get",[149,1227,858],{"class":166},[149,1229,186],{"class":170},[149,1231,1232],{"class":182},"/api/users",[149,1234,186],{"class":170},[149,1236,939],{"class":170},[149,1238,1239],{"class":162}," async",[149,1241,787],{"class":170},[149,1243,1244],{"class":790},"c",[149,1246,797],{"class":170},[149,1248,800],{"class":162},[149,1250,283],{"class":170},[149,1252,1253,1256,1259,1262,1265,1268,1270,1273,1275,1278],{"class":151,"line":29},[149,1254,1255],{"class":162}," const",[149,1257,1258],{"class":166}," users",[149,1260,1261],{"class":170}," =",[149,1263,1264],{"class":339}," await",[149,1266,1267],{"class":166}," db",[149,1269,276],{"class":170},[149,1271,1272],{"class":166},"user",[149,1274,276],{"class":170},[149,1276,1277],{"class":504},"findMany",[149,1279,516],{"class":406},[149,1281,1282,1285,1288,1290,1293,1295,1298,1301,1303,1305,1307],{"class":151,"line":573},[149,1283,1284],{"class":339}," return",[149,1286,1287],{"class":166}," c",[149,1289,276],{"class":170},[149,1291,1292],{"class":504},"json",[149,1294,858],{"class":406},[149,1296,1297],{"class":170},"{",[149,1299,1300],{"class":406}," data",[149,1302,292],{"class":170},[149,1304,1258],{"class":166},[149,1306,740],{"class":170},[149,1308,1211],{"class":406},[149,1310,1311,1313],{"class":151,"line":583},[149,1312,1044],{"class":170},[149,1314,1211],{"class":166},[149,1316,1317],{"class":151,"line":594},[149,1318,334],{"emptyLinePlaceholder":333},[149,1320,1321,1323,1325,1328,1330,1332,1334,1336,1338,1340,1342,1344,1346,1348],{"class":151,"line":613},[149,1322,1220],{"class":166},[149,1324,276],{"class":170},[149,1326,1327],{"class":504},"post",[149,1329,858],{"class":166},[149,1331,186],{"class":170},[149,1333,1232],{"class":182},[149,1335,186],{"class":170},[149,1337,939],{"class":170},[149,1339,1239],{"class":162},[149,1341,787],{"class":170},[149,1343,1244],{"class":790},[149,1345,797],{"class":170},[149,1347,800],{"class":162},[149,1349,283],{"class":170},[149,1351,1352,1354,1357,1359,1361,1363,1365,1368,1370,1372],{"class":151,"line":623},[149,1353,1255],{"class":162},[149,1355,1356],{"class":166}," body",[149,1358,1261],{"class":170},[149,1360,1264],{"class":339},[149,1362,1287],{"class":166},[149,1364,276],{"class":170},[149,1366,1367],{"class":166},"req",[149,1369,276],{"class":170},[149,1371,1292],{"class":504},[149,1373,516],{"class":406},[149,1375,1376,1378,1380,1382,1385,1387,1390,1392,1395],{"class":151,"line":670},[149,1377,1255],{"class":162},[149,1379,1300],{"class":166},[149,1381,1261],{"class":170},[149,1383,1384],{"class":166}," userSchema",[149,1386,276],{"class":170},[149,1388,1389],{"class":504},"parse",[149,1391,858],{"class":406},[149,1393,1394],{"class":166},"body",[149,1396,1211],{"class":406},[149,1398,1399,1401,1404,1406,1408,1410,1412,1414,1416,1419,1421,1423,1425,1427],{"class":151,"line":676},[149,1400,1255],{"class":162},[149,1402,1403],{"class":166}," user",[149,1405,1261],{"class":170},[149,1407,1264],{"class":339},[149,1409,1267],{"class":166},[149,1411,276],{"class":170},[149,1413,1272],{"class":166},[149,1415,276],{"class":170},[149,1417,1418],{"class":504},"create",[149,1420,858],{"class":406},[149,1422,1297],{"class":170},[149,1424,1300],{"class":166},[149,1426,740],{"class":170},[149,1428,1211],{"class":406},[149,1430,1431,1433,1435,1437,1439,1441,1443,1445,1447,1449,1452,1455],{"class":151,"line":686},[149,1432,1284],{"class":339},[149,1434,1287],{"class":166},[149,1436,276],{"class":170},[149,1438,1292],{"class":504},[149,1440,858],{"class":406},[149,1442,1297],{"class":170},[149,1444,1300],{"class":406},[149,1446,292],{"class":170},[149,1448,1403],{"class":166},[149,1450,1451],{"class":170}," },",[149,1453,1454],{"class":308}," 201",[149,1456,1211],{"class":406},[149,1458,1459,1461],{"class":151,"line":696},[149,1460,1044],{"class":170},[149,1462,1211],{"class":166},[137,1464,1466],{"id":1465},"database-design","Database Design",[118,1468,1472],{"className":1469,"code":1470,"language":1471,"meta":127,"style":127},"language-sql shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","-- PostgreSQL schema\nCREATE TABLE users (\n id UUID PRIMARY KEY DEFAULT gen_random_uuid(),\n email TEXT NOT NULL UNIQUE,\n name TEXT NOT NULL,\n created_at TIMESTAMPTZ DEFAULT NOW()\n);\n\nCREATE INDEX idx_users_email ON users(email);\n","sql",[125,1473,1474,1479,1484,1489,1494,1499,1504,1509,1513],{"__ignoreMap":127},[149,1475,1476],{"class":151,"line":152},[149,1477,1478],{},"-- PostgreSQL schema\n",[149,1480,1481],{"class":151,"line":159},[149,1482,1483],{},"CREATE TABLE users (\n",[149,1485,1486],{"class":151,"line":16},[149,1487,1488],{}," id UUID PRIMARY KEY DEFAULT gen_random_uuid(),\n",[149,1490,1491],{"class":151,"line":192},[149,1492,1493],{}," email TEXT NOT NULL UNIQUE,\n",[149,1495,1496],{"class":151,"line":204},[149,1497,1498],{}," name TEXT NOT NULL,\n",[149,1500,1501],{"class":151,"line":216},[149,1502,1503],{}," created_at TIMESTAMPTZ DEFAULT NOW()\n",[149,1505,1506],{"class":151,"line":228},[149,1507,1508],{},");\n",[149,1510,1511],{"class":151,"line":240},[149,1512,334],{"emptyLinePlaceholder":333},[149,1514,1515],{"class":151,"line":252},[149,1516,1517],{},"CREATE INDEX idx_users_email ON users(email);\n",[113,1519,1521],{"id":1520},"phase-4-devops-deployment-months-10-12","Phase 4: DevOps & Deployment (Months 10-12)",[137,1523,1525],{"id":1524},"docker-configuration","Docker Configuration",[118,1527,1531],{"className":1528,"code":1529,"language":1530,"meta":127,"style":127},"language-dockerfile shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# Dockerfile\nFROM node:20-alpine\n\nWORKDIR /app\nCOPY package*.json ./\nRUN npm ci --only=production\n\nCOPY . .\nRUN npm run build\n\nEXPOSE 3000\nCMD [\"node\", \".output/server/index.mjs\"]\n","dockerfile",[125,1532,1533,1538,1546,1550,1558,1566,1574,1578,1585,1592,1596,1604],{"__ignoreMap":127},[149,1534,1535],{"class":151,"line":152},[149,1536,1537],{"class":155},"# Dockerfile\n",[149,1539,1540,1543],{"class":151,"line":159},[149,1541,1542],{"class":308},"FROM",[149,1544,1545],{"class":166}," node:20-alpine\n",[149,1547,1548],{"class":151,"line":16},[149,1549,334],{"emptyLinePlaceholder":333},[149,1551,1552,1555],{"class":151,"line":192},[149,1553,1554],{"class":308},"WORKDIR",[149,1556,1557],{"class":166}," /app\n",[149,1559,1560,1563],{"class":151,"line":204},[149,1561,1562],{"class":308},"COPY",[149,1564,1565],{"class":166}," package*.json ./\n",[149,1567,1568,1571],{"class":151,"line":216},[149,1569,1570],{"class":308},"RUN",[149,1572,1573],{"class":166}," npm ci --only=production\n",[149,1575,1576],{"class":151,"line":228},[149,1577,334],{"emptyLinePlaceholder":333},[149,1579,1580,1582],{"class":151,"line":240},[149,1581,1562],{"class":308},[149,1583,1584],{"class":166}," . .\n",[149,1586,1587,1589],{"class":151,"line":252},[149,1588,1570],{"class":308},[149,1590,1591],{"class":166}," npm run build\n",[149,1593,1594],{"class":151,"line":359},[149,1595,334],{"emptyLinePlaceholder":333},[149,1597,1598,1601],{"class":151,"line":375},[149,1599,1600],{"class":308},"EXPOSE",[149,1602,1603],{"class":166}," 3000\n",[149,1605,1606,1609,1611,1614,1617,1620],{"class":151,"line":381},[149,1607,1608],{"class":308},"CMD",[149,1610,541],{"class":166},[149,1612,1613],{"class":182},"\"node\"",[149,1615,1616],{"class":166},", ",[149,1618,1619],{"class":182},"\".output/server/index.mjs\"",[149,1621,255],{"class":166},[137,1623,1625],{"id":1624},"cicd-pipeline","CI/CD Pipeline",[118,1627,1631],{"className":1628,"code":1629,"language":1630,"meta":127,"style":127},"language-yaml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# .github/workflows/deploy.yml\nname: Deploy\n\non:\n push:\n branches: [main]\n\njobs:\n deploy:\n runs-on: ubuntu-latest\n\n steps:\n - uses: actions/checkout@v3\n\n - name: Setup Node\n uses: actions/setup-node@v3\n with:\n node-version: \"20\"\n\n - name: Install dependencies\n run: npm ci\n\n - name: Build\n run: npm run build\n\n - name: Deploy\n run: ./deploy.sh\n","yaml",[125,1632,1633,1638,1648,1652,1661,1668,1682,1686,1693,1700,1710,1714,1721,1734,1738,1749,1759,1766,1780,1784,1795,1805,1809,1820,1829,1834,1845],{"__ignoreMap":127},[149,1634,1635],{"class":151,"line":152},[149,1636,1637],{"class":155},"# .github/workflows/deploy.yml\n",[149,1639,1640,1643,1645],{"class":151,"line":159},[149,1641,1642],{"class":406},"name",[149,1644,292],{"class":170},[149,1646,1647],{"class":182}," Deploy\n",[149,1649,1650],{"class":151,"line":16},[149,1651,334],{"emptyLinePlaceholder":333},[149,1653,1654,1658],{"class":151,"line":192},[149,1655,1657],{"class":1656},"sfNiH","on",[149,1659,1660],{"class":170},":\n",[149,1662,1663,1666],{"class":151,"line":204},[149,1664,1665],{"class":406}," push",[149,1667,1660],{"class":170},[149,1669,1670,1673,1675,1677,1680],{"class":151,"line":216},[149,1671,1672],{"class":406}," branches",[149,1674,292],{"class":170},[149,1676,541],{"class":170},[149,1678,1679],{"class":182},"main",[149,1681,255],{"class":170},[149,1683,1684],{"class":151,"line":228},[149,1685,334],{"emptyLinePlaceholder":333},[149,1687,1688,1691],{"class":151,"line":240},[149,1689,1690],{"class":406},"jobs",[149,1692,1660],{"class":170},[149,1694,1695,1698],{"class":151,"line":252},[149,1696,1697],{"class":406}," deploy",[149,1699,1660],{"class":170},[149,1701,1702,1705,1707],{"class":151,"line":359},[149,1703,1704],{"class":406}," runs-on",[149,1706,292],{"class":170},[149,1708,1709],{"class":182}," ubuntu-latest\n",[149,1711,1712],{"class":151,"line":375},[149,1713,334],{"emptyLinePlaceholder":333},[149,1715,1716,1719],{"class":151,"line":381},[149,1717,1718],{"class":406}," steps",[149,1720,1660],{"class":170},[149,1722,1723,1726,1729,1731],{"class":151,"line":29},[149,1724,1725],{"class":170}," -",[149,1727,1728],{"class":406}," uses",[149,1730,292],{"class":170},[149,1732,1733],{"class":182}," actions/checkout@v3\n",[149,1735,1736],{"class":151,"line":573},[149,1737,334],{"emptyLinePlaceholder":333},[149,1739,1740,1742,1744,1746],{"class":151,"line":583},[149,1741,1725],{"class":170},[149,1743,477],{"class":406},[149,1745,292],{"class":170},[149,1747,1748],{"class":182}," Setup Node\n",[149,1750,1751,1754,1756],{"class":151,"line":594},[149,1752,1753],{"class":406}," uses",[149,1755,292],{"class":170},[149,1757,1758],{"class":182}," actions/setup-node@v3\n",[149,1760,1761,1764],{"class":151,"line":613},[149,1762,1763],{"class":406}," with",[149,1765,1660],{"class":170},[149,1767,1768,1771,1773,1775,1778],{"class":151,"line":623},[149,1769,1770],{"class":406}," node-version",[149,1772,292],{"class":170},[149,1774,746],{"class":170},[149,1776,1777],{"class":182},"20",[149,1779,752],{"class":170},[149,1781,1782],{"class":151,"line":670},[149,1783,334],{"emptyLinePlaceholder":333},[149,1785,1786,1788,1790,1792],{"class":151,"line":676},[149,1787,1725],{"class":170},[149,1789,477],{"class":406},[149,1791,292],{"class":170},[149,1793,1794],{"class":182}," Install dependencies\n",[149,1796,1797,1800,1802],{"class":151,"line":686},[149,1798,1799],{"class":406}," run",[149,1801,292],{"class":170},[149,1803,1804],{"class":182}," npm ci\n",[149,1806,1807],{"class":151,"line":696},[149,1808,334],{"emptyLinePlaceholder":333},[149,1810,1811,1813,1815,1817],{"class":151,"line":706},[149,1812,1725],{"class":170},[149,1814,477],{"class":406},[149,1816,292],{"class":170},[149,1818,1819],{"class":182}," Build\n",[149,1821,1823,1825,1827],{"class":151,"line":1822},24,[149,1824,1799],{"class":406},[149,1826,292],{"class":170},[149,1828,1591],{"class":182},[149,1830,1832],{"class":151,"line":1831},25,[149,1833,334],{"emptyLinePlaceholder":333},[149,1835,1837,1839,1841,1843],{"class":151,"line":1836},26,[149,1838,1725],{"class":170},[149,1840,477],{"class":406},[149,1842,292],{"class":170},[149,1844,1647],{"class":182},[149,1846,1848,1850,1852],{"class":151,"line":1847},27,[149,1849,1799],{"class":406},[149,1851,292],{"class":170},[149,1853,1854],{"class":182}," ./deploy.sh\n",[98,1856,1858],{"id":1857},"essential-skills","Essential Skills",[113,1860,1862],{"id":1861},"_1-performance-optimization","1. Performance Optimization",[118,1864,1866],{"className":143,"code":1865,"language":145,"meta":127,"style":127},"// Frontend performance\nconst OptimizedComponent = () => {\n // Code splitting\n const HeavyComponent = dynamic(() => import('./Heavy'), {\n loading: () => \n })\n\n // Image optimization\n return (\n \n )\n}\n\n// Backend performance\napp.get('/api/data', async (c) => {\n // Caching\n const cached = await cache.get('data')\n if (cached) return c.json(cached)\n\n const data = await fetchData()\n await cache.set('data', data, 3600)\n\n return c.json(data)\n})\n",[125,1867,1868,1873,1889,1894,1931,1953,1958,1962,1967,1974,1981,1995,2008,2020,2025,2037,2042,2047,2051,2055,2060,2091,2096,2125,2153,2157,2172,2202,2207,2224],{"__ignoreMap":127},[149,1869,1870],{"class":151,"line":152},[149,1871,1872],{"class":155},"// Frontend performance\n",[149,1874,1875,1877,1880,1882,1885,1887],{"class":151,"line":159},[149,1876,163],{"class":162},[149,1878,1879],{"class":166}," OptimizedComponent ",[149,1881,171],{"class":170},[149,1883,1884],{"class":170}," ()",[149,1886,800],{"class":162},[149,1888,283],{"class":170},[149,1890,1891],{"class":151,"line":16},[149,1892,1893],{"class":155}," // Code splitting\n",[149,1895,1896,1898,1901,1903,1906,1908,1910,1912,1915,1917,1920,1923,1925,1927,1929],{"class":151,"line":192},[149,1897,1255],{"class":162},[149,1899,1900],{"class":166}," HeavyComponent",[149,1902,1261],{"class":170},[149,1904,1905],{"class":504}," dynamic",[149,1907,858],{"class":406},[149,1909,1166],{"class":170},[149,1911,800],{"class":162},[149,1913,1914],{"class":170}," import",[149,1916,858],{"class":406},[149,1918,1919],{"class":170},"'",[149,1921,1922],{"class":182},"./Heavy",[149,1924,1919],{"class":170},[149,1926,797],{"class":406},[149,1928,939],{"class":170},[149,1930,283],{"class":170},[149,1932,1933,1936,1938,1940,1942,1945,1948,1951],{"class":151,"line":204},[149,1934,1935],{"class":504}," loading",[149,1937,292],{"class":170},[149,1939,1884],{"class":170},[149,1941,800],{"class":162},[149,1943,1944],{"class":170}," <",[149,1946,1947],{"class":279},"Spinner",[149,1949,1950],{"class":406}," /",[149,1952,425],{"class":170},[149,1954,1955],{"class":151,"line":216},[149,1956,1957],{"class":406}," })\n",[149,1959,1960],{"class":151,"line":228},[149,1961,334],{"emptyLinePlaceholder":333},[149,1963,1964],{"class":151,"line":240},[149,1965,1966],{"class":155}," // Image optimization\n",[149,1968,1969,1971],{"class":151,"line":252},[149,1970,1284],{"class":504},[149,1972,1973],{"class":406}," (\n",[149,1975,1976,1978],{"class":151,"line":359},[149,1977,597],{"class":170},[149,1979,1980],{"class":166},"Image\n",[149,1982,1983,1986,1988,1990,1993],{"class":151,"line":375},[149,1984,1985],{"class":166}," src",[149,1987,171],{"class":170},[149,1989,186],{"class":170},[149,1991,1992],{"class":182},"/image.jpg",[149,1994,752],{"class":170},[149,1996,1997,2000,2003,2006],{"class":151,"line":381},[149,1998,1999],{"class":166}," width",[149,2001,2002],{"class":170},"={",[149,2004,2005],{"class":308},"800",[149,2007,328],{"class":170},[149,2009,2010,2013,2015,2018],{"class":151,"line":29},[149,2011,2012],{"class":166}," height",[149,2014,2002],{"class":170},[149,2016,2017],{"class":308},"600",[149,2019,328],{"class":170},[149,2021,2022],{"class":151,"line":573},[149,2023,2024],{"class":166}," priority\n",[149,2026,2027,2030,2032,2035],{"class":151,"line":583},[149,2028,2029],{"class":166}," quality",[149,2031,2002],{"class":170},[149,2033,2034],{"class":308},"80",[149,2036,328],{"class":170},[149,2038,2039],{"class":151,"line":594},[149,2040,2041],{"class":170}," />\n",[149,2043,2044],{"class":151,"line":613},[149,2045,2046],{"class":406}," )\n",[149,2048,2049],{"class":151,"line":623},[149,2050,328],{"class":170},[149,2052,2053],{"class":151,"line":670},[149,2054,334],{"emptyLinePlaceholder":333},[149,2056,2057],{"class":151,"line":676},[149,2058,2059],{"class":155},"// Backend performance\n",[149,2061,2062,2064,2066,2068,2070,2072,2075,2077,2079,2081,2083,2085,2087,2089],{"class":151,"line":686},[149,2063,1220],{"class":166},[149,2065,276],{"class":170},[149,2067,1225],{"class":504},[149,2069,858],{"class":406},[149,2071,1919],{"class":170},[149,2073,2074],{"class":182},"/api/data",[149,2076,1919],{"class":170},[149,2078,939],{"class":170},[149,2080,1239],{"class":162},[149,2082,787],{"class":170},[149,2084,1244],{"class":790},[149,2086,797],{"class":170},[149,2088,800],{"class":162},[149,2090,283],{"class":170},[149,2092,2093],{"class":151,"line":696},[149,2094,2095],{"class":155}," // Caching\n",[149,2097,2098,2100,2103,2105,2107,2110,2112,2114,2116,2118,2121,2123],{"class":151,"line":706},[149,2099,1255],{"class":162},[149,2101,2102],{"class":166}," cached",[149,2104,1261],{"class":170},[149,2106,1264],{"class":339},[149,2108,2109],{"class":166}," cache",[149,2111,276],{"class":170},[149,2113,1225],{"class":504},[149,2115,858],{"class":406},[149,2117,1919],{"class":170},[149,2119,2120],{"class":182},"data",[149,2122,1919],{"class":170},[149,2124,1211],{"class":406},[149,2126,2127,2130,2132,2135,2138,2141,2143,2145,2147,2149,2151],{"class":151,"line":1822},[149,2128,2129],{"class":339}," if",[149,2131,787],{"class":406},[149,2133,2134],{"class":166},"cached",[149,2136,2137],{"class":406},") ",[149,2139,2140],{"class":339},"return",[149,2142,1287],{"class":166},[149,2144,276],{"class":170},[149,2146,1292],{"class":504},[149,2148,858],{"class":406},[149,2150,2134],{"class":166},[149,2152,1211],{"class":406},[149,2154,2155],{"class":151,"line":1831},[149,2156,334],{"emptyLinePlaceholder":333},[149,2158,2159,2161,2163,2165,2167,2170],{"class":151,"line":1836},[149,2160,1255],{"class":162},[149,2162,1300],{"class":166},[149,2164,1261],{"class":170},[149,2166,1264],{"class":339},[149,2168,2169],{"class":504}," fetchData",[149,2171,516],{"class":406},[149,2173,2174,2177,2179,2181,2183,2185,2187,2189,2191,2193,2195,2197,2200],{"class":151,"line":1847},[149,2175,2176],{"class":339}," await",[149,2178,2109],{"class":166},[149,2180,276],{"class":170},[149,2182,863],{"class":504},[149,2184,858],{"class":406},[149,2186,1919],{"class":170},[149,2188,2120],{"class":182},[149,2190,1919],{"class":170},[149,2192,939],{"class":170},[149,2194,1300],{"class":166},[149,2196,939],{"class":170},[149,2198,2199],{"class":308}," 3600",[149,2201,1211],{"class":406},[149,2203,2205],{"class":151,"line":2204},28,[149,2206,334],{"emptyLinePlaceholder":333},[149,2208,2210,2212,2214,2216,2218,2220,2222],{"class":151,"line":2209},29,[149,2211,1284],{"class":339},[149,2213,1287],{"class":166},[149,2215,276],{"class":170},[149,2217,1292],{"class":504},[149,2219,858],{"class":406},[149,2221,2120],{"class":166},[149,2223,1211],{"class":406},[149,2225,2227,2229],{"class":151,"line":2226},30,[149,2228,1044],{"class":170},[149,2230,1211],{"class":406},[113,2232,2234],{"id":2233},"_2-security-best-practices","2. Security Best Practices",[118,2236,2238],{"className":143,"code":2237,"language":145,"meta":127,"style":127},"// Authentication\nimport { sign, verify } from \"jsonwebtoken\"\n\nconst createToken = (userId: string) => {\n return sign({ userId }, process.env.JWT_SECRET!, {\n expiresIn: \"7d\",\n })\n}\n\n// Rate limiting\nimport { Ratelimit } from \"@upstash/ratelimit\"\n\nconst ratelimit = new Ratelimit({\n limiter: Ratelimit.slidingWindow(10, \"10 s\"),\n redis: redisClient,\n})\n\n// Input validation\nconst schema = z.object({\n email: z.string().email(),\n password: z.string().min(8),\n})\n",[125,2239,2240,2245,2270,2274,2298,2331,2347,2354,2358,2362,2367,2387,2391,2408,2440,2452,2458,2462,2467,2486,2508,2536],{"__ignoreMap":127},[149,2241,2242],{"class":151,"line":152},[149,2243,2244],{"class":155},"// Authentication\n",[149,2246,2247,2249,2251,2254,2256,2259,2261,2263,2265,2268],{"class":151,"line":159},[149,2248,731],{"class":339},[149,2250,734],{"class":170},[149,2252,2253],{"class":166}," sign",[149,2255,939],{"class":170},[149,2257,2258],{"class":166}," verify",[149,2260,740],{"class":170},[149,2262,743],{"class":339},[149,2264,746],{"class":170},[149,2266,2267],{"class":182},"jsonwebtoken",[149,2269,752],{"class":170},[149,2271,2272],{"class":151,"line":16},[149,2273,334],{"emptyLinePlaceholder":333},[149,2275,2276,2278,2281,2283,2285,2288,2290,2292,2294,2296],{"class":151,"line":192},[149,2277,163],{"class":162},[149,2279,2280],{"class":166}," createToken ",[149,2282,171],{"class":170},[149,2284,787],{"class":170},[149,2286,2287],{"class":790},"userId",[149,2289,292],{"class":170},[149,2291,471],{"class":279},[149,2293,797],{"class":170},[149,2295,800],{"class":162},[149,2297,283],{"class":170},[149,2299,2300,2302,2304,2306,2308,2311,2313,2316,2318,2321,2323,2326,2329],{"class":151,"line":204},[149,2301,1284],{"class":339},[149,2303,2253],{"class":504},[149,2305,858],{"class":406},[149,2307,1297],{"class":170},[149,2309,2310],{"class":166}," userId",[149,2312,1451],{"class":170},[149,2314,2315],{"class":166}," process",[149,2317,276],{"class":170},[149,2319,2320],{"class":166},"env",[149,2322,276],{"class":170},[149,2324,2325],{"class":166},"JWT_SECRET",[149,2327,2328],{"class":170},"!,",[149,2330,283],{"class":170},[149,2332,2333,2336,2338,2340,2343,2345],{"class":151,"line":216},[149,2334,2335],{"class":406}," expiresIn",[149,2337,292],{"class":170},[149,2339,746],{"class":170},[149,2341,2342],{"class":182},"7d",[149,2344,186],{"class":170},[149,2346,189],{"class":170},[149,2348,2349,2352],{"class":151,"line":228},[149,2350,2351],{"class":170}," }",[149,2353,1211],{"class":406},[149,2355,2356],{"class":151,"line":240},[149,2357,328],{"class":170},[149,2359,2360],{"class":151,"line":252},[149,2361,334],{"emptyLinePlaceholder":333},[149,2363,2364],{"class":151,"line":359},[149,2365,2366],{"class":155},"// Rate limiting\n",[149,2368,2369,2371,2373,2376,2378,2380,2382,2385],{"class":151,"line":375},[149,2370,731],{"class":339},[149,2372,734],{"class":170},[149,2374,2375],{"class":166}," Ratelimit",[149,2377,740],{"class":170},[149,2379,743],{"class":339},[149,2381,746],{"class":170},[149,2383,2384],{"class":182},"@upstash/ratelimit",[149,2386,752],{"class":170},[149,2388,2389],{"class":151,"line":381},[149,2390,334],{"emptyLinePlaceholder":333},[149,2392,2393,2395,2398,2400,2402,2404,2406],{"class":151,"line":29},[149,2394,163],{"class":162},[149,2396,2397],{"class":166}," ratelimit ",[149,2399,171],{"class":170},[149,2401,1121],{"class":170},[149,2403,2375],{"class":504},[149,2405,858],{"class":166},[149,2407,346],{"class":170},[149,2409,2410,2413,2415,2417,2419,2422,2424,2427,2429,2431,2434,2436,2438],{"class":151,"line":573},[149,2411,2412],{"class":406}," limiter",[149,2414,292],{"class":170},[149,2416,2375],{"class":166},[149,2418,276],{"class":170},[149,2420,2421],{"class":504},"slidingWindow",[149,2423,858],{"class":166},[149,2425,2426],{"class":308},"10",[149,2428,939],{"class":170},[149,2430,746],{"class":170},[149,2432,2433],{"class":182},"10 s",[149,2435,186],{"class":170},[149,2437,797],{"class":166},[149,2439,189],{"class":170},[149,2441,2442,2445,2447,2450],{"class":151,"line":583},[149,2443,2444],{"class":406}," redis",[149,2446,292],{"class":170},[149,2448,2449],{"class":166}," redisClient",[149,2451,189],{"class":170},[149,2453,2454,2456],{"class":151,"line":594},[149,2455,1044],{"class":170},[149,2457,1211],{"class":166},[149,2459,2460],{"class":151,"line":613},[149,2461,334],{"emptyLinePlaceholder":333},[149,2463,2464],{"class":151,"line":623},[149,2465,2466],{"class":155},"// Input validation\n",[149,2468,2469,2471,2474,2476,2478,2480,2482,2484],{"class":151,"line":670},[149,2470,163],{"class":162},[149,2472,2473],{"class":166}," schema ",[149,2475,171],{"class":170},[149,2477,1094],{"class":166},[149,2479,276],{"class":170},[149,2481,1145],{"class":504},[149,2483,858],{"class":166},[149,2485,346],{"class":170},[149,2487,2488,2490,2492,2494,2496,2498,2500,2502,2504,2506],{"class":151,"line":676},[149,2489,1185],{"class":406},[149,2491,292],{"class":170},[149,2493,1094],{"class":166},[149,2495,276],{"class":170},[149,2497,1163],{"class":504},[149,2499,1166],{"class":166},[149,2501,276],{"class":170},[149,2503,1200],{"class":504},[149,2505,1166],{"class":166},[149,2507,189],{"class":170},[149,2509,2510,2513,2515,2517,2519,2521,2523,2525,2527,2529,2532,2534],{"class":151,"line":686},[149,2511,2512],{"class":406}," password",[149,2514,292],{"class":170},[149,2516,1094],{"class":166},[149,2518,276],{"class":170},[149,2520,1163],{"class":504},[149,2522,1166],{"class":166},[149,2524,276],{"class":170},[149,2526,1171],{"class":504},[149,2528,858],{"class":166},[149,2530,2531],{"class":308},"8",[149,2533,797],{"class":166},[149,2535,189],{"class":170},[149,2537,2538,2540],{"class":151,"line":696},[149,2539,1044],{"class":170},[149,2541,1211],{"class":166},[113,2543,2545],{"id":2544},"_3-testing","3. Testing",[118,2547,2549],{"className":143,"code":2548,"language":145,"meta":127,"style":127},"// Unit tests\nimport { describe, it, expect } from \"vitest\"\n\ndescribe(\"UserService\", () => {\n it(\"creates user\", async () => {\n const user = await createUser({\n email: \"test@example.com\",\n name: \"Test\",\n })\n\n expect(user.email).toBe(\"test@example.com\")\n })\n})\n\n// E2E tests\nimport { test, expect } from \"@playwright/test\"\n\ntest(\"user can login\", async ({ page }) => {\n await page.goto(\"/login\")\n await page.fill(\"[name=email]\", \"test@example.com\")\n await page.fill(\"[name=password]\", \"password\")\n await page.click(\"button[type=submit]\")\n await expect(page).toHaveURL(\"/dashboard\")\n})\n",[125,2550,2551,2556,2586,2590,2612,2636,2654,2670,2686,2692,2696,2726,2732,2738,2742,2747,2771,2775,2806,2828,2858,2888,2910,2939],{"__ignoreMap":127},[149,2552,2553],{"class":151,"line":152},[149,2554,2555],{"class":155},"// Unit tests\n",[149,2557,2558,2560,2562,2565,2567,2570,2572,2575,2577,2579,2581,2584],{"class":151,"line":159},[149,2559,731],{"class":339},[149,2561,734],{"class":170},[149,2563,2564],{"class":166}," describe",[149,2566,939],{"class":170},[149,2568,2569],{"class":166}," it",[149,2571,939],{"class":170},[149,2573,2574],{"class":166}," expect",[149,2576,740],{"class":170},[149,2578,743],{"class":339},[149,2580,746],{"class":170},[149,2582,2583],{"class":182},"vitest",[149,2585,752],{"class":170},[149,2587,2588],{"class":151,"line":16},[149,2589,334],{"emptyLinePlaceholder":333},[149,2591,2592,2595,2597,2599,2602,2604,2606,2608,2610],{"class":151,"line":192},[149,2593,2594],{"class":504},"describe",[149,2596,858],{"class":166},[149,2598,186],{"class":170},[149,2600,2601],{"class":182},"UserService",[149,2603,186],{"class":170},[149,2605,939],{"class":170},[149,2607,1884],{"class":170},[149,2609,800],{"class":162},[149,2611,283],{"class":170},[149,2613,2614,2617,2619,2621,2624,2626,2628,2630,2632,2634],{"class":151,"line":204},[149,2615,2616],{"class":504}," it",[149,2618,858],{"class":406},[149,2620,186],{"class":170},[149,2622,2623],{"class":182},"creates user",[149,2625,186],{"class":170},[149,2627,939],{"class":170},[149,2629,1239],{"class":162},[149,2631,1884],{"class":170},[149,2633,800],{"class":162},[149,2635,283],{"class":170},[149,2637,2638,2641,2643,2645,2647,2650,2652],{"class":151,"line":216},[149,2639,2640],{"class":162}," const",[149,2642,1403],{"class":166},[149,2644,1261],{"class":170},[149,2646,1264],{"class":339},[149,2648,2649],{"class":504}," createUser",[149,2651,858],{"class":406},[149,2653,346],{"class":170},[149,2655,2656,2659,2661,2663,2666,2668],{"class":151,"line":228},[149,2657,2658],{"class":406}," email",[149,2660,292],{"class":170},[149,2662,746],{"class":170},[149,2664,2665],{"class":182},"test@example.com",[149,2667,186],{"class":170},[149,2669,189],{"class":170},[149,2671,2672,2675,2677,2679,2682,2684],{"class":151,"line":240},[149,2673,2674],{"class":406}," name",[149,2676,292],{"class":170},[149,2678,746],{"class":170},[149,2680,2681],{"class":182},"Test",[149,2683,186],{"class":170},[149,2685,189],{"class":170},[149,2687,2688,2690],{"class":151,"line":252},[149,2689,949],{"class":170},[149,2691,1211],{"class":406},[149,2693,2694],{"class":151,"line":359},[149,2695,334],{"emptyLinePlaceholder":333},[149,2697,2698,2701,2703,2705,2707,2709,2711,2713,2716,2718,2720,2722,2724],{"class":151,"line":375},[149,2699,2700],{"class":504}," expect",[149,2702,858],{"class":406},[149,2704,1272],{"class":166},[149,2706,276],{"class":170},[149,2708,1200],{"class":166},[149,2710,797],{"class":406},[149,2712,276],{"class":170},[149,2714,2715],{"class":504},"toBe",[149,2717,858],{"class":406},[149,2719,186],{"class":170},[149,2721,2665],{"class":182},[149,2723,186],{"class":170},[149,2725,1211],{"class":406},[149,2727,2728,2730],{"class":151,"line":381},[149,2729,2351],{"class":170},[149,2731,1211],{"class":406},[149,2733,2734,2736],{"class":151,"line":29},[149,2735,1044],{"class":170},[149,2737,1211],{"class":166},[149,2739,2740],{"class":151,"line":573},[149,2741,334],{"emptyLinePlaceholder":333},[149,2743,2744],{"class":151,"line":583},[149,2745,2746],{"class":155},"// E2E tests\n",[149,2748,2749,2751,2753,2756,2758,2760,2762,2764,2766,2769],{"class":151,"line":594},[149,2750,731],{"class":339},[149,2752,734],{"class":170},[149,2754,2755],{"class":166}," test",[149,2757,939],{"class":170},[149,2759,2574],{"class":166},[149,2761,740],{"class":170},[149,2763,743],{"class":339},[149,2765,746],{"class":170},[149,2767,2768],{"class":182},"@playwright/test",[149,2770,752],{"class":170},[149,2772,2773],{"class":151,"line":613},[149,2774,334],{"emptyLinePlaceholder":333},[149,2776,2777,2780,2782,2784,2787,2789,2791,2793,2796,2799,2802,2804],{"class":151,"line":623},[149,2778,2779],{"class":504},"test",[149,2781,858],{"class":166},[149,2783,186],{"class":170},[149,2785,2786],{"class":182},"user can login",[149,2788,186],{"class":170},[149,2790,939],{"class":170},[149,2792,1239],{"class":162},[149,2794,2795],{"class":170}," ({",[149,2797,2798],{"class":790}," page",[149,2800,2801],{"class":170}," })",[149,2803,800],{"class":162},[149,2805,283],{"class":170},[149,2807,2808,2810,2812,2814,2817,2819,2821,2824,2826],{"class":151,"line":670},[149,2809,2176],{"class":339},[149,2811,2798],{"class":166},[149,2813,276],{"class":170},[149,2815,2816],{"class":504},"goto",[149,2818,858],{"class":406},[149,2820,186],{"class":170},[149,2822,2823],{"class":182},"/login",[149,2825,186],{"class":170},[149,2827,1211],{"class":406},[149,2829,2830,2832,2834,2836,2839,2841,2843,2846,2848,2850,2852,2854,2856],{"class":151,"line":676},[149,2831,2176],{"class":339},[149,2833,2798],{"class":166},[149,2835,276],{"class":170},[149,2837,2838],{"class":504},"fill",[149,2840,858],{"class":406},[149,2842,186],{"class":170},[149,2844,2845],{"class":182},"[name=email]",[149,2847,186],{"class":170},[149,2849,939],{"class":170},[149,2851,746],{"class":170},[149,2853,2665],{"class":182},[149,2855,186],{"class":170},[149,2857,1211],{"class":406},[149,2859,2860,2862,2864,2866,2868,2870,2872,2875,2877,2879,2881,2884,2886],{"class":151,"line":686},[149,2861,2176],{"class":339},[149,2863,2798],{"class":166},[149,2865,276],{"class":170},[149,2867,2838],{"class":504},[149,2869,858],{"class":406},[149,2871,186],{"class":170},[149,2873,2874],{"class":182},"[name=password]",[149,2876,186],{"class":170},[149,2878,939],{"class":170},[149,2880,746],{"class":170},[149,2882,2883],{"class":182},"password",[149,2885,186],{"class":170},[149,2887,1211],{"class":406},[149,2889,2890,2892,2894,2896,2899,2901,2903,2906,2908],{"class":151,"line":696},[149,2891,2176],{"class":339},[149,2893,2798],{"class":166},[149,2895,276],{"class":170},[149,2897,2898],{"class":504},"click",[149,2900,858],{"class":406},[149,2902,186],{"class":170},[149,2904,2905],{"class":182},"button[type=submit]",[149,2907,186],{"class":170},[149,2909,1211],{"class":406},[149,2911,2912,2914,2916,2918,2921,2923,2925,2928,2930,2932,2935,2937],{"class":151,"line":706},[149,2913,2176],{"class":339},[149,2915,2574],{"class":504},[149,2917,858],{"class":406},[149,2919,2920],{"class":166},"page",[149,2922,797],{"class":406},[149,2924,276],{"class":170},[149,2926,2927],{"class":504},"toHaveURL",[149,2929,858],{"class":406},[149,2931,186],{"class":170},[149,2933,2934],{"class":182},"/dashboard",[149,2936,186],{"class":170},[149,2938,1211],{"class":406},[149,2940,2941,2943],{"class":151,"line":1822},[149,2942,1044],{"class":170},[149,2944,1211],{"class":166},[98,2946,2948],{"id":2947},"specialization-paths","Specialization Paths",[113,2950,2952],{"id":2951},"_1-frontend-focused","1. Frontend-Focused",[118,2954,2957],{"className":2955,"code":2956,"language":123},[121],"Deep expertise:\n- Advanced React/Vue patterns\n- Performance optimization\n- Accessibility (WCAG)\n- Design systems\n- Web animations\n",[125,2958,2956],{"__ignoreMap":127},[113,2960,2962],{"id":2961},"_2-backend-focused","2. Backend-Focused",[118,2964,2967],{"className":2965,"code":2966,"language":123},[121],"Deep expertise:\n- Database optimization\n- API design\n- Microservices\n- Message queues\n- Caching strategies\n",[125,2968,2966],{"__ignoreMap":127},[113,2970,2972],{"id":2971},"_3-devops-focused","3. DevOps-Focused",[118,2974,2977],{"className":2975,"code":2976,"language":123},[121],"Deep expertise:\n- Cloud infrastructure\n- Container orchestration\n- CI/CD pipelines\n- Monitoring and logging\n- Security compliance\n",[125,2978,2976],{"__ignoreMap":127},[98,2980,2982],{"id":2981},"tools-of-the-trade","Tools of the Trade",[113,2984,2986],{"id":2985},"development","Development",[118,2988,2992],{"className":2989,"code":2990,"language":2991,"meta":127,"style":127},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# Essential CLI tools\nnpm install -g vercel # Deployment\nnpm install -g prisma # Database ORM\nnpm install -g wrangler # Cloudflare Workers\nnpm install -g @anthropic/ai # AI assistance\n","bash",[125,2993,2994,2999,3016,3030,3044],{"__ignoreMap":127},[149,2995,2996],{"class":151,"line":152},[149,2997,2998],{"class":155},"# Essential CLI tools\n",[149,3000,3001,3004,3007,3010,3013],{"class":151,"line":159},[149,3002,3003],{"class":279},"npm",[149,3005,3006],{"class":182}," install",[149,3008,3009],{"class":182}," -g",[149,3011,3012],{"class":182}," vercel",[149,3014,3015],{"class":155}," # Deployment\n",[149,3017,3018,3020,3022,3024,3027],{"class":151,"line":16},[149,3019,3003],{"class":279},[149,3021,3006],{"class":182},[149,3023,3009],{"class":182},[149,3025,3026],{"class":182}," prisma",[149,3028,3029],{"class":155}," # Database ORM\n",[149,3031,3032,3034,3036,3038,3041],{"class":151,"line":192},[149,3033,3003],{"class":279},[149,3035,3006],{"class":182},[149,3037,3009],{"class":182},[149,3039,3040],{"class":182}," wrangler",[149,3042,3043],{"class":155}," # Cloudflare Workers\n",[149,3045,3046,3048,3050,3052,3055],{"class":151,"line":204},[149,3047,3003],{"class":279},[149,3049,3006],{"class":182},[149,3051,3009],{"class":182},[149,3053,3054],{"class":182}," @anthropic/ai",[149,3056,3057],{"class":155}," # AI assistance\n",[113,3059,3061],{"id":3060},"vs-code-extensions","VS Code Extensions",[118,3063,3066],{"className":3064,"code":3065,"language":1292,"meta":127,"style":127},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n \"recommendations\": [\n \"dbaeumer.vscode-eslint\",\n \"esbenp.prettier-vscode\",\n \"bradlc.vscode-tailwindcss\",\n \"vue.volar\",\n \"formulahendry.auto-rename-tag\"\n ]\n}\n",[125,3067,3068,3072,3085,3097,3108,3119,3130,3139,3144],{"__ignoreMap":127},[149,3069,3070],{"class":151,"line":152},[149,3071,346],{"class":170},[149,3073,3074,3076,3079,3081,3083],{"class":151,"line":159},[149,3075,179],{"class":170},[149,3077,3078],{"class":162},"recommendations",[149,3080,186],{"class":170},[149,3082,292],{"class":170},[149,3084,174],{"class":170},[149,3086,3087,3090,3093,3095],{"class":151,"line":16},[149,3088,3089],{"class":170}," \"",[149,3091,3092],{"class":182},"dbaeumer.vscode-eslint",[149,3094,186],{"class":170},[149,3096,189],{"class":170},[149,3098,3099,3101,3104,3106],{"class":151,"line":192},[149,3100,3089],{"class":170},[149,3102,3103],{"class":182},"esbenp.prettier-vscode",[149,3105,186],{"class":170},[149,3107,189],{"class":170},[149,3109,3110,3112,3115,3117],{"class":151,"line":204},[149,3111,3089],{"class":170},[149,3113,3114],{"class":182},"bradlc.vscode-tailwindcss",[149,3116,186],{"class":170},[149,3118,189],{"class":170},[149,3120,3121,3123,3126,3128],{"class":151,"line":216},[149,3122,3089],{"class":170},[149,3124,3125],{"class":182},"vue.volar",[149,3127,186],{"class":170},[149,3129,189],{"class":170},[149,3131,3132,3134,3137],{"class":151,"line":228},[149,3133,3089],{"class":170},[149,3135,3136],{"class":182},"formulahendry.auto-rename-tag",[149,3138,752],{"class":170},[149,3140,3141],{"class":151,"line":240},[149,3142,3143],{"class":170}," ]\n",[149,3145,3146],{"class":151,"line":252},[149,3147,328],{"class":170},[98,3149,3151],{"id":3150},"career-advice","Career Advice",[113,3153,3155],{"id":3154},"_1-build-projects","1. Build Projects",[118,3157,3159],{"className":143,"code":3158,"language":145,"meta":127,"style":127},"// Portfolio projects\nconst projects = [\n \"Full-stack e-commerce site\",\n \"Real-time chat application\",\n \"Data visualization dashboard\",\n \"Mobile-first PWA\",\n \"Open-source contribution\",\n]\n",[125,3160,3161,3166,3177,3188,3199,3210,3221,3232],{"__ignoreMap":127},[149,3162,3163],{"class":151,"line":152},[149,3164,3165],{"class":155},"// Portfolio projects\n",[149,3167,3168,3170,3173,3175],{"class":151,"line":159},[149,3169,163],{"class":162},[149,3171,3172],{"class":166}," projects ",[149,3174,171],{"class":170},[149,3176,174],{"class":166},[149,3178,3179,3181,3184,3186],{"class":151,"line":16},[149,3180,179],{"class":170},[149,3182,3183],{"class":182},"Full-stack e-commerce site",[149,3185,186],{"class":170},[149,3187,189],{"class":170},[149,3189,3190,3192,3195,3197],{"class":151,"line":192},[149,3191,179],{"class":170},[149,3193,3194],{"class":182},"Real-time chat application",[149,3196,186],{"class":170},[149,3198,189],{"class":170},[149,3200,3201,3203,3206,3208],{"class":151,"line":204},[149,3202,179],{"class":170},[149,3204,3205],{"class":182},"Data visualization dashboard",[149,3207,186],{"class":170},[149,3209,189],{"class":170},[149,3211,3212,3214,3217,3219],{"class":151,"line":216},[149,3213,179],{"class":170},[149,3215,3216],{"class":182},"Mobile-first PWA",[149,3218,186],{"class":170},[149,3220,189],{"class":170},[149,3222,3223,3225,3228,3230],{"class":151,"line":228},[149,3224,179],{"class":170},[149,3226,3227],{"class":182},"Open-source contribution",[149,3229,186],{"class":170},[149,3231,189],{"class":170},[149,3233,3234],{"class":151,"line":240},[149,3235,255],{"class":166},[113,3237,3239],{"id":3238},"_2-stay-current","2. Stay Current",[118,3241,3245],{"className":3242,"code":3243,"language":3244,"meta":127,"style":127},"language-markdown shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","- Follow industry blogs\n- Attend conferences (virtual/in-person)\n- Contribute to open source\n- Write technical articles\n- Build side projects\n","markdown",[125,3246,3247,3252,3257,3262,3267],{"__ignoreMap":127},[149,3248,3249],{"class":151,"line":152},[149,3250,3251],{},"- Follow industry blogs\n",[149,3253,3254],{"class":151,"line":159},[149,3255,3256],{},"- Attend conferences (virtual/in-person)\n",[149,3258,3259],{"class":151,"line":16},[149,3260,3261],{},"- Contribute to open source\n",[149,3263,3264],{"class":151,"line":192},[149,3265,3266],{},"- Write technical articles\n",[149,3268,3269],{"class":151,"line":204},[149,3270,3271],{},"- Build side projects\n",[113,3273,3275],{"id":3274},"_3-network","3. Network",[618,3277,3278,3281,3284,3287,3290],{},[629,3279,3280],{},"Join Discord communities",[629,3282,3283],{},"Attend local meetups",[629,3285,3286],{},"Connect on LinkedIn",[629,3288,3289],{},"Participate in Twitter tech community",[629,3291,3292],{},"Mentor others",[98,3294,3296],{"id":3295},"salary-expectations-2026","Salary Expectations (2026)",[3298,3299,3300,3316],"table",{},[3301,3302,3303],"thead",{},[3304,3305,3306,3310,3313],"tr",{},[3307,3308,3309],"th",{},"Level",[3307,3311,3312],{},"Experience",[3307,3314,3315],{},"Salary Range (US)",[3317,3318,3319,3331,3342,3353],"tbody",{},[3304,3320,3321,3325,3328],{},[3322,3323,3324],"td",{},"Junior",[3322,3326,3327],{},"0-2 years",[3322,3329,3330],{},"$70k - $95k",[3304,3332,3333,3336,3339],{},[3322,3334,3335],{},"Mid",[3322,3337,3338],{},"2-5 years",[3322,3340,3341],{},"$95k - $140k",[3304,3343,3344,3347,3350],{},[3322,3345,3346],{},"Senior",[3322,3348,3349],{},"5-8 years",[3322,3351,3352],{},"$140k - $180k",[3304,3354,3355,3358,3361],{},[3322,3356,3357],{},"Staff",[3322,3359,3360],{},"8+ years",[3322,3362,3363],{},"$180k - $250k+",[98,3365,3367],{"id":3366},"common-mistakes-to-avoid","Common Mistakes to Avoid",[113,3369,3371],{"id":3370},"_1-tutorial-hell","1. Tutorial Hell",[118,3373,3375],{"className":143,"code":3374,"language":145,"meta":127,"style":127},"// ❌ Bad: Only following tutorials\n// ✅ Good: Build original projects\n\nconst learningPath = {\n tutorials: 20%,\n originalProjects: 80%\n}\n",[125,3376,3377,3382,3387,3391,3402,3415,3428],{"__ignoreMap":127},[149,3378,3379],{"class":151,"line":152},[149,3380,3381],{"class":155},"// ❌ Bad: Only following tutorials\n",[149,3383,3384],{"class":151,"line":159},[149,3385,3386],{"class":155},"// ✅ Good: Build original projects\n",[149,3388,3389],{"class":151,"line":16},[149,3390,334],{"emptyLinePlaceholder":333},[149,3392,3393,3395,3398,3400],{"class":151,"line":192},[149,3394,163],{"class":162},[149,3396,3397],{"class":166}," learningPath ",[149,3399,171],{"class":170},[149,3401,283],{"class":170},[149,3403,3404,3407,3409,3412],{"class":151,"line":204},[149,3405,3406],{"class":406}," tutorials",[149,3408,292],{"class":170},[149,3410,3411],{"class":308}," 20",[149,3413,3414],{"class":170},"%,\n",[149,3416,3417,3420,3422,3425],{"class":151,"line":216},[149,3418,3419],{"class":406}," originalProjects",[149,3421,292],{"class":170},[149,3423,3424],{"class":308}," 80",[149,3426,3427],{"class":170},"%\n",[149,3429,3430],{"class":151,"line":228},[149,3431,328],{"class":170},[113,3433,3435],{"id":3434},"_2-ignoring-fundamentals","2. Ignoring Fundamentals",[118,3437,3439],{"className":143,"code":3438,"language":145,"meta":127,"style":127},"// Don't skip:\n// - JavaScript/TypeScript basics\n// - HTTP/Network protocols\n// - Database fundamentals\n// - Security principles\n",[125,3440,3441,3446,3451,3456,3461],{"__ignoreMap":127},[149,3442,3443],{"class":151,"line":152},[149,3444,3445],{"class":155},"// Don't skip:\n",[149,3447,3448],{"class":151,"line":159},[149,3449,3450],{"class":155},"// - JavaScript/TypeScript basics\n",[149,3452,3453],{"class":151,"line":16},[149,3454,3455],{"class":155},"// - HTTP/Network protocols\n",[149,3457,3458],{"class":151,"line":192},[149,3459,3460],{"class":155},"// - Database fundamentals\n",[149,3462,3463],{"class":151,"line":204},[149,3464,3465],{"class":155},"// - Security principles\n",[113,3467,3469],{"id":3468},"_3-not-specializing","3. Not Specializing",[118,3471,3473],{"className":143,"code":3472,"language":145,"meta":127,"style":127},"// Generalist → Specialist path\nconst careerPath = [\n \"Learn basics (6 months)\",\n \"Build projects (6 months)\",\n \"Choose specialization (3 months)\",\n \"Deep dive specialization (ongoing)\",\n]\n",[125,3474,3475,3480,3491,3502,3513,3524,3535],{"__ignoreMap":127},[149,3476,3477],{"class":151,"line":152},[149,3478,3479],{"class":155},"// Generalist → Specialist path\n",[149,3481,3482,3484,3487,3489],{"class":151,"line":159},[149,3483,163],{"class":162},[149,3485,3486],{"class":166}," careerPath ",[149,3488,171],{"class":170},[149,3490,174],{"class":166},[149,3492,3493,3495,3498,3500],{"class":151,"line":16},[149,3494,179],{"class":170},[149,3496,3497],{"class":182},"Learn basics (6 months)",[149,3499,186],{"class":170},[149,3501,189],{"class":170},[149,3503,3504,3506,3509,3511],{"class":151,"line":192},[149,3505,179],{"class":170},[149,3507,3508],{"class":182},"Build projects (6 months)",[149,3510,186],{"class":170},[149,3512,189],{"class":170},[149,3514,3515,3517,3520,3522],{"class":151,"line":204},[149,3516,179],{"class":170},[149,3518,3519],{"class":182},"Choose specialization (3 months)",[149,3521,186],{"class":170},[149,3523,189],{"class":170},[149,3525,3526,3528,3531,3533],{"class":151,"line":216},[149,3527,179],{"class":170},[149,3529,3530],{"class":182},"Deep dive specialization (ongoing)",[149,3532,186],{"class":170},[149,3534,189],{"class":170},[149,3536,3537],{"class":151,"line":228},[149,3538,255],{"class":166},[98,3540,3542],{"id":3541},"resources","Resources",[113,3544,3546],{"id":3545},"learning-platforms","Learning Platforms",[618,3548,3549,3558,3565,3572],{},[629,3550,3551],{},[3552,3553,3557],"a",{"href":3554,"rel":3555},"https://frontendmasters.com/",[3556],"nofollow","Frontend Masters",[629,3559,3560],{},[3552,3561,3564],{"href":3562,"rel":3563},"https://epicreact.dev/",[3556],"Epic React",[629,3566,3567],{},[3552,3568,3571],{"href":3569,"rel":3570},"https://fullstackopen.com/",[3556],"Full Stack Open",[629,3573,3574],{},[3552,3575,3578],{"href":3576,"rel":3577},"https://roadmap.sh/",[3556],"Roadmap.sh",[113,3580,3582],{"id":3581},"documentation","Documentation",[618,3584,3585,3592,3599],{},[629,3586,3587],{},[3552,3588,3591],{"href":3589,"rel":3590},"https://developer.mozilla.org/",[3556],"MDN Web Docs",[629,3593,3594],{},[3552,3595,3598],{"href":3596,"rel":3597},"https://www.typescriptlang.org/docs/",[3556],"TypeScript Handbook",[629,3600,3601],{},[3552,3602,3605],{"href":3603,"rel":3604},"https://web.dev/",[3556],"Web.dev",[98,3607,3609],{"id":3608},"conclusion","Conclusion",[102,3611,3612],{},"Becoming a full-stack developer in 2026 requires dedication, continuous learning, and practical experience. Focus on fundamentals, build real projects, and specialize over time. The journey is challenging but rewarding.",[102,3614,3615],{},"Start with the basics, progress through the phases, and remember: consistency beats intensity. Code every day, even if it's just for 30 minutes.",[3617,3618],"hr",{},[102,3620,3621,3625],{},[3622,3623,3624],"strong",{},"Ready to start?"," Pick one item from Phase 1 and spend 30 minutes on it today. Small, consistent steps lead to big results.",[3627,3628,3629],"style",{},"html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sqsOY, html code.shiki .sqsOY{--shiki-light:#8796B0;--shiki-default:#B2CCD6;--shiki-dark:#B2CCD6}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}",{"title":127,"searchDepth":159,"depth":159,"links":3631},[3632,3633,3636,3642,3647,3652,3656,3661,3662,3667,3671],{"id":100,"depth":159,"text":91},{"id":110,"depth":159,"text":111,"children":3634},[3635],{"id":115,"depth":16,"text":116},{"id":130,"depth":159,"text":131,"children":3637},[3638,3639,3640,3641],{"id":134,"depth":16,"text":135},{"id":386,"depth":16,"text":387},{"id":1050,"depth":16,"text":1051},{"id":1520,"depth":16,"text":1521},{"id":1857,"depth":159,"text":1858,"children":3643},[3644,3645,3646],{"id":1861,"depth":16,"text":1862},{"id":2233,"depth":16,"text":2234},{"id":2544,"depth":16,"text":2545},{"id":2947,"depth":159,"text":2948,"children":3648},[3649,3650,3651],{"id":2951,"depth":16,"text":2952},{"id":2961,"depth":16,"text":2962},{"id":2971,"depth":16,"text":2972},{"id":2981,"depth":159,"text":2982,"children":3653},[3654,3655],{"id":2985,"depth":16,"text":2986},{"id":3060,"depth":16,"text":3061},{"id":3150,"depth":159,"text":3151,"children":3657},[3658,3659,3660],{"id":3154,"depth":16,"text":3155},{"id":3238,"depth":16,"text":3239},{"id":3274,"depth":16,"text":3275},{"id":3295,"depth":159,"text":3296},{"id":3366,"depth":159,"text":3367,"children":3663},[3664,3665,3666],{"id":3370,"depth":16,"text":3371},{"id":3434,"depth":16,"text":3435},{"id":3468,"depth":16,"text":3469},{"id":3541,"depth":159,"text":3542,"children":3668},[3669,3670],{"id":3545,"depth":16,"text":3546},{"id":3581,"depth":16,"text":3582},{"id":3608,"depth":159,"text":3609},"2026-02-16","Master full-stack development in 2026 with this comprehensive roadmap covering modern frameworks, tools, and best practices.","md",{"readingTime":3676},"12 min read","/blog/33-full-stack-development-2026-roadmap",{"title":91,"description":3673},"Developer Career","Career guidance and skill development for developers",{"src":3682,"mime":3683,"alt":3684,"width":3685,"height":3686},"/img/blog/33-full-stack-development-2026-roadmap/banner.svg","svg","Full Stack Development 2026 - Complete tech stack visualization with frontend, backend, and database",1200,630,"blog/33-full-stack-development-2026-roadmap",[3689,3690,3691,131,3692],"Full-Stack","Career","Web Development","JavaScript","JGTcCDSpXr-qofYy_voa3MWxowCLJTHrJlAs40bN7os",[3695],{"id":90,"title":91,"abstract":92,"author":93,"authorUrl":92,"body":3696,"date":3672,"dateUpdated":3672,"description":3673,"excerpt":92,"extension":3674,"featured":333,"headline":92,"image":92,"meta":6663,"navigation":333,"ogImage":92,"path":3677,"seo":6664,"series":3679,"seriesDescription":3680,"seriesOrder":152,"socialImage":6665,"stem":3687,"tags":6666,"__hash__":3693},{"type":95,"value":3697,"toc":6621},[3698,3700,3702,3704,3706,3708,3713,3715,3717,3719,3801,3803,3893,3895,3897,4153,4155,4439,4441,4443,4805,4807,4847,4849,4851,4927,4929,5123,5125,5127,5449,5451,5729,5731,6093,6095,6097,6102,6104,6109,6111,6116,6118,6120,6176,6178,6254,6256,6258,6330,6332,6356,6358,6370,6372,6418,6420,6422,6472,6474,6498,6500,6562,6564,6566,6588,6590,6607,6609,6611,6613,6615,6619],[98,3699,91],{"id":100},[102,3701,104],{},[102,3703,107],{},[98,3705,111],{"id":110},[113,3707,116],{"id":115},[118,3709,3711],{"className":3710,"code":122,"language":123},[121],[125,3712,122],{"__ignoreMap":127},[98,3714,131],{"id":130},[113,3716,135],{"id":134},[137,3718,140],{"id":139},[118,3720,3721],{"className":143,"code":144,"language":145,"meta":127,"style":127},[125,3722,3723,3727,3737,3747,3757,3767,3777,3787,3797],{"__ignoreMap":127},[149,3724,3725],{"class":151,"line":152},[149,3726,156],{"class":155},[149,3728,3729,3731,3733,3735],{"class":151,"line":159},[149,3730,163],{"class":162},[149,3732,167],{"class":166},[149,3734,171],{"class":170},[149,3736,174],{"class":166},[149,3738,3739,3741,3743,3745],{"class":151,"line":16},[149,3740,179],{"class":170},[149,3742,183],{"class":182},[149,3744,186],{"class":170},[149,3746,189],{"class":170},[149,3748,3749,3751,3753,3755],{"class":151,"line":192},[149,3750,179],{"class":170},[149,3752,197],{"class":182},[149,3754,186],{"class":170},[149,3756,189],{"class":170},[149,3758,3759,3761,3763,3765],{"class":151,"line":204},[149,3760,179],{"class":170},[149,3762,209],{"class":182},[149,3764,186],{"class":170},[149,3766,189],{"class":170},[149,3768,3769,3771,3773,3775],{"class":151,"line":216},[149,3770,179],{"class":170},[149,3772,221],{"class":182},[149,3774,186],{"class":170},[149,3776,189],{"class":170},[149,3778,3779,3781,3783,3785],{"class":151,"line":228},[149,3780,179],{"class":170},[149,3782,233],{"class":182},[149,3784,186],{"class":170},[149,3786,189],{"class":170},[149,3788,3789,3791,3793,3795],{"class":151,"line":240},[149,3790,179],{"class":170},[149,3792,245],{"class":182},[149,3794,186],{"class":170},[149,3796,189],{"class":170},[149,3798,3799],{"class":151,"line":252},[149,3800,255],{"class":166},[137,3802,259],{"id":258},[118,3804,3805],{"className":262,"code":263,"language":264,"meta":127,"style":127},[125,3806,3807,3811,3819,3829,3839,3849,3853,3857,3865,3873,3885,3889],{"__ignoreMap":127},[149,3808,3809],{"class":151,"line":152},[149,3810,271],{"class":155},[149,3812,3813,3815,3817],{"class":151,"line":159},[149,3814,276],{"class":170},[149,3816,280],{"class":279},[149,3818,283],{"class":170},[149,3820,3821,3823,3825,3827],{"class":151,"line":16},[149,3822,289],{"class":288},[149,3824,292],{"class":170},[149,3826,295],{"class":166},[149,3828,298],{"class":170},[149,3830,3831,3833,3835,3837],{"class":151,"line":192},[149,3832,303],{"class":288},[149,3834,292],{"class":170},[149,3836,309],{"class":308},[149,3838,298],{"class":170},[149,3840,3841,3843,3845,3847],{"class":151,"line":204},[149,3842,316],{"class":288},[149,3844,292],{"class":170},[149,3846,321],{"class":166},[149,3848,298],{"class":170},[149,3850,3851],{"class":151,"line":216},[149,3852,328],{"class":170},[149,3854,3855],{"class":151,"line":228},[149,3856,334],{"emptyLinePlaceholder":333},[149,3858,3859,3861,3863],{"class":151,"line":240},[149,3860,340],{"class":339},[149,3862,343],{"class":166},[149,3864,346],{"class":170},[149,3866,3867,3869,3871],{"class":151,"line":252},[149,3868,351],{"class":170},[149,3870,354],{"class":279},[149,3872,283],{"class":170},[149,3874,3875,3877,3879,3881,3883],{"class":151,"line":359},[149,3876,362],{"class":288},[149,3878,292],{"class":170},[149,3880,367],{"class":166},[149,3882,370],{"class":308},[149,3884,298],{"class":170},[149,3886,3887],{"class":151,"line":375},[149,3888,378],{"class":170},[149,3890,3891],{"class":151,"line":381},[149,3892,328],{"class":170},[113,3894,387],{"id":386},[137,3896,391],{"id":390},[118,3898,3899],{"className":394,"code":395,"language":396,"meta":127,"style":127},[125,3900,3901,3921,3925,3933,3941,3967,3971,3975,3993,4005,4021,4027,4035,4039,4047,4055,4071,4079,4117,4121,4129,4137,4145],{"__ignoreMap":127},[149,3902,3903,3905,3907,3909,3911,3913,3915,3917,3919],{"class":151,"line":152},[149,3904,403],{"class":170},[149,3906,407],{"class":406},[149,3908,410],{"class":162},[149,3910,413],{"class":162},[149,3912,171],{"class":170},[149,3914,186],{"class":170},[149,3916,420],{"class":182},[149,3918,186],{"class":170},[149,3920,425],{"class":170},[149,3922,3923],{"class":151,"line":159},[149,3924,430],{"class":155},[149,3926,3927,3929,3931],{"class":151,"line":16},[149,3928,435],{"class":162},[149,3930,438],{"class":279},[149,3932,283],{"class":170},[149,3934,3935,3937,3939],{"class":151,"line":192},[149,3936,445],{"class":406},[149,3938,292],{"class":170},[149,3940,450],{"class":279},[149,3942,3943,3945,3947,3949,3951,3953,3955,3957,3959,3961,3963,3965],{"class":151,"line":204},[149,3944,455],{"class":406},[149,3946,292],{"class":170},[149,3948,460],{"class":279},[149,3950,463],{"class":170},[149,3952,466],{"class":406},[149,3954,292],{"class":170},[149,3956,471],{"class":279},[149,3958,474],{"class":170},[149,3960,477],{"class":406},[149,3962,292],{"class":170},[149,3964,471],{"class":279},[149,3966,484],{"class":170},[149,3968,3969],{"class":151,"line":216},[149,3970,328],{"class":170},[149,3972,3973],{"class":151,"line":228},[149,3974,334],{"emptyLinePlaceholder":333},[149,3976,3977,3979,3981,3983,3985,3987,3989,3991],{"class":151,"line":240},[149,3978,163],{"class":162},[149,3980,499],{"class":166},[149,3982,171],{"class":170},[149,3984,505],{"class":504},[149,3986,403],{"class":170},[149,3988,510],{"class":279},[149,3990,513],{"class":170},[149,3992,516],{"class":166},[149,3994,3995,3997,3999,4001,4003],{"class":151,"line":252},[149,3996,163],{"class":162},[149,3998,523],{"class":166},[149,4000,171],{"class":170},[149,4002,528],{"class":504},[149,4004,531],{"class":170},[149,4006,4007,4009,4011,4013,4015,4017,4019],{"class":151,"line":359},[149,4008,536],{"class":406},[149,4010,292],{"class":170},[149,4012,541],{"class":166},[149,4014,544],{"class":279},[149,4016,292],{"class":170},[149,4018,471],{"class":279},[149,4020,255],{"class":166},[149,4022,4023,4025],{"class":151,"line":375},[149,4024,555],{"class":170},[149,4026,516],{"class":166},[149,4028,4029,4031,4033],{"class":151,"line":381},[149,4030,562],{"class":170},[149,4032,407],{"class":406},[149,4034,425],{"class":170},[149,4036,4037],{"class":151,"line":29},[149,4038,334],{"emptyLinePlaceholder":333},[149,4040,4041,4043,4045],{"class":151,"line":573},[149,4042,403],{"class":170},[149,4044,578],{"class":406},[149,4046,425],{"class":170},[149,4048,4049,4051,4053],{"class":151,"line":583},[149,4050,586],{"class":170},[149,4052,589],{"class":406},[149,4054,425],{"class":170},[149,4056,4057,4059,4061,4063,4065,4067,4069],{"class":151,"line":594},[149,4058,597],{"class":170},[149,4060,98],{"class":406},[149,4062,513],{"class":170},[149,4064,604],{"class":166},[149,4066,562],{"class":170},[149,4068,98],{"class":406},[149,4070,425],{"class":170},[149,4072,4073,4075,4077],{"class":151,"line":613},[149,4074,597],{"class":170},[149,4076,618],{"class":406},[149,4078,425],{"class":170},[149,4080,4081,4083,4085,4087,4089,4091,4093,4095,4097,4099,4101,4103,4105,4107,4109,4111,4113,4115],{"class":151,"line":623},[149,4082,626],{"class":170},[149,4084,629],{"class":406},[149,4086,632],{"class":162},[149,4088,171],{"class":170},[149,4090,186],{"class":170},[149,4092,639],{"class":182},[149,4094,186],{"class":170},[149,4096,644],{"class":162},[149,4098,171],{"class":170},[149,4100,186],{"class":170},[149,4102,651],{"class":182},[149,4104,186],{"class":170},[149,4106,656],{"class":162},[149,4108,171],{"class":170},[149,4110,186],{"class":170},[149,4112,663],{"class":182},[149,4114,186],{"class":170},[149,4116,425],{"class":170},[149,4118,4119],{"class":151,"line":670},[149,4120,673],{"class":166},[149,4122,4123,4125,4127],{"class":151,"line":676},[149,4124,679],{"class":170},[149,4126,629],{"class":406},[149,4128,425],{"class":170},[149,4130,4131,4133,4135],{"class":151,"line":686},[149,4132,689],{"class":170},[149,4134,618],{"class":406},[149,4136,425],{"class":170},[149,4138,4139,4141,4143],{"class":151,"line":696},[149,4140,699],{"class":170},[149,4142,589],{"class":406},[149,4144,425],{"class":170},[149,4146,4147,4149,4151],{"class":151,"line":706},[149,4148,562],{"class":170},[149,4150,578],{"class":406},[149,4152,425],{"class":170},[137,4154,716],{"id":715},[118,4156,4157],{"className":143,"code":719,"language":145,"meta":127,"style":127},[125,4158,4159,4163,4181,4185,4193,4203,4223,4243,4247,4251,4283,4293,4307,4325,4347,4355,4369,4387,4425,4433],{"__ignoreMap":127},[149,4160,4161],{"class":151,"line":152},[149,4162,726],{"class":155},[149,4164,4165,4167,4169,4171,4173,4175,4177,4179],{"class":151,"line":159},[149,4166,731],{"class":339},[149,4168,734],{"class":170},[149,4170,737],{"class":166},[149,4172,740],{"class":170},[149,4174,743],{"class":339},[149,4176,746],{"class":170},[149,4178,749],{"class":182},[149,4180,752],{"class":170},[149,4182,4183],{"class":151,"line":16},[149,4184,334],{"emptyLinePlaceholder":333},[149,4186,4187,4189,4191],{"class":151,"line":192},[149,4188,435],{"class":162},[149,4190,763],{"class":279},[149,4192,283],{"class":170},[149,4194,4195,4197,4199,4201],{"class":151,"line":204},[149,4196,455],{"class":406},[149,4198,292],{"class":170},[149,4200,774],{"class":279},[149,4202,777],{"class":166},[149,4204,4205,4207,4209,4211,4213,4215,4217,4219,4221],{"class":151,"line":216},[149,4206,782],{"class":406},[149,4208,292],{"class":170},[149,4210,787],{"class":170},[149,4212,354],{"class":790},[149,4214,292],{"class":170},[149,4216,774],{"class":279},[149,4218,797],{"class":170},[149,4220,800],{"class":162},[149,4222,803],{"class":279},[149,4224,4225,4227,4229,4231,4233,4235,4237,4239,4241],{"class":151,"line":228},[149,4226,808],{"class":406},[149,4228,292],{"class":170},[149,4230,787],{"class":170},[149,4232,815],{"class":790},[149,4234,292],{"class":170},[149,4236,471],{"class":279},[149,4238,797],{"class":170},[149,4240,800],{"class":162},[149,4242,803],{"class":279},[149,4244,4245],{"class":151,"line":240},[149,4246,328],{"class":170},[149,4248,4249],{"class":151,"line":252},[149,4250,334],{"emptyLinePlaceholder":333},[149,4252,4253,4255,4257,4259,4261,4263,4265,4267,4269,4271,4273,4275,4277,4279,4281],{"class":151,"line":359},[149,4254,838],{"class":339},[149,4256,841],{"class":162},[149,4258,844],{"class":166},[149,4260,171],{"class":170},[149,4262,737],{"class":504},[149,4264,403],{"class":170},[149,4266,853],{"class":279},[149,4268,513],{"class":170},[149,4270,858],{"class":166},[149,4272,858],{"class":170},[149,4274,863],{"class":790},[149,4276,797],{"class":170},[149,4278,800],{"class":162},[149,4280,787],{"class":166},[149,4282,346],{"class":170},[149,4284,4285,4287,4289,4291],{"class":151,"line":375},[149,4286,455],{"class":406},[149,4288,292],{"class":170},[149,4290,880],{"class":166},[149,4292,189],{"class":170},[149,4294,4295,4297,4299,4301,4303,4305],{"class":151,"line":381},[149,4296,782],{"class":504},[149,4298,292],{"class":170},[149,4300,787],{"class":170},[149,4302,354],{"class":790},[149,4304,797],{"class":170},[149,4306,897],{"class":162},[149,4308,4309,4311,4313,4315,4317,4319,4321,4323],{"class":151,"line":29},[149,4310,902],{"class":504},[149,4312,858],{"class":166},[149,4314,858],{"class":170},[149,4316,909],{"class":790},[149,4318,797],{"class":170},[149,4320,800],{"class":162},[149,4322,787],{"class":166},[149,4324,346],{"class":170},[149,4326,4327,4329,4331,4333,4335,4337,4339,4341,4343,4345],{"class":151,"line":573},[149,4328,922],{"class":406},[149,4330,292],{"class":170},[149,4332,541],{"class":166},[149,4334,929],{"class":170},[149,4336,909],{"class":166},[149,4338,276],{"class":170},[149,4340,936],{"class":166},[149,4342,939],{"class":170},[149,4344,942],{"class":166},[149,4346,189],{"class":170},[149,4348,4349,4351,4353],{"class":151,"line":583},[149,4350,949],{"class":170},[149,4352,952],{"class":166},[149,4354,189],{"class":170},[149,4356,4357,4359,4361,4363,4365,4367],{"class":151,"line":594},[149,4358,808],{"class":504},[149,4360,292],{"class":170},[149,4362,787],{"class":170},[149,4364,815],{"class":790},[149,4366,797],{"class":170},[149,4368,897],{"class":162},[149,4370,4371,4373,4375,4377,4379,4381,4383,4385],{"class":151,"line":613},[149,4372,902],{"class":504},[149,4374,858],{"class":166},[149,4376,858],{"class":170},[149,4378,909],{"class":790},[149,4380,797],{"class":170},[149,4382,800],{"class":162},[149,4384,787],{"class":166},[149,4386,346],{"class":170},[149,4388,4389,4391,4393,4395,4397,4399,4401,4403,4405,4407,4409,4411,4413,4415,4417,4419,4421,4423],{"class":151,"line":623},[149,4390,922],{"class":406},[149,4392,292],{"class":170},[149,4394,995],{"class":166},[149,4396,276],{"class":170},[149,4398,936],{"class":166},[149,4400,276],{"class":170},[149,4402,1004],{"class":504},[149,4404,858],{"class":166},[149,4406,858],{"class":170},[149,4408,1011],{"class":790},[149,4410,797],{"class":170},[149,4412,800],{"class":162},[149,4414,1018],{"class":166},[149,4416,276],{"class":170},[149,4418,1023],{"class":166},[149,4420,1026],{"class":170},[149,4422,1029],{"class":166},[149,4424,189],{"class":170},[149,4426,4427,4429,4431],{"class":151,"line":670},[149,4428,949],{"class":170},[149,4430,952],{"class":166},[149,4432,189],{"class":170},[149,4434,4435,4437],{"class":151,"line":676},[149,4436,1044],{"class":170},[149,4438,1047],{"class":166},[113,4440,1051],{"id":1050},[137,4442,1055],{"id":1054},[118,4444,4445],{"className":143,"code":1058,"language":145,"meta":127,"style":127},[125,4446,4447,4451,4469,4487,4491,4505,4509,4527,4553,4575,4581,4585,4615,4637,4661,4667,4671,4701,4723,4743,4773,4799],{"__ignoreMap":127},[149,4448,4449],{"class":151,"line":152},[149,4450,1065],{"class":155},[149,4452,4453,4455,4457,4459,4461,4463,4465,4467],{"class":151,"line":159},[149,4454,731],{"class":339},[149,4456,734],{"class":170},[149,4458,1074],{"class":166},[149,4460,740],{"class":170},[149,4462,743],{"class":339},[149,4464,746],{"class":170},[149,4466,1083],{"class":182},[149,4468,752],{"class":170},[149,4470,4471,4473,4475,4477,4479,4481,4483,4485],{"class":151,"line":16},[149,4472,731],{"class":339},[149,4474,734],{"class":170},[149,4476,1094],{"class":166},[149,4478,740],{"class":170},[149,4480,743],{"class":339},[149,4482,746],{"class":170},[149,4484,1103],{"class":182},[149,4486,752],{"class":170},[149,4488,4489],{"class":151,"line":192},[149,4490,334],{"emptyLinePlaceholder":333},[149,4492,4493,4495,4497,4499,4501,4503],{"class":151,"line":204},[149,4494,163],{"class":162},[149,4496,1116],{"class":166},[149,4498,171],{"class":170},[149,4500,1121],{"class":170},[149,4502,1074],{"class":504},[149,4504,516],{"class":166},[149,4506,4507],{"class":151,"line":216},[149,4508,334],{"emptyLinePlaceholder":333},[149,4510,4511,4513,4515,4517,4519,4521,4523,4525],{"class":151,"line":228},[149,4512,163],{"class":162},[149,4514,1136],{"class":166},[149,4516,171],{"class":170},[149,4518,1094],{"class":166},[149,4520,276],{"class":170},[149,4522,1145],{"class":504},[149,4524,858],{"class":166},[149,4526,346],{"class":170},[149,4528,4529,4531,4533,4535,4537,4539,4541,4543,4545,4547,4549,4551],{"class":151,"line":240},[149,4530,1154],{"class":406},[149,4532,292],{"class":170},[149,4534,1094],{"class":166},[149,4536,276],{"class":170},[149,4538,1163],{"class":504},[149,4540,1166],{"class":166},[149,4542,276],{"class":170},[149,4544,1171],{"class":504},[149,4546,858],{"class":166},[149,4548,1176],{"class":308},[149,4550,797],{"class":166},[149,4552,189],{"class":170},[149,4554,4555,4557,4559,4561,4563,4565,4567,4569,4571,4573],{"class":151,"line":252},[149,4556,1185],{"class":406},[149,4558,292],{"class":170},[149,4560,1094],{"class":166},[149,4562,276],{"class":170},[149,4564,1163],{"class":504},[149,4566,1166],{"class":166},[149,4568,276],{"class":170},[149,4570,1200],{"class":504},[149,4572,1166],{"class":166},[149,4574,189],{"class":170},[149,4576,4577,4579],{"class":151,"line":359},[149,4578,1044],{"class":170},[149,4580,1211],{"class":166},[149,4582,4583],{"class":151,"line":375},[149,4584,334],{"emptyLinePlaceholder":333},[149,4586,4587,4589,4591,4593,4595,4597,4599,4601,4603,4605,4607,4609,4611,4613],{"class":151,"line":381},[149,4588,1220],{"class":166},[149,4590,276],{"class":170},[149,4592,1225],{"class":504},[149,4594,858],{"class":166},[149,4596,186],{"class":170},[149,4598,1232],{"class":182},[149,4600,186],{"class":170},[149,4602,939],{"class":170},[149,4604,1239],{"class":162},[149,4606,787],{"class":170},[149,4608,1244],{"class":790},[149,4610,797],{"class":170},[149,4612,800],{"class":162},[149,4614,283],{"class":170},[149,4616,4617,4619,4621,4623,4625,4627,4629,4631,4633,4635],{"class":151,"line":29},[149,4618,1255],{"class":162},[149,4620,1258],{"class":166},[149,4622,1261],{"class":170},[149,4624,1264],{"class":339},[149,4626,1267],{"class":166},[149,4628,276],{"class":170},[149,4630,1272],{"class":166},[149,4632,276],{"class":170},[149,4634,1277],{"class":504},[149,4636,516],{"class":406},[149,4638,4639,4641,4643,4645,4647,4649,4651,4653,4655,4657,4659],{"class":151,"line":573},[149,4640,1284],{"class":339},[149,4642,1287],{"class":166},[149,4644,276],{"class":170},[149,4646,1292],{"class":504},[149,4648,858],{"class":406},[149,4650,1297],{"class":170},[149,4652,1300],{"class":406},[149,4654,292],{"class":170},[149,4656,1258],{"class":166},[149,4658,740],{"class":170},[149,4660,1211],{"class":406},[149,4662,4663,4665],{"class":151,"line":583},[149,4664,1044],{"class":170},[149,4666,1211],{"class":166},[149,4668,4669],{"class":151,"line":594},[149,4670,334],{"emptyLinePlaceholder":333},[149,4672,4673,4675,4677,4679,4681,4683,4685,4687,4689,4691,4693,4695,4697,4699],{"class":151,"line":613},[149,4674,1220],{"class":166},[149,4676,276],{"class":170},[149,4678,1327],{"class":504},[149,4680,858],{"class":166},[149,4682,186],{"class":170},[149,4684,1232],{"class":182},[149,4686,186],{"class":170},[149,4688,939],{"class":170},[149,4690,1239],{"class":162},[149,4692,787],{"class":170},[149,4694,1244],{"class":790},[149,4696,797],{"class":170},[149,4698,800],{"class":162},[149,4700,283],{"class":170},[149,4702,4703,4705,4707,4709,4711,4713,4715,4717,4719,4721],{"class":151,"line":623},[149,4704,1255],{"class":162},[149,4706,1356],{"class":166},[149,4708,1261],{"class":170},[149,4710,1264],{"class":339},[149,4712,1287],{"class":166},[149,4714,276],{"class":170},[149,4716,1367],{"class":166},[149,4718,276],{"class":170},[149,4720,1292],{"class":504},[149,4722,516],{"class":406},[149,4724,4725,4727,4729,4731,4733,4735,4737,4739,4741],{"class":151,"line":670},[149,4726,1255],{"class":162},[149,4728,1300],{"class":166},[149,4730,1261],{"class":170},[149,4732,1384],{"class":166},[149,4734,276],{"class":170},[149,4736,1389],{"class":504},[149,4738,858],{"class":406},[149,4740,1394],{"class":166},[149,4742,1211],{"class":406},[149,4744,4745,4747,4749,4751,4753,4755,4757,4759,4761,4763,4765,4767,4769,4771],{"class":151,"line":676},[149,4746,1255],{"class":162},[149,4748,1403],{"class":166},[149,4750,1261],{"class":170},[149,4752,1264],{"class":339},[149,4754,1267],{"class":166},[149,4756,276],{"class":170},[149,4758,1272],{"class":166},[149,4760,276],{"class":170},[149,4762,1418],{"class":504},[149,4764,858],{"class":406},[149,4766,1297],{"class":170},[149,4768,1300],{"class":166},[149,4770,740],{"class":170},[149,4772,1211],{"class":406},[149,4774,4775,4777,4779,4781,4783,4785,4787,4789,4791,4793,4795,4797],{"class":151,"line":686},[149,4776,1284],{"class":339},[149,4778,1287],{"class":166},[149,4780,276],{"class":170},[149,4782,1292],{"class":504},[149,4784,858],{"class":406},[149,4786,1297],{"class":170},[149,4788,1300],{"class":406},[149,4790,292],{"class":170},[149,4792,1403],{"class":166},[149,4794,1451],{"class":170},[149,4796,1454],{"class":308},[149,4798,1211],{"class":406},[149,4800,4801,4803],{"class":151,"line":696},[149,4802,1044],{"class":170},[149,4804,1211],{"class":166},[137,4806,1466],{"id":1465},[118,4808,4809],{"className":1469,"code":1470,"language":1471,"meta":127,"style":127},[125,4810,4811,4815,4819,4823,4827,4831,4835,4839,4843],{"__ignoreMap":127},[149,4812,4813],{"class":151,"line":152},[149,4814,1478],{},[149,4816,4817],{"class":151,"line":159},[149,4818,1483],{},[149,4820,4821],{"class":151,"line":16},[149,4822,1488],{},[149,4824,4825],{"class":151,"line":192},[149,4826,1493],{},[149,4828,4829],{"class":151,"line":204},[149,4830,1498],{},[149,4832,4833],{"class":151,"line":216},[149,4834,1503],{},[149,4836,4837],{"class":151,"line":228},[149,4838,1508],{},[149,4840,4841],{"class":151,"line":240},[149,4842,334],{"emptyLinePlaceholder":333},[149,4844,4845],{"class":151,"line":252},[149,4846,1517],{},[113,4848,1521],{"id":1520},[137,4850,1525],{"id":1524},[118,4852,4853],{"className":1528,"code":1529,"language":1530,"meta":127,"style":127},[125,4854,4855,4859,4865,4869,4875,4881,4887,4891,4897,4903,4907,4913],{"__ignoreMap":127},[149,4856,4857],{"class":151,"line":152},[149,4858,1537],{"class":155},[149,4860,4861,4863],{"class":151,"line":159},[149,4862,1542],{"class":308},[149,4864,1545],{"class":166},[149,4866,4867],{"class":151,"line":16},[149,4868,334],{"emptyLinePlaceholder":333},[149,4870,4871,4873],{"class":151,"line":192},[149,4872,1554],{"class":308},[149,4874,1557],{"class":166},[149,4876,4877,4879],{"class":151,"line":204},[149,4878,1562],{"class":308},[149,4880,1565],{"class":166},[149,4882,4883,4885],{"class":151,"line":216},[149,4884,1570],{"class":308},[149,4886,1573],{"class":166},[149,4888,4889],{"class":151,"line":228},[149,4890,334],{"emptyLinePlaceholder":333},[149,4892,4893,4895],{"class":151,"line":240},[149,4894,1562],{"class":308},[149,4896,1584],{"class":166},[149,4898,4899,4901],{"class":151,"line":252},[149,4900,1570],{"class":308},[149,4902,1591],{"class":166},[149,4904,4905],{"class":151,"line":359},[149,4906,334],{"emptyLinePlaceholder":333},[149,4908,4909,4911],{"class":151,"line":375},[149,4910,1600],{"class":308},[149,4912,1603],{"class":166},[149,4914,4915,4917,4919,4921,4923,4925],{"class":151,"line":381},[149,4916,1608],{"class":308},[149,4918,541],{"class":166},[149,4920,1613],{"class":182},[149,4922,1616],{"class":166},[149,4924,1619],{"class":182},[149,4926,255],{"class":166},[137,4928,1625],{"id":1624},[118,4930,4931],{"className":1628,"code":1629,"language":1630,"meta":127,"style":127},[125,4932,4933,4937,4945,4949,4955,4961,4973,4977,4983,4989,4997,5001,5007,5017,5021,5031,5039,5045,5057,5061,5071,5079,5083,5093,5101,5105,5115],{"__ignoreMap":127},[149,4934,4935],{"class":151,"line":152},[149,4936,1637],{"class":155},[149,4938,4939,4941,4943],{"class":151,"line":159},[149,4940,1642],{"class":406},[149,4942,292],{"class":170},[149,4944,1647],{"class":182},[149,4946,4947],{"class":151,"line":16},[149,4948,334],{"emptyLinePlaceholder":333},[149,4950,4951,4953],{"class":151,"line":192},[149,4952,1657],{"class":1656},[149,4954,1660],{"class":170},[149,4956,4957,4959],{"class":151,"line":204},[149,4958,1665],{"class":406},[149,4960,1660],{"class":170},[149,4962,4963,4965,4967,4969,4971],{"class":151,"line":216},[149,4964,1672],{"class":406},[149,4966,292],{"class":170},[149,4968,541],{"class":170},[149,4970,1679],{"class":182},[149,4972,255],{"class":170},[149,4974,4975],{"class":151,"line":228},[149,4976,334],{"emptyLinePlaceholder":333},[149,4978,4979,4981],{"class":151,"line":240},[149,4980,1690],{"class":406},[149,4982,1660],{"class":170},[149,4984,4985,4987],{"class":151,"line":252},[149,4986,1697],{"class":406},[149,4988,1660],{"class":170},[149,4990,4991,4993,4995],{"class":151,"line":359},[149,4992,1704],{"class":406},[149,4994,292],{"class":170},[149,4996,1709],{"class":182},[149,4998,4999],{"class":151,"line":375},[149,5000,334],{"emptyLinePlaceholder":333},[149,5002,5003,5005],{"class":151,"line":381},[149,5004,1718],{"class":406},[149,5006,1660],{"class":170},[149,5008,5009,5011,5013,5015],{"class":151,"line":29},[149,5010,1725],{"class":170},[149,5012,1728],{"class":406},[149,5014,292],{"class":170},[149,5016,1733],{"class":182},[149,5018,5019],{"class":151,"line":573},[149,5020,334],{"emptyLinePlaceholder":333},[149,5022,5023,5025,5027,5029],{"class":151,"line":583},[149,5024,1725],{"class":170},[149,5026,477],{"class":406},[149,5028,292],{"class":170},[149,5030,1748],{"class":182},[149,5032,5033,5035,5037],{"class":151,"line":594},[149,5034,1753],{"class":406},[149,5036,292],{"class":170},[149,5038,1758],{"class":182},[149,5040,5041,5043],{"class":151,"line":613},[149,5042,1763],{"class":406},[149,5044,1660],{"class":170},[149,5046,5047,5049,5051,5053,5055],{"class":151,"line":623},[149,5048,1770],{"class":406},[149,5050,292],{"class":170},[149,5052,746],{"class":170},[149,5054,1777],{"class":182},[149,5056,752],{"class":170},[149,5058,5059],{"class":151,"line":670},[149,5060,334],{"emptyLinePlaceholder":333},[149,5062,5063,5065,5067,5069],{"class":151,"line":676},[149,5064,1725],{"class":170},[149,5066,477],{"class":406},[149,5068,292],{"class":170},[149,5070,1794],{"class":182},[149,5072,5073,5075,5077],{"class":151,"line":686},[149,5074,1799],{"class":406},[149,5076,292],{"class":170},[149,5078,1804],{"class":182},[149,5080,5081],{"class":151,"line":696},[149,5082,334],{"emptyLinePlaceholder":333},[149,5084,5085,5087,5089,5091],{"class":151,"line":706},[149,5086,1725],{"class":170},[149,5088,477],{"class":406},[149,5090,292],{"class":170},[149,5092,1819],{"class":182},[149,5094,5095,5097,5099],{"class":151,"line":1822},[149,5096,1799],{"class":406},[149,5098,292],{"class":170},[149,5100,1591],{"class":182},[149,5102,5103],{"class":151,"line":1831},[149,5104,334],{"emptyLinePlaceholder":333},[149,5106,5107,5109,5111,5113],{"class":151,"line":1836},[149,5108,1725],{"class":170},[149,5110,477],{"class":406},[149,5112,292],{"class":170},[149,5114,1647],{"class":182},[149,5116,5117,5119,5121],{"class":151,"line":1847},[149,5118,1799],{"class":406},[149,5120,292],{"class":170},[149,5122,1854],{"class":182},[98,5124,1858],{"id":1857},[113,5126,1862],{"id":1861},[118,5128,5129],{"className":143,"code":1865,"language":145,"meta":127,"style":127},[125,5130,5131,5135,5149,5153,5185,5203,5207,5211,5215,5221,5227,5239,5249,5259,5263,5273,5277,5281,5285,5289,5293,5323,5327,5353,5377,5381,5395,5423,5427,5443],{"__ignoreMap":127},[149,5132,5133],{"class":151,"line":152},[149,5134,1872],{"class":155},[149,5136,5137,5139,5141,5143,5145,5147],{"class":151,"line":159},[149,5138,163],{"class":162},[149,5140,1879],{"class":166},[149,5142,171],{"class":170},[149,5144,1884],{"class":170},[149,5146,800],{"class":162},[149,5148,283],{"class":170},[149,5150,5151],{"class":151,"line":16},[149,5152,1893],{"class":155},[149,5154,5155,5157,5159,5161,5163,5165,5167,5169,5171,5173,5175,5177,5179,5181,5183],{"class":151,"line":192},[149,5156,1255],{"class":162},[149,5158,1900],{"class":166},[149,5160,1261],{"class":170},[149,5162,1905],{"class":504},[149,5164,858],{"class":406},[149,5166,1166],{"class":170},[149,5168,800],{"class":162},[149,5170,1914],{"class":170},[149,5172,858],{"class":406},[149,5174,1919],{"class":170},[149,5176,1922],{"class":182},[149,5178,1919],{"class":170},[149,5180,797],{"class":406},[149,5182,939],{"class":170},[149,5184,283],{"class":170},[149,5186,5187,5189,5191,5193,5195,5197,5199,5201],{"class":151,"line":204},[149,5188,1935],{"class":504},[149,5190,292],{"class":170},[149,5192,1884],{"class":170},[149,5194,800],{"class":162},[149,5196,1944],{"class":170},[149,5198,1947],{"class":279},[149,5200,1950],{"class":406},[149,5202,425],{"class":170},[149,5204,5205],{"class":151,"line":216},[149,5206,1957],{"class":406},[149,5208,5209],{"class":151,"line":228},[149,5210,334],{"emptyLinePlaceholder":333},[149,5212,5213],{"class":151,"line":240},[149,5214,1966],{"class":155},[149,5216,5217,5219],{"class":151,"line":252},[149,5218,1284],{"class":504},[149,5220,1973],{"class":406},[149,5222,5223,5225],{"class":151,"line":359},[149,5224,597],{"class":170},[149,5226,1980],{"class":166},[149,5228,5229,5231,5233,5235,5237],{"class":151,"line":375},[149,5230,1985],{"class":166},[149,5232,171],{"class":170},[149,5234,186],{"class":170},[149,5236,1992],{"class":182},[149,5238,752],{"class":170},[149,5240,5241,5243,5245,5247],{"class":151,"line":381},[149,5242,1999],{"class":166},[149,5244,2002],{"class":170},[149,5246,2005],{"class":308},[149,5248,328],{"class":170},[149,5250,5251,5253,5255,5257],{"class":151,"line":29},[149,5252,2012],{"class":166},[149,5254,2002],{"class":170},[149,5256,2017],{"class":308},[149,5258,328],{"class":170},[149,5260,5261],{"class":151,"line":573},[149,5262,2024],{"class":166},[149,5264,5265,5267,5269,5271],{"class":151,"line":583},[149,5266,2029],{"class":166},[149,5268,2002],{"class":170},[149,5270,2034],{"class":308},[149,5272,328],{"class":170},[149,5274,5275],{"class":151,"line":594},[149,5276,2041],{"class":170},[149,5278,5279],{"class":151,"line":613},[149,5280,2046],{"class":406},[149,5282,5283],{"class":151,"line":623},[149,5284,328],{"class":170},[149,5286,5287],{"class":151,"line":670},[149,5288,334],{"emptyLinePlaceholder":333},[149,5290,5291],{"class":151,"line":676},[149,5292,2059],{"class":155},[149,5294,5295,5297,5299,5301,5303,5305,5307,5309,5311,5313,5315,5317,5319,5321],{"class":151,"line":686},[149,5296,1220],{"class":166},[149,5298,276],{"class":170},[149,5300,1225],{"class":504},[149,5302,858],{"class":406},[149,5304,1919],{"class":170},[149,5306,2074],{"class":182},[149,5308,1919],{"class":170},[149,5310,939],{"class":170},[149,5312,1239],{"class":162},[149,5314,787],{"class":170},[149,5316,1244],{"class":790},[149,5318,797],{"class":170},[149,5320,800],{"class":162},[149,5322,283],{"class":170},[149,5324,5325],{"class":151,"line":696},[149,5326,2095],{"class":155},[149,5328,5329,5331,5333,5335,5337,5339,5341,5343,5345,5347,5349,5351],{"class":151,"line":706},[149,5330,1255],{"class":162},[149,5332,2102],{"class":166},[149,5334,1261],{"class":170},[149,5336,1264],{"class":339},[149,5338,2109],{"class":166},[149,5340,276],{"class":170},[149,5342,1225],{"class":504},[149,5344,858],{"class":406},[149,5346,1919],{"class":170},[149,5348,2120],{"class":182},[149,5350,1919],{"class":170},[149,5352,1211],{"class":406},[149,5354,5355,5357,5359,5361,5363,5365,5367,5369,5371,5373,5375],{"class":151,"line":1822},[149,5356,2129],{"class":339},[149,5358,787],{"class":406},[149,5360,2134],{"class":166},[149,5362,2137],{"class":406},[149,5364,2140],{"class":339},[149,5366,1287],{"class":166},[149,5368,276],{"class":170},[149,5370,1292],{"class":504},[149,5372,858],{"class":406},[149,5374,2134],{"class":166},[149,5376,1211],{"class":406},[149,5378,5379],{"class":151,"line":1831},[149,5380,334],{"emptyLinePlaceholder":333},[149,5382,5383,5385,5387,5389,5391,5393],{"class":151,"line":1836},[149,5384,1255],{"class":162},[149,5386,1300],{"class":166},[149,5388,1261],{"class":170},[149,5390,1264],{"class":339},[149,5392,2169],{"class":504},[149,5394,516],{"class":406},[149,5396,5397,5399,5401,5403,5405,5407,5409,5411,5413,5415,5417,5419,5421],{"class":151,"line":1847},[149,5398,2176],{"class":339},[149,5400,2109],{"class":166},[149,5402,276],{"class":170},[149,5404,863],{"class":504},[149,5406,858],{"class":406},[149,5408,1919],{"class":170},[149,5410,2120],{"class":182},[149,5412,1919],{"class":170},[149,5414,939],{"class":170},[149,5416,1300],{"class":166},[149,5418,939],{"class":170},[149,5420,2199],{"class":308},[149,5422,1211],{"class":406},[149,5424,5425],{"class":151,"line":2204},[149,5426,334],{"emptyLinePlaceholder":333},[149,5428,5429,5431,5433,5435,5437,5439,5441],{"class":151,"line":2209},[149,5430,1284],{"class":339},[149,5432,1287],{"class":166},[149,5434,276],{"class":170},[149,5436,1292],{"class":504},[149,5438,858],{"class":406},[149,5440,2120],{"class":166},[149,5442,1211],{"class":406},[149,5444,5445,5447],{"class":151,"line":2226},[149,5446,1044],{"class":170},[149,5448,1211],{"class":406},[113,5450,2234],{"id":2233},[118,5452,5453],{"className":143,"code":2237,"language":145,"meta":127,"style":127},[125,5454,5455,5459,5481,5485,5507,5535,5549,5555,5559,5563,5567,5585,5589,5605,5633,5643,5649,5653,5657,5675,5697,5723],{"__ignoreMap":127},[149,5456,5457],{"class":151,"line":152},[149,5458,2244],{"class":155},[149,5460,5461,5463,5465,5467,5469,5471,5473,5475,5477,5479],{"class":151,"line":159},[149,5462,731],{"class":339},[149,5464,734],{"class":170},[149,5466,2253],{"class":166},[149,5468,939],{"class":170},[149,5470,2258],{"class":166},[149,5472,740],{"class":170},[149,5474,743],{"class":339},[149,5476,746],{"class":170},[149,5478,2267],{"class":182},[149,5480,752],{"class":170},[149,5482,5483],{"class":151,"line":16},[149,5484,334],{"emptyLinePlaceholder":333},[149,5486,5487,5489,5491,5493,5495,5497,5499,5501,5503,5505],{"class":151,"line":192},[149,5488,163],{"class":162},[149,5490,2280],{"class":166},[149,5492,171],{"class":170},[149,5494,787],{"class":170},[149,5496,2287],{"class":790},[149,5498,292],{"class":170},[149,5500,471],{"class":279},[149,5502,797],{"class":170},[149,5504,800],{"class":162},[149,5506,283],{"class":170},[149,5508,5509,5511,5513,5515,5517,5519,5521,5523,5525,5527,5529,5531,5533],{"class":151,"line":204},[149,5510,1284],{"class":339},[149,5512,2253],{"class":504},[149,5514,858],{"class":406},[149,5516,1297],{"class":170},[149,5518,2310],{"class":166},[149,5520,1451],{"class":170},[149,5522,2315],{"class":166},[149,5524,276],{"class":170},[149,5526,2320],{"class":166},[149,5528,276],{"class":170},[149,5530,2325],{"class":166},[149,5532,2328],{"class":170},[149,5534,283],{"class":170},[149,5536,5537,5539,5541,5543,5545,5547],{"class":151,"line":216},[149,5538,2335],{"class":406},[149,5540,292],{"class":170},[149,5542,746],{"class":170},[149,5544,2342],{"class":182},[149,5546,186],{"class":170},[149,5548,189],{"class":170},[149,5550,5551,5553],{"class":151,"line":228},[149,5552,2351],{"class":170},[149,5554,1211],{"class":406},[149,5556,5557],{"class":151,"line":240},[149,5558,328],{"class":170},[149,5560,5561],{"class":151,"line":252},[149,5562,334],{"emptyLinePlaceholder":333},[149,5564,5565],{"class":151,"line":359},[149,5566,2366],{"class":155},[149,5568,5569,5571,5573,5575,5577,5579,5581,5583],{"class":151,"line":375},[149,5570,731],{"class":339},[149,5572,734],{"class":170},[149,5574,2375],{"class":166},[149,5576,740],{"class":170},[149,5578,743],{"class":339},[149,5580,746],{"class":170},[149,5582,2384],{"class":182},[149,5584,752],{"class":170},[149,5586,5587],{"class":151,"line":381},[149,5588,334],{"emptyLinePlaceholder":333},[149,5590,5591,5593,5595,5597,5599,5601,5603],{"class":151,"line":29},[149,5592,163],{"class":162},[149,5594,2397],{"class":166},[149,5596,171],{"class":170},[149,5598,1121],{"class":170},[149,5600,2375],{"class":504},[149,5602,858],{"class":166},[149,5604,346],{"class":170},[149,5606,5607,5609,5611,5613,5615,5617,5619,5621,5623,5625,5627,5629,5631],{"class":151,"line":573},[149,5608,2412],{"class":406},[149,5610,292],{"class":170},[149,5612,2375],{"class":166},[149,5614,276],{"class":170},[149,5616,2421],{"class":504},[149,5618,858],{"class":166},[149,5620,2426],{"class":308},[149,5622,939],{"class":170},[149,5624,746],{"class":170},[149,5626,2433],{"class":182},[149,5628,186],{"class":170},[149,5630,797],{"class":166},[149,5632,189],{"class":170},[149,5634,5635,5637,5639,5641],{"class":151,"line":583},[149,5636,2444],{"class":406},[149,5638,292],{"class":170},[149,5640,2449],{"class":166},[149,5642,189],{"class":170},[149,5644,5645,5647],{"class":151,"line":594},[149,5646,1044],{"class":170},[149,5648,1211],{"class":166},[149,5650,5651],{"class":151,"line":613},[149,5652,334],{"emptyLinePlaceholder":333},[149,5654,5655],{"class":151,"line":623},[149,5656,2466],{"class":155},[149,5658,5659,5661,5663,5665,5667,5669,5671,5673],{"class":151,"line":670},[149,5660,163],{"class":162},[149,5662,2473],{"class":166},[149,5664,171],{"class":170},[149,5666,1094],{"class":166},[149,5668,276],{"class":170},[149,5670,1145],{"class":504},[149,5672,858],{"class":166},[149,5674,346],{"class":170},[149,5676,5677,5679,5681,5683,5685,5687,5689,5691,5693,5695],{"class":151,"line":676},[149,5678,1185],{"class":406},[149,5680,292],{"class":170},[149,5682,1094],{"class":166},[149,5684,276],{"class":170},[149,5686,1163],{"class":504},[149,5688,1166],{"class":166},[149,5690,276],{"class":170},[149,5692,1200],{"class":504},[149,5694,1166],{"class":166},[149,5696,189],{"class":170},[149,5698,5699,5701,5703,5705,5707,5709,5711,5713,5715,5717,5719,5721],{"class":151,"line":686},[149,5700,2512],{"class":406},[149,5702,292],{"class":170},[149,5704,1094],{"class":166},[149,5706,276],{"class":170},[149,5708,1163],{"class":504},[149,5710,1166],{"class":166},[149,5712,276],{"class":170},[149,5714,1171],{"class":504},[149,5716,858],{"class":166},[149,5718,2531],{"class":308},[149,5720,797],{"class":166},[149,5722,189],{"class":170},[149,5724,5725,5727],{"class":151,"line":696},[149,5726,1044],{"class":170},[149,5728,1211],{"class":166},[113,5730,2545],{"id":2544},[118,5732,5733],{"className":143,"code":2548,"language":145,"meta":127,"style":127},[125,5734,5735,5739,5765,5769,5789,5811,5827,5841,5855,5861,5865,5893,5899,5905,5909,5913,5935,5939,5965,5985,6013,6041,6061,6087],{"__ignoreMap":127},[149,5736,5737],{"class":151,"line":152},[149,5738,2555],{"class":155},[149,5740,5741,5743,5745,5747,5749,5751,5753,5755,5757,5759,5761,5763],{"class":151,"line":159},[149,5742,731],{"class":339},[149,5744,734],{"class":170},[149,5746,2564],{"class":166},[149,5748,939],{"class":170},[149,5750,2569],{"class":166},[149,5752,939],{"class":170},[149,5754,2574],{"class":166},[149,5756,740],{"class":170},[149,5758,743],{"class":339},[149,5760,746],{"class":170},[149,5762,2583],{"class":182},[149,5764,752],{"class":170},[149,5766,5767],{"class":151,"line":16},[149,5768,334],{"emptyLinePlaceholder":333},[149,5770,5771,5773,5775,5777,5779,5781,5783,5785,5787],{"class":151,"line":192},[149,5772,2594],{"class":504},[149,5774,858],{"class":166},[149,5776,186],{"class":170},[149,5778,2601],{"class":182},[149,5780,186],{"class":170},[149,5782,939],{"class":170},[149,5784,1884],{"class":170},[149,5786,800],{"class":162},[149,5788,283],{"class":170},[149,5790,5791,5793,5795,5797,5799,5801,5803,5805,5807,5809],{"class":151,"line":204},[149,5792,2616],{"class":504},[149,5794,858],{"class":406},[149,5796,186],{"class":170},[149,5798,2623],{"class":182},[149,5800,186],{"class":170},[149,5802,939],{"class":170},[149,5804,1239],{"class":162},[149,5806,1884],{"class":170},[149,5808,800],{"class":162},[149,5810,283],{"class":170},[149,5812,5813,5815,5817,5819,5821,5823,5825],{"class":151,"line":216},[149,5814,2640],{"class":162},[149,5816,1403],{"class":166},[149,5818,1261],{"class":170},[149,5820,1264],{"class":339},[149,5822,2649],{"class":504},[149,5824,858],{"class":406},[149,5826,346],{"class":170},[149,5828,5829,5831,5833,5835,5837,5839],{"class":151,"line":228},[149,5830,2658],{"class":406},[149,5832,292],{"class":170},[149,5834,746],{"class":170},[149,5836,2665],{"class":182},[149,5838,186],{"class":170},[149,5840,189],{"class":170},[149,5842,5843,5845,5847,5849,5851,5853],{"class":151,"line":240},[149,5844,2674],{"class":406},[149,5846,292],{"class":170},[149,5848,746],{"class":170},[149,5850,2681],{"class":182},[149,5852,186],{"class":170},[149,5854,189],{"class":170},[149,5856,5857,5859],{"class":151,"line":252},[149,5858,949],{"class":170},[149,5860,1211],{"class":406},[149,5862,5863],{"class":151,"line":359},[149,5864,334],{"emptyLinePlaceholder":333},[149,5866,5867,5869,5871,5873,5875,5877,5879,5881,5883,5885,5887,5889,5891],{"class":151,"line":375},[149,5868,2700],{"class":504},[149,5870,858],{"class":406},[149,5872,1272],{"class":166},[149,5874,276],{"class":170},[149,5876,1200],{"class":166},[149,5878,797],{"class":406},[149,5880,276],{"class":170},[149,5882,2715],{"class":504},[149,5884,858],{"class":406},[149,5886,186],{"class":170},[149,5888,2665],{"class":182},[149,5890,186],{"class":170},[149,5892,1211],{"class":406},[149,5894,5895,5897],{"class":151,"line":381},[149,5896,2351],{"class":170},[149,5898,1211],{"class":406},[149,5900,5901,5903],{"class":151,"line":29},[149,5902,1044],{"class":170},[149,5904,1211],{"class":166},[149,5906,5907],{"class":151,"line":573},[149,5908,334],{"emptyLinePlaceholder":333},[149,5910,5911],{"class":151,"line":583},[149,5912,2746],{"class":155},[149,5914,5915,5917,5919,5921,5923,5925,5927,5929,5931,5933],{"class":151,"line":594},[149,5916,731],{"class":339},[149,5918,734],{"class":170},[149,5920,2755],{"class":166},[149,5922,939],{"class":170},[149,5924,2574],{"class":166},[149,5926,740],{"class":170},[149,5928,743],{"class":339},[149,5930,746],{"class":170},[149,5932,2768],{"class":182},[149,5934,752],{"class":170},[149,5936,5937],{"class":151,"line":613},[149,5938,334],{"emptyLinePlaceholder":333},[149,5940,5941,5943,5945,5947,5949,5951,5953,5955,5957,5959,5961,5963],{"class":151,"line":623},[149,5942,2779],{"class":504},[149,5944,858],{"class":166},[149,5946,186],{"class":170},[149,5948,2786],{"class":182},[149,5950,186],{"class":170},[149,5952,939],{"class":170},[149,5954,1239],{"class":162},[149,5956,2795],{"class":170},[149,5958,2798],{"class":790},[149,5960,2801],{"class":170},[149,5962,800],{"class":162},[149,5964,283],{"class":170},[149,5966,5967,5969,5971,5973,5975,5977,5979,5981,5983],{"class":151,"line":670},[149,5968,2176],{"class":339},[149,5970,2798],{"class":166},[149,5972,276],{"class":170},[149,5974,2816],{"class":504},[149,5976,858],{"class":406},[149,5978,186],{"class":170},[149,5980,2823],{"class":182},[149,5982,186],{"class":170},[149,5984,1211],{"class":406},[149,5986,5987,5989,5991,5993,5995,5997,5999,6001,6003,6005,6007,6009,6011],{"class":151,"line":676},[149,5988,2176],{"class":339},[149,5990,2798],{"class":166},[149,5992,276],{"class":170},[149,5994,2838],{"class":504},[149,5996,858],{"class":406},[149,5998,186],{"class":170},[149,6000,2845],{"class":182},[149,6002,186],{"class":170},[149,6004,939],{"class":170},[149,6006,746],{"class":170},[149,6008,2665],{"class":182},[149,6010,186],{"class":170},[149,6012,1211],{"class":406},[149,6014,6015,6017,6019,6021,6023,6025,6027,6029,6031,6033,6035,6037,6039],{"class":151,"line":686},[149,6016,2176],{"class":339},[149,6018,2798],{"class":166},[149,6020,276],{"class":170},[149,6022,2838],{"class":504},[149,6024,858],{"class":406},[149,6026,186],{"class":170},[149,6028,2874],{"class":182},[149,6030,186],{"class":170},[149,6032,939],{"class":170},[149,6034,746],{"class":170},[149,6036,2883],{"class":182},[149,6038,186],{"class":170},[149,6040,1211],{"class":406},[149,6042,6043,6045,6047,6049,6051,6053,6055,6057,6059],{"class":151,"line":696},[149,6044,2176],{"class":339},[149,6046,2798],{"class":166},[149,6048,276],{"class":170},[149,6050,2898],{"class":504},[149,6052,858],{"class":406},[149,6054,186],{"class":170},[149,6056,2905],{"class":182},[149,6058,186],{"class":170},[149,6060,1211],{"class":406},[149,6062,6063,6065,6067,6069,6071,6073,6075,6077,6079,6081,6083,6085],{"class":151,"line":706},[149,6064,2176],{"class":339},[149,6066,2574],{"class":504},[149,6068,858],{"class":406},[149,6070,2920],{"class":166},[149,6072,797],{"class":406},[149,6074,276],{"class":170},[149,6076,2927],{"class":504},[149,6078,858],{"class":406},[149,6080,186],{"class":170},[149,6082,2934],{"class":182},[149,6084,186],{"class":170},[149,6086,1211],{"class":406},[149,6088,6089,6091],{"class":151,"line":1822},[149,6090,1044],{"class":170},[149,6092,1211],{"class":166},[98,6094,2948],{"id":2947},[113,6096,2952],{"id":2951},[118,6098,6100],{"className":6099,"code":2956,"language":123},[121],[125,6101,2956],{"__ignoreMap":127},[113,6103,2962],{"id":2961},[118,6105,6107],{"className":6106,"code":2966,"language":123},[121],[125,6108,2966],{"__ignoreMap":127},[113,6110,2972],{"id":2971},[118,6112,6114],{"className":6113,"code":2976,"language":123},[121],[125,6115,2976],{"__ignoreMap":127},[98,6117,2982],{"id":2981},[113,6119,2986],{"id":2985},[118,6121,6122],{"className":2989,"code":2990,"language":2991,"meta":127,"style":127},[125,6123,6124,6128,6140,6152,6164],{"__ignoreMap":127},[149,6125,6126],{"class":151,"line":152},[149,6127,2998],{"class":155},[149,6129,6130,6132,6134,6136,6138],{"class":151,"line":159},[149,6131,3003],{"class":279},[149,6133,3006],{"class":182},[149,6135,3009],{"class":182},[149,6137,3012],{"class":182},[149,6139,3015],{"class":155},[149,6141,6142,6144,6146,6148,6150],{"class":151,"line":16},[149,6143,3003],{"class":279},[149,6145,3006],{"class":182},[149,6147,3009],{"class":182},[149,6149,3026],{"class":182},[149,6151,3029],{"class":155},[149,6153,6154,6156,6158,6160,6162],{"class":151,"line":192},[149,6155,3003],{"class":279},[149,6157,3006],{"class":182},[149,6159,3009],{"class":182},[149,6161,3040],{"class":182},[149,6163,3043],{"class":155},[149,6165,6166,6168,6170,6172,6174],{"class":151,"line":204},[149,6167,3003],{"class":279},[149,6169,3006],{"class":182},[149,6171,3009],{"class":182},[149,6173,3054],{"class":182},[149,6175,3057],{"class":155},[113,6177,3061],{"id":3060},[118,6179,6180],{"className":3064,"code":3065,"language":1292,"meta":127,"style":127},[125,6181,6182,6186,6198,6208,6218,6228,6238,6246,6250],{"__ignoreMap":127},[149,6183,6184],{"class":151,"line":152},[149,6185,346],{"class":170},[149,6187,6188,6190,6192,6194,6196],{"class":151,"line":159},[149,6189,179],{"class":170},[149,6191,3078],{"class":162},[149,6193,186],{"class":170},[149,6195,292],{"class":170},[149,6197,174],{"class":170},[149,6199,6200,6202,6204,6206],{"class":151,"line":16},[149,6201,3089],{"class":170},[149,6203,3092],{"class":182},[149,6205,186],{"class":170},[149,6207,189],{"class":170},[149,6209,6210,6212,6214,6216],{"class":151,"line":192},[149,6211,3089],{"class":170},[149,6213,3103],{"class":182},[149,6215,186],{"class":170},[149,6217,189],{"class":170},[149,6219,6220,6222,6224,6226],{"class":151,"line":204},[149,6221,3089],{"class":170},[149,6223,3114],{"class":182},[149,6225,186],{"class":170},[149,6227,189],{"class":170},[149,6229,6230,6232,6234,6236],{"class":151,"line":216},[149,6231,3089],{"class":170},[149,6233,3125],{"class":182},[149,6235,186],{"class":170},[149,6237,189],{"class":170},[149,6239,6240,6242,6244],{"class":151,"line":228},[149,6241,3089],{"class":170},[149,6243,3136],{"class":182},[149,6245,752],{"class":170},[149,6247,6248],{"class":151,"line":240},[149,6249,3143],{"class":170},[149,6251,6252],{"class":151,"line":252},[149,6253,328],{"class":170},[98,6255,3151],{"id":3150},[113,6257,3155],{"id":3154},[118,6259,6260],{"className":143,"code":3158,"language":145,"meta":127,"style":127},[125,6261,6262,6266,6276,6286,6296,6306,6316,6326],{"__ignoreMap":127},[149,6263,6264],{"class":151,"line":152},[149,6265,3165],{"class":155},[149,6267,6268,6270,6272,6274],{"class":151,"line":159},[149,6269,163],{"class":162},[149,6271,3172],{"class":166},[149,6273,171],{"class":170},[149,6275,174],{"class":166},[149,6277,6278,6280,6282,6284],{"class":151,"line":16},[149,6279,179],{"class":170},[149,6281,3183],{"class":182},[149,6283,186],{"class":170},[149,6285,189],{"class":170},[149,6287,6288,6290,6292,6294],{"class":151,"line":192},[149,6289,179],{"class":170},[149,6291,3194],{"class":182},[149,6293,186],{"class":170},[149,6295,189],{"class":170},[149,6297,6298,6300,6302,6304],{"class":151,"line":204},[149,6299,179],{"class":170},[149,6301,3205],{"class":182},[149,6303,186],{"class":170},[149,6305,189],{"class":170},[149,6307,6308,6310,6312,6314],{"class":151,"line":216},[149,6309,179],{"class":170},[149,6311,3216],{"class":182},[149,6313,186],{"class":170},[149,6315,189],{"class":170},[149,6317,6318,6320,6322,6324],{"class":151,"line":228},[149,6319,179],{"class":170},[149,6321,3227],{"class":182},[149,6323,186],{"class":170},[149,6325,189],{"class":170},[149,6327,6328],{"class":151,"line":240},[149,6329,255],{"class":166},[113,6331,3239],{"id":3238},[118,6333,6334],{"className":3242,"code":3243,"language":3244,"meta":127,"style":127},[125,6335,6336,6340,6344,6348,6352],{"__ignoreMap":127},[149,6337,6338],{"class":151,"line":152},[149,6339,3251],{},[149,6341,6342],{"class":151,"line":159},[149,6343,3256],{},[149,6345,6346],{"class":151,"line":16},[149,6347,3261],{},[149,6349,6350],{"class":151,"line":192},[149,6351,3266],{},[149,6353,6354],{"class":151,"line":204},[149,6355,3271],{},[113,6357,3275],{"id":3274},[618,6359,6360,6362,6364,6366,6368],{},[629,6361,3280],{},[629,6363,3283],{},[629,6365,3286],{},[629,6367,3289],{},[629,6369,3292],{},[98,6371,3296],{"id":3295},[3298,6373,6374,6384],{},[3301,6375,6376],{},[3304,6377,6378,6380,6382],{},[3307,6379,3309],{},[3307,6381,3312],{},[3307,6383,3315],{},[3317,6385,6386,6394,6402,6410],{},[3304,6387,6388,6390,6392],{},[3322,6389,3324],{},[3322,6391,3327],{},[3322,6393,3330],{},[3304,6395,6396,6398,6400],{},[3322,6397,3335],{},[3322,6399,3338],{},[3322,6401,3341],{},[3304,6403,6404,6406,6408],{},[3322,6405,3346],{},[3322,6407,3349],{},[3322,6409,3352],{},[3304,6411,6412,6414,6416],{},[3322,6413,3357],{},[3322,6415,3360],{},[3322,6417,3363],{},[98,6419,3367],{"id":3366},[113,6421,3371],{"id":3370},[118,6423,6424],{"className":143,"code":3374,"language":145,"meta":127,"style":127},[125,6425,6426,6430,6434,6438,6448,6458,6468],{"__ignoreMap":127},[149,6427,6428],{"class":151,"line":152},[149,6429,3381],{"class":155},[149,6431,6432],{"class":151,"line":159},[149,6433,3386],{"class":155},[149,6435,6436],{"class":151,"line":16},[149,6437,334],{"emptyLinePlaceholder":333},[149,6439,6440,6442,6444,6446],{"class":151,"line":192},[149,6441,163],{"class":162},[149,6443,3397],{"class":166},[149,6445,171],{"class":170},[149,6447,283],{"class":170},[149,6449,6450,6452,6454,6456],{"class":151,"line":204},[149,6451,3406],{"class":406},[149,6453,292],{"class":170},[149,6455,3411],{"class":308},[149,6457,3414],{"class":170},[149,6459,6460,6462,6464,6466],{"class":151,"line":216},[149,6461,3419],{"class":406},[149,6463,292],{"class":170},[149,6465,3424],{"class":308},[149,6467,3427],{"class":170},[149,6469,6470],{"class":151,"line":228},[149,6471,328],{"class":170},[113,6473,3435],{"id":3434},[118,6475,6476],{"className":143,"code":3438,"language":145,"meta":127,"style":127},[125,6477,6478,6482,6486,6490,6494],{"__ignoreMap":127},[149,6479,6480],{"class":151,"line":152},[149,6481,3445],{"class":155},[149,6483,6484],{"class":151,"line":159},[149,6485,3450],{"class":155},[149,6487,6488],{"class":151,"line":16},[149,6489,3455],{"class":155},[149,6491,6492],{"class":151,"line":192},[149,6493,3460],{"class":155},[149,6495,6496],{"class":151,"line":204},[149,6497,3465],{"class":155},[113,6499,3469],{"id":3468},[118,6501,6502],{"className":143,"code":3472,"language":145,"meta":127,"style":127},[125,6503,6504,6508,6518,6528,6538,6548,6558],{"__ignoreMap":127},[149,6505,6506],{"class":151,"line":152},[149,6507,3479],{"class":155},[149,6509,6510,6512,6514,6516],{"class":151,"line":159},[149,6511,163],{"class":162},[149,6513,3486],{"class":166},[149,6515,171],{"class":170},[149,6517,174],{"class":166},[149,6519,6520,6522,6524,6526],{"class":151,"line":16},[149,6521,179],{"class":170},[149,6523,3497],{"class":182},[149,6525,186],{"class":170},[149,6527,189],{"class":170},[149,6529,6530,6532,6534,6536],{"class":151,"line":192},[149,6531,179],{"class":170},[149,6533,3508],{"class":182},[149,6535,186],{"class":170},[149,6537,189],{"class":170},[149,6539,6540,6542,6544,6546],{"class":151,"line":204},[149,6541,179],{"class":170},[149,6543,3519],{"class":182},[149,6545,186],{"class":170},[149,6547,189],{"class":170},[149,6549,6550,6552,6554,6556],{"class":151,"line":216},[149,6551,179],{"class":170},[149,6553,3530],{"class":182},[149,6555,186],{"class":170},[149,6557,189],{"class":170},[149,6559,6560],{"class":151,"line":228},[149,6561,255],{"class":166},[98,6563,3542],{"id":3541},[113,6565,3546],{"id":3545},[618,6567,6568,6573,6578,6583],{},[629,6569,6570],{},[3552,6571,3557],{"href":3554,"rel":6572},[3556],[629,6574,6575],{},[3552,6576,3564],{"href":3562,"rel":6577},[3556],[629,6579,6580],{},[3552,6581,3571],{"href":3569,"rel":6582},[3556],[629,6584,6585],{},[3552,6586,3578],{"href":3576,"rel":6587},[3556],[113,6589,3582],{"id":3581},[618,6591,6592,6597,6602],{},[629,6593,6594],{},[3552,6595,3591],{"href":3589,"rel":6596},[3556],[629,6598,6599],{},[3552,6600,3598],{"href":3596,"rel":6601},[3556],[629,6603,6604],{},[3552,6605,3605],{"href":3603,"rel":6606},[3556],[98,6608,3609],{"id":3608},[102,6610,3612],{},[102,6612,3615],{},[3617,6614],{},[102,6616,6617,3625],{},[3622,6618,3624],{},[3627,6620,3629],{},{"title":127,"searchDepth":159,"depth":159,"links":6622},[6623,6624,6627,6633,6638,6643,6647,6652,6653,6658,6662],{"id":100,"depth":159,"text":91},{"id":110,"depth":159,"text":111,"children":6625},[6626],{"id":115,"depth":16,"text":116},{"id":130,"depth":159,"text":131,"children":6628},[6629,6630,6631,6632],{"id":134,"depth":16,"text":135},{"id":386,"depth":16,"text":387},{"id":1050,"depth":16,"text":1051},{"id":1520,"depth":16,"text":1521},{"id":1857,"depth":159,"text":1858,"children":6634},[6635,6636,6637],{"id":1861,"depth":16,"text":1862},{"id":2233,"depth":16,"text":2234},{"id":2544,"depth":16,"text":2545},{"id":2947,"depth":159,"text":2948,"children":6639},[6640,6641,6642],{"id":2951,"depth":16,"text":2952},{"id":2961,"depth":16,"text":2962},{"id":2971,"depth":16,"text":2972},{"id":2981,"depth":159,"text":2982,"children":6644},[6645,6646],{"id":2985,"depth":16,"text":2986},{"id":3060,"depth":16,"text":3061},{"id":3150,"depth":159,"text":3151,"children":6648},[6649,6650,6651],{"id":3154,"depth":16,"text":3155},{"id":3238,"depth":16,"text":3239},{"id":3274,"depth":16,"text":3275},{"id":3295,"depth":159,"text":3296},{"id":3366,"depth":159,"text":3367,"children":6654},[6655,6656,6657],{"id":3370,"depth":16,"text":3371},{"id":3434,"depth":16,"text":3435},{"id":3468,"depth":16,"text":3469},{"id":3541,"depth":159,"text":3542,"children":6659},[6660,6661],{"id":3545,"depth":16,"text":3546},{"id":3581,"depth":16,"text":3582},{"id":3608,"depth":159,"text":3609},{"readingTime":3676},{"title":91,"description":3673},{"src":3682,"mime":3683,"alt":3684,"width":3685,"height":3686},[3689,3690,3691,131,3692],[6668,7895,9602],{"id":6669,"title":6670,"abstract":92,"author":93,"authorUrl":92,"body":6671,"date":7877,"dateUpdated":7877,"description":7878,"excerpt":92,"extension":3674,"featured":333,"headline":92,"image":92,"meta":7879,"navigation":333,"ogImage":92,"path":7881,"seo":7882,"series":7883,"seriesDescription":7884,"seriesOrder":152,"socialImage":7885,"stem":7888,"tags":7889,"__hash__":7894},"blog/blog/21-react-compiler-manual-memoization-end.md","React Compiler and the End of Manual Memoization",{"type":95,"value":6672,"toc":7835},[6673,6676,6690,6693,6697,6700,6720,6723,6727,6730,6734,6744,6748,6756,6760,6763,6767,6770,6774,6777,6791,7108,7111,7115,7118,7179,7183,7186,7271,7275,7278,7282,7285,7289,7292,7296,7299,7303,7306,7332,7336,7339,7343,7370,7374,7406,7410,7436,7440,7443,7447,7450,7662,7666,7669,7748,7752,7755,7759,7762,7766,7770,7779,7783,7786,7790,7793,7797,7800,7804,7807,7811,7814,7818,7821,7823,7826,7829,7832],[98,6674,6670],{"id":6675},"react-compiler-and-the-end-of-manual-memoization",[102,6677,6678,6679,1616,6682,6685,6686,6689],{},"The React development landscape changed forever with the stable release of the React Compiler in late 2025. Now in 2026, manually writing ",[125,6680,6681],{},"useMemo",[125,6683,6684],{},"useCallback",", and ",[125,6687,6688],{},"React.memo"," has become legacy practice—like manually managing memory in languages with garbage collection. After migrating several large React and Next.js applications to use the React Compiler, I've witnessed dramatic improvements in both performance and code quality.",[102,6691,6692],{},"In this comprehensive guide, we'll explore how the React Compiler works, understand why manual memoization is now obsolete, and learn the new best practices for writing high-performance React applications in 2026. Whether you're building with React, Next.js, or React-based frameworks, understanding these changes is essential for modern development.",[98,6694,6696],{"id":6695},"the-problem-with-manual-memoization","The Problem with Manual Memoization",[102,6698,6699],{},"For years, React developers have been burdened with manual performance optimization. Every component required careful consideration of:",[618,6701,6702,6707,6712,6717],{},[629,6703,6704,6705],{},"When to wrap functions in ",[125,6706,6684],{},[629,6708,6709,6710],{},"Which values to memoize with ",[125,6711,6681],{},[629,6713,6714,6715],{},"Which components should use ",[125,6716,6688],{},[629,6718,6719],{},"What dependencies to include in dependency arrays",[102,6721,6722],{},"This cognitive overhead led to several common problems:",[113,6724,6726],{"id":6725},"premature-optimization","Premature Optimization",[102,6728,6729],{},"Developers often added memoization everywhere \"just in case,\" resulting in code that was harder to read and maintain without meaningful performance benefits. This premature optimization wasted development time and added unnecessary complexity.",[113,6731,6733],{"id":6732},"missing-dependencies","Missing Dependencies",[102,6735,6736,6737,6740,6741,6743],{},"Incorrect dependency arrays in ",[125,6738,6739],{},"useEffect"," and ",[125,6742,6684],{}," caused subtle bugs where stale closures captured outdated values. These bugs were notoriously difficult to track down and fix.",[113,6745,6747],{"id":6746},"over-memoization","Over-Memoization",[102,6749,6750,6751,6740,6753,6755],{},"Excessive use of ",[125,6752,6681],{},[125,6754,6684],{}," created memory overhead and made code harder to understand. The performance cost of memoization itself sometimes outweighed the benefits.",[113,6757,6759],{"id":6758},"inconsistent-patterns","Inconsistent Patterns",[102,6761,6762],{},"Different team members had different opinions on when to memoize, leading to inconsistent codebases where some components were heavily optimized while others weren't optimized at all.",[98,6764,6766],{"id":6765},"how-the-react-compiler-works","How the React Compiler Works",[102,6768,6769],{},"The React Compiler uses sophisticated static analysis to automatically determine which components and values need memoization. It analyzes your code at build time and inserts optimal memoization automatically.",[113,6771,6773],{"id":6772},"automatic-memoization","Automatic Memoization",[102,6775,6776],{},"The compiler identifies:",[618,6778,6779,6782,6785,6788],{},[629,6780,6781],{},"Components that should be memoized",[629,6783,6784],{},"Functions that should be wrapped in callbacks",[629,6786,6787],{},"Values that should be cached",[629,6789,6790],{},"Optimal dependency arrays based on actual usage",[118,6792,6794],{"className":143,"code":6793,"language":145,"meta":127,"style":127},"// Before React Compiler (manual memoization)\nfunction UserProfile({ userId }) {\n const fetchUser = useCallback(async () => {\n const response = await fetch(`/api/users/${userId}`)\n return response.json()\n }, [userId])\n\n const user = useMemo(() => {\n return transformUserData(rawUser)\n }, [rawUser])\n\n return
{user.name}
\n}\n\n// After React Compiler (automatic memoization)\nfunction UserProfile({ userId }) {\n const fetchUser = async () => {\n const response = await fetch(`/api/users/${userId}`)\n return response.json()\n }\n\n const user = transformUserData(rawUser)\n\n return
{user.name}
\n}\n",[125,6795,6796,6801,6818,6841,6873,6886,6898,6902,6921,6935,6945,6949,6973,6977,6981,6986,7000,7016,7042,7054,7058,7062,7078,7082,7104],{"__ignoreMap":127},[149,6797,6798],{"class":151,"line":152},[149,6799,6800],{"class":155},"// Before React Compiler (manual memoization)\n",[149,6802,6803,6806,6809,6812,6814,6816],{"class":151,"line":159},[149,6804,6805],{"class":162},"function",[149,6807,6808],{"class":504}," UserProfile",[149,6810,6811],{"class":170},"({",[149,6813,2310],{"class":790},[149,6815,2801],{"class":170},[149,6817,283],{"class":170},[149,6819,6820,6822,6825,6827,6830,6832,6835,6837,6839],{"class":151,"line":16},[149,6821,1255],{"class":162},[149,6823,6824],{"class":166}," fetchUser",[149,6826,1261],{"class":170},[149,6828,6829],{"class":504}," useCallback",[149,6831,858],{"class":406},[149,6833,6834],{"class":162},"async",[149,6836,1884],{"class":170},[149,6838,800],{"class":162},[149,6840,283],{"class":170},[149,6842,6843,6845,6848,6850,6852,6855,6857,6860,6863,6866,6868,6871],{"class":151,"line":192},[149,6844,2640],{"class":162},[149,6846,6847],{"class":166}," response",[149,6849,1261],{"class":170},[149,6851,1264],{"class":339},[149,6853,6854],{"class":504}," fetch",[149,6856,858],{"class":406},[149,6858,6859],{"class":170},"`",[149,6861,6862],{"class":182},"/api/users/",[149,6864,6865],{"class":170},"${",[149,6867,2287],{"class":166},[149,6869,6870],{"class":170},"}`",[149,6872,1211],{"class":406},[149,6874,6875,6878,6880,6882,6884],{"class":151,"line":204},[149,6876,6877],{"class":339}," return",[149,6879,6847],{"class":166},[149,6881,276],{"class":170},[149,6883,1292],{"class":504},[149,6885,516],{"class":406},[149,6887,6888,6891,6893,6895],{"class":151,"line":216},[149,6889,6890],{"class":170}," },",[149,6892,541],{"class":406},[149,6894,2287],{"class":166},[149,6896,6897],{"class":406},"])\n",[149,6899,6900],{"class":151,"line":228},[149,6901,334],{"emptyLinePlaceholder":333},[149,6903,6904,6906,6908,6910,6913,6915,6917,6919],{"class":151,"line":240},[149,6905,1255],{"class":162},[149,6907,1403],{"class":166},[149,6909,1261],{"class":170},[149,6911,6912],{"class":504}," useMemo",[149,6914,858],{"class":406},[149,6916,1166],{"class":170},[149,6918,800],{"class":162},[149,6920,283],{"class":170},[149,6922,6923,6925,6928,6930,6933],{"class":151,"line":252},[149,6924,6877],{"class":339},[149,6926,6927],{"class":504}," transformUserData",[149,6929,858],{"class":406},[149,6931,6932],{"class":166},"rawUser",[149,6934,1211],{"class":406},[149,6936,6937,6939,6941,6943],{"class":151,"line":359},[149,6938,6890],{"class":170},[149,6940,541],{"class":406},[149,6942,6932],{"class":166},[149,6944,6897],{"class":406},[149,6946,6947],{"class":151,"line":375},[149,6948,334],{"emptyLinePlaceholder":333},[149,6950,6951,6953,6955,6957,6959,6961,6964,6966,6969,6971],{"class":151,"line":381},[149,6952,1284],{"class":339},[149,6954,1944],{"class":406},[149,6956,589],{"class":279},[149,6958,513],{"class":406},[149,6960,1297],{"class":170},[149,6962,6963],{"class":406},"user.",[149,6965,1642],{"class":166},[149,6967,6968],{"class":170},"} {\n onAddToCart(product)\n trackEvent('add_to_cart', { productId: product.id })\n }\n\n return (\n
\n {products.map(product => (\n \n ))}\n
\n )\n}\n",[125,7454,7455,7460,7481,7501,7512,7546,7550,7554,7560,7568,7589,7597,7611,7622,7634,7639,7646,7654,7658],{"__ignoreMap":127},[149,7456,7457],{"class":151,"line":152},[149,7458,7459],{"class":155},"// Good: Clear, readable code\n",[149,7461,7462,7464,7467,7469,7472,7474,7477,7479],{"class":151,"line":159},[149,7463,6805],{"class":162},[149,7465,7466],{"class":504}," ProductList",[149,7468,6811],{"class":170},[149,7470,7471],{"class":790}," products",[149,7473,939],{"class":170},[149,7475,7476],{"class":790}," onAddToCart",[149,7478,2801],{"class":170},[149,7480,283],{"class":170},[149,7482,7483,7485,7488,7490,7492,7495,7497,7499],{"class":151,"line":16},[149,7484,1255],{"class":162},[149,7486,7487],{"class":166}," handleAddToCart",[149,7489,1261],{"class":170},[149,7491,787],{"class":170},[149,7493,7494],{"class":790},"product",[149,7496,797],{"class":170},[149,7498,800],{"class":162},[149,7500,283],{"class":170},[149,7502,7503,7506,7508,7510],{"class":151,"line":192},[149,7504,7505],{"class":504}," onAddToCart",[149,7507,858],{"class":406},[149,7509,7494],{"class":166},[149,7511,1211],{"class":406},[149,7513,7514,7517,7519,7521,7524,7526,7528,7530,7533,7535,7538,7540,7542,7544],{"class":151,"line":204},[149,7515,7516],{"class":504}," trackEvent",[149,7518,858],{"class":406},[149,7520,1919],{"class":170},[149,7522,7523],{"class":182},"add_to_cart",[149,7525,1919],{"class":170},[149,7527,939],{"class":170},[149,7529,734],{"class":170},[149,7531,7532],{"class":406}," productId",[149,7534,292],{"class":170},[149,7536,7537],{"class":166}," product",[149,7539,276],{"class":170},[149,7541,815],{"class":166},[149,7543,740],{"class":170},[149,7545,1211],{"class":406},[149,7547,7548],{"class":151,"line":216},[149,7549,378],{"class":170},[149,7551,7552],{"class":151,"line":228},[149,7553,334],{"emptyLinePlaceholder":333},[149,7555,7556,7558],{"class":151,"line":240},[149,7557,1284],{"class":339},[149,7559,1973],{"class":406},[149,7561,7562,7564,7566],{"class":151,"line":252},[149,7563,597],{"class":406},[149,7565,589],{"class":279},[149,7567,425],{"class":406},[149,7569,7570,7573,7576,7578,7581,7583,7585,7587],{"class":151,"line":359},[149,7571,7572],{"class":170}," {",[149,7574,7575],{"class":790},"products",[149,7577,276],{"class":406},[149,7579,7580],{"class":790},"map",[149,7582,858],{"class":406},[149,7584,7494],{"class":790},[149,7586,800],{"class":170},[149,7588,1973],{"class":406},[149,7590,7591,7594],{"class":151,"line":375},[149,7592,7593],{"class":170}," <",[149,7595,7596],{"class":790},"ProductCard\n",[149,7598,7599,7602,7604,7607,7609],{"class":151,"line":381},[149,7600,7601],{"class":166}," key",[149,7603,2002],{"class":170},[149,7605,7606],{"class":406},"product.",[149,7608,815],{"class":166},[149,7610,328],{"class":170},[149,7612,7613,7616,7618,7620],{"class":151,"line":29},[149,7614,7615],{"class":166}," product",[149,7617,2002],{"class":170},[149,7619,7494],{"class":166},[149,7621,328],{"class":170},[149,7623,7624,7627,7629,7632],{"class":151,"line":573},[149,7625,7626],{"class":166}," onAddToCart",[149,7628,2002],{"class":170},[149,7630,7631],{"class":166},"handleAddToCart",[149,7633,328],{"class":170},[149,7635,7636],{"class":151,"line":583},[149,7637,7638],{"class":170}," />\n",[149,7640,7641,7644],{"class":151,"line":594},[149,7642,7643],{"class":406}," ))",[149,7645,328],{"class":170},[149,7647,7648,7650,7652],{"class":151,"line":613},[149,7649,689],{"class":170},[149,7651,589],{"class":166},[149,7653,425],{"class":170},[149,7655,7656],{"class":151,"line":623},[149,7657,2046],{"class":406},[149,7659,7660],{"class":151,"line":670},[149,7661,328],{"class":170},[113,7663,7665],{"id":7664},"use-stable-identity-when-needed","Use Stable Identity When Needed",[102,7667,7668],{},"While the compiler handles most cases, some scenarios still benefit from stable identity:",[118,7670,7672],{"className":143,"code":7671,"language":145,"meta":127,"style":127},"// Use refs for values that change but shouldn't trigger re-renders\nconst renderCount = useRef(0)\nrenderCount.current++\n\n// Use state for values that should trigger re-renders\nconst [count, setCount] = useState(0)\n",[125,7673,7674,7679,7698,7711,7715,7720],{"__ignoreMap":127},[149,7675,7676],{"class":151,"line":152},[149,7677,7678],{"class":155},"// Use refs for values that change but shouldn't trigger re-renders\n",[149,7680,7681,7683,7686,7688,7691,7693,7696],{"class":151,"line":159},[149,7682,163],{"class":162},[149,7684,7685],{"class":166}," renderCount ",[149,7687,171],{"class":170},[149,7689,7690],{"class":504}," useRef",[149,7692,858],{"class":166},[149,7694,7695],{"class":308},"0",[149,7697,1211],{"class":166},[149,7699,7700,7703,7705,7708],{"class":151,"line":16},[149,7701,7702],{"class":166},"renderCount",[149,7704,276],{"class":170},[149,7706,7707],{"class":166},"current",[149,7709,7710],{"class":170},"++\n",[149,7712,7713],{"class":151,"line":192},[149,7714,334],{"emptyLinePlaceholder":333},[149,7716,7717],{"class":151,"line":204},[149,7718,7719],{"class":155},"// Use state for values that should trigger re-renders\n",[149,7721,7722,7724,7726,7729,7731,7734,7737,7739,7742,7744,7746],{"class":151,"line":216},[149,7723,163],{"class":162},[149,7725,541],{"class":170},[149,7727,7728],{"class":166},"count",[149,7730,939],{"class":170},[149,7732,7733],{"class":166}," setCount",[149,7735,7736],{"class":170},"]",[149,7738,1261],{"class":170},[149,7740,7741],{"class":504}," useState",[149,7743,858],{"class":166},[149,7745,7695],{"class":308},[149,7747,1211],{"class":166},[113,7749,7751],{"id":7750},"profile-before-optimizing","Profile Before Optimizing",[102,7753,7754],{},"Use React DevTools Profiler to identify actual performance bottlenecks. Only add manual optimization if the compiler's automatic optimization isn't sufficient.",[113,7756,7758],{"id":7757},"keep-components-pure","Keep Components Pure",[102,7760,7761],{},"The compiler works best with pure components that follow React's rules. Avoid side effects in render functions and keep components predictable.",[98,7763,7765],{"id":7764},"common-pitfalls-and-solutions","Common Pitfalls and Solutions",[113,7767,7769],{"id":7768},"overriding-compiler-optimization","Overriding Compiler Optimization",[102,7771,7772,7773,7775,7776,7778],{},"Don't manually add ",[125,7774,6681],{}," or ",[125,7777,6684],{}," unless profiling shows a specific need. Manual memoization can interfere with the compiler's optimization strategy.",[113,7780,7782],{"id":7781},"misunderstanding-compiler-limitations","Misunderstanding Compiler Limitations",[102,7784,7785],{},"The compiler can't optimize everything. Dynamic patterns, certain higher-order components, and complex closures may still require manual attention.",[113,7787,7789],{"id":7788},"skipping-testing","Skipping Testing",[102,7791,7792],{},"Always test thoroughly after enabling the compiler. While it's generally safe, edge cases can occur in complex applications.",[98,7794,7796],{"id":7795},"the-future-of-react-performance","The Future of React Performance",[102,7798,7799],{},"The React Compiler represents a fundamental shift in how we think about React performance:",[113,7801,7803],{"id":7802},"declarative-performance","Declarative Performance",[102,7805,7806],{},"Just as React made UI development declarative, the compiler makes performance optimization declarative. You describe what you want, and the compiler figures out how to make it fast.",[113,7808,7810],{"id":7809},"focus-on-user-experience","Focus on User Experience",[102,7812,7813],{},"With optimization automated, developers can focus on what truly matters: building great user experiences rather than micro-optimizing component rendering.",[113,7815,7817],{"id":7816},"evolution-of-best-practices","Evolution of Best Practices",[102,7819,7820],{},"React best practices will continue to evolve. The patterns that were essential in 2024 are now legacy. Stay current with React's evolving recommendations.",[98,7822,3609],{"id":3608},[102,7824,7825],{},"The React Compiler marks the end of an era for manual memoization in React. By automating optimization, it frees developers to focus on building great user experiences while delivering better performance than manual optimization ever could.",[102,7827,7828],{},"If you haven't adopted the React Compiler yet, now is the time to start. The migration path is well-documented, the performance benefits are real, and the developer experience improvements are transformative. Manual memoization served us well, but it's time to embrace the future of automatic optimization.",[102,7830,7831],{},"The React of 2026 is faster, simpler, and more developer-friendly than ever before. The compiler handles the complexity, so you can focus on what you do best: building amazing applications.",[3627,7833,7834],{},"html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":127,"searchDepth":159,"depth":159,"links":7836},[7837,7838,7844,7849,7855,7860,7866,7871,7876],{"id":6675,"depth":159,"text":6670},{"id":6695,"depth":159,"text":6696,"children":7839},[7840,7841,7842,7843],{"id":6725,"depth":16,"text":6726},{"id":6732,"depth":16,"text":6733},{"id":6746,"depth":16,"text":6747},{"id":6758,"depth":16,"text":6759},{"id":6765,"depth":159,"text":6766,"children":7845},[7846,7847,7848],{"id":6772,"depth":16,"text":6773},{"id":7113,"depth":16,"text":7114},{"id":7181,"depth":16,"text":7182},{"id":7273,"depth":159,"text":7274,"children":7850},[7851,7852,7853,7854],{"id":7280,"depth":16,"text":7281},{"id":7287,"depth":16,"text":7288},{"id":7294,"depth":16,"text":7295},{"id":7301,"depth":16,"text":7302},{"id":7334,"depth":159,"text":7335,"children":7856},[7857,7858,7859],{"id":7341,"depth":16,"text":7342},{"id":7372,"depth":16,"text":7373},{"id":7408,"depth":16,"text":7409},{"id":7438,"depth":159,"text":7439,"children":7861},[7862,7863,7864,7865],{"id":7445,"depth":16,"text":7446},{"id":7664,"depth":16,"text":7665},{"id":7750,"depth":16,"text":7751},{"id":7757,"depth":16,"text":7758},{"id":7764,"depth":159,"text":7765,"children":7867},[7868,7869,7870],{"id":7768,"depth":16,"text":7769},{"id":7781,"depth":16,"text":7782},{"id":7788,"depth":16,"text":7789},{"id":7795,"depth":159,"text":7796,"children":7872},[7873,7874,7875],{"id":7802,"depth":16,"text":7803},{"id":7809,"depth":16,"text":7810},{"id":7816,"depth":16,"text":7817},{"id":3608,"depth":159,"text":3609},"2026-03-13","Explore how the React Compiler is revolutionizing React development in 2026 by automating memoization, eliminating performance pitfalls, and changing best practices forever.",{"readingTime":7880},"10 min read","/blog/21-react-compiler-manual-memoization-end",{"title":6670,"description":7878},"React Deep Dive","Advanced React patterns, performance optimization, and modern best practices",{"src":7886,"mime":3683,"alt":7887,"width":3685,"height":3686},"/img/blog/21-react-compiler-manual-memoization-end/banner.svg","React Compiler End of Manual Memoization - React logo with automatic gear symbols and optimization icons on purple-blue gradient background","blog/21-react-compiler-manual-memoization-end",[7890,7891,7892,3692,7893],"React","Performance","Compiler","Optimization","l4pX4wwK4ELNfvdV9QbWaqEmkPGJHGya3IJkdEH-iXM",{"id":7896,"title":7897,"abstract":92,"author":93,"authorUrl":92,"body":7898,"date":9587,"dateUpdated":9587,"description":9588,"excerpt":92,"extension":3674,"featured":333,"headline":92,"image":92,"meta":9589,"navigation":333,"ogImage":92,"path":9590,"seo":9591,"series":9592,"seriesDescription":9593,"seriesOrder":152,"socialImage":9594,"stem":9597,"tags":9598,"__hash__":9601},"blog/blog/20-core-web-vitals-2026-optimization.md","Core Web Vitals 2026: Performance Optimization Strategies",{"type":95,"value":7899,"toc":9563},[7900,7903,7906,7909,7913,7916,7920,7923,7928,7939,7944,7974,8108,8112,8115,8120,8134,8138,8164,8262,8266,8269,8274,8288,8292,8318,8457,8461,8465,8468,8641,8645,8648,8674,8864,8868,8871,8980,8984,8988,8991,9177,9181,9184,9428,9432,9435,9439,9453,9457,9489,9493,9510,9514,9517,9549,9551,9554,9557,9560],[98,7901,7897],{"id":7902},"core-web-vitals-2026-performance-optimization-strategies",[102,7904,7905],{},"Web performance has always been critical, but in 2026, it's more important than ever. Google's Core Web Vitals have evolved into comprehensive metrics that directly impact search rankings, user experience, and conversion rates. After optimizing dozens of websites for peak performance, I've developed a systematic approach to achieving perfect Core Web Vitals scores.",[102,7907,7908],{},"In this comprehensive guide, we'll explore the latest Core Web Vitals metrics, understand how they're measured, and implement proven optimization strategies that deliver real-world results. Whether you're building a Nuxt application, a React site, or any modern web application, these techniques will help you deliver lightning-fast experiences that users and search engines love.",[98,7910,7912],{"id":7911},"understanding-core-web-vitals-in-2026","Understanding Core Web Vitals in 2026",[102,7914,7915],{},"Google has refined Core Web Vitals over the years, and 2026 brings updated thresholds and new metrics that better reflect modern web experiences. The three core metrics remain, but with stricter targets:",[113,7917,7919],{"id":7918},"largest-contentful-paint-lcp-20s-target","Largest Contentful Paint (LCP) - 2.0s Target",[102,7921,7922],{},"LCP measures loading performance by tracking when the largest content element becomes visible. The 2026 target is now 2.0 seconds (down from 2.5s), reflecting user expectations for faster loading.",[102,7924,7925],{},[3622,7926,7927],{},"What counts as LCP:",[618,7929,7930,7933,7936],{},[629,7931,7932],{},"Images and video thumbnails",[629,7934,7935],{},"Text blocks (headings, paragraphs)",[629,7937,7938],{},"Background images with significant content",[102,7940,7941],{},[3622,7942,7943],{},"Optimization strategies:",[7344,7945,7946,7952,7962,7968],{},[629,7947,7948,7951],{},[3622,7949,7950],{},"Optimize Images",": Use modern formats (AVIF, WebP), implement responsive images, and lazy-load off-screen content",[629,7953,7954,7957,7958,7961],{},[3622,7955,7956],{},"Preload Critical Resources",": Use ",[125,7959,7960],{},""," for LCP elements",[629,7963,7964,7967],{},[3622,7965,7966],{},"Implement Streaming SSR",": Send HTML in chunks to start rendering sooner",[629,7969,7970,7973],{},[3622,7971,7972],{},"Use Edge Caching",": Serve content from edge locations closer to users",[118,7975,7977],{"className":143,"code":7976,"language":145,"meta":127,"style":127},"// Nuxt 4: Preload LCP image\nuseHead({\n link: [\n {\n rel: \"preload\",\n as: \"image\",\n href: \"/img/hero-banner.avif\",\n imagesrcset:\n \"/img/hero-banner-480.avif 480w, /img/hero-banner-768.avif 768w\",\n imagesizes: \"100vw\",\n },\n ],\n})\n",[125,7978,7979,7984,7993,8002,8007,8023,8039,8055,8062,8074,8090,8095,8102],{"__ignoreMap":127},[149,7980,7981],{"class":151,"line":152},[149,7982,7983],{"class":155},"// Nuxt 4: Preload LCP image\n",[149,7985,7986,7989,7991],{"class":151,"line":159},[149,7987,7988],{"class":504},"useHead",[149,7990,858],{"class":166},[149,7992,346],{"class":170},[149,7994,7995,7998,8000],{"class":151,"line":16},[149,7996,7997],{"class":406}," link",[149,7999,292],{"class":170},[149,8001,174],{"class":166},[149,8003,8004],{"class":151,"line":192},[149,8005,8006],{"class":170}," {\n",[149,8008,8009,8012,8014,8016,8019,8021],{"class":151,"line":204},[149,8010,8011],{"class":406}," rel",[149,8013,292],{"class":170},[149,8015,746],{"class":170},[149,8017,8018],{"class":182},"preload",[149,8020,186],{"class":170},[149,8022,189],{"class":170},[149,8024,8025,8028,8030,8032,8035,8037],{"class":151,"line":216},[149,8026,8027],{"class":406}," as",[149,8029,292],{"class":170},[149,8031,746],{"class":170},[149,8033,8034],{"class":182},"image",[149,8036,186],{"class":170},[149,8038,189],{"class":170},[149,8040,8041,8044,8046,8048,8051,8053],{"class":151,"line":228},[149,8042,8043],{"class":406}," href",[149,8045,292],{"class":170},[149,8047,746],{"class":170},[149,8049,8050],{"class":182},"/img/hero-banner.avif",[149,8052,186],{"class":170},[149,8054,189],{"class":170},[149,8056,8057,8060],{"class":151,"line":240},[149,8058,8059],{"class":406}," imagesrcset",[149,8061,1660],{"class":170},[149,8063,8064,8067,8070,8072],{"class":151,"line":252},[149,8065,8066],{"class":170}," \"",[149,8068,8069],{"class":182},"/img/hero-banner-480.avif 480w, /img/hero-banner-768.avif 768w",[149,8071,186],{"class":170},[149,8073,189],{"class":170},[149,8075,8076,8079,8081,8083,8086,8088],{"class":151,"line":359},[149,8077,8078],{"class":406}," imagesizes",[149,8080,292],{"class":170},[149,8082,746],{"class":170},[149,8084,8085],{"class":182},"100vw",[149,8087,186],{"class":170},[149,8089,189],{"class":170},[149,8091,8092],{"class":151,"line":375},[149,8093,8094],{"class":170}," },\n",[149,8096,8097,8100],{"class":151,"line":381},[149,8098,8099],{"class":166}," ]",[149,8101,189],{"class":170},[149,8103,8104,8106],{"class":151,"line":29},[149,8105,1044],{"class":170},[149,8107,1211],{"class":166},[113,8109,8111],{"id":8110},"interaction-to-next-paint-inp-150ms-target","Interaction to Next Paint (INP) - 150ms Target",[102,8113,8114],{},"INP replaced First Input Delay (FID) in 2024 and has become the primary responsiveness metric. It measures the latency of all user interactions during a page visit, not just the first one. The 2026 target is 150ms.",[102,8116,8117],{},[3622,8118,8119],{},"What INP measures:",[618,8121,8122,8125,8128,8131],{},[629,8123,8124],{},"Click events on buttons and links",[629,8126,8127],{},"Keyboard input in form fields",[629,8129,8130],{},"Touch interactions on mobile devices",[629,8132,8133],{},"Scroll interactions",[102,8135,8136],{},[3622,8137,7943],{},[7344,8139,8140,8146,8152,8158],{},[629,8141,8142,8145],{},[3622,8143,8144],{},"Minimize JavaScript Execution",": Break up long tasks, use web workers for heavy computation",[629,8147,8148,8151],{},[3622,8149,8150],{},"Optimize Event Handlers",": Debounce scroll events, use passive event listeners",[629,8153,8154,8157],{},[3622,8155,8156],{},"Reduce Third-Party Impact",": Load analytics and ads asynchronously",[629,8159,8160,8163],{},[3622,8161,8162],{},"Use View Transitions API",": Smooth page transitions without blocking interactions",[118,8165,8167],{"className":143,"code":8166,"language":145,"meta":127,"style":127},"// Optimize event handlers with passive listeners\nonMounted(() => {\n const element = document.querySelector(\".scroll-container\")\n element?.addEventListener(\"scroll\", handleScroll, { passive: true })\n})\n",[125,8168,8169,8174,8187,8215,8256],{"__ignoreMap":127},[149,8170,8171],{"class":151,"line":152},[149,8172,8173],{"class":155},"// Optimize event handlers with passive listeners\n",[149,8175,8176,8179,8181,8183,8185],{"class":151,"line":159},[149,8177,8178],{"class":504},"onMounted",[149,8180,858],{"class":166},[149,8182,1166],{"class":170},[149,8184,800],{"class":162},[149,8186,283],{"class":170},[149,8188,8189,8191,8194,8196,8199,8201,8204,8206,8208,8211,8213],{"class":151,"line":16},[149,8190,1255],{"class":162},[149,8192,8193],{"class":166}," element",[149,8195,1261],{"class":170},[149,8197,8198],{"class":166}," document",[149,8200,276],{"class":170},[149,8202,8203],{"class":504},"querySelector",[149,8205,858],{"class":406},[149,8207,186],{"class":170},[149,8209,8210],{"class":182},".scroll-container",[149,8212,186],{"class":170},[149,8214,1211],{"class":406},[149,8216,8217,8220,8223,8226,8228,8230,8233,8235,8237,8240,8242,8244,8247,8249,8252,8254],{"class":151,"line":192},[149,8218,8219],{"class":166}," element",[149,8221,8222],{"class":170},"?.",[149,8224,8225],{"class":504},"addEventListener",[149,8227,858],{"class":406},[149,8229,186],{"class":170},[149,8231,8232],{"class":182},"scroll",[149,8234,186],{"class":170},[149,8236,939],{"class":170},[149,8238,8239],{"class":166}," handleScroll",[149,8241,939],{"class":170},[149,8243,734],{"class":170},[149,8245,8246],{"class":406}," passive",[149,8248,292],{"class":170},[149,8250,8251],{"class":1656}," true",[149,8253,740],{"class":170},[149,8255,1211],{"class":406},[149,8257,8258,8260],{"class":151,"line":204},[149,8259,1044],{"class":170},[149,8261,1211],{"class":166},[113,8263,8265],{"id":8264},"cumulative-layout-shift-cls-005-target","Cumulative Layout Shift (CLS) - 0.05 Target",[102,8267,8268],{},"CLS measures visual stability by tracking unexpected layout shifts. The target remains 0.05, but measurement has become more sophisticated, better accounting for user-initiated changes.",[102,8270,8271],{},[3622,8272,8273],{},"Common causes of layout shift:",[618,8275,8276,8279,8282,8285],{},[629,8277,8278],{},"Images without dimensions",[629,8280,8281],{},"Web fonts causing FOIT/FOUT",[629,8283,8284],{},"Dynamically injected content",[629,8286,8287],{},"Late-loading ads and embeds",[102,8289,8290],{},[3622,8291,7943],{},[7344,8293,8294,8300,8306,8312],{},[629,8295,8296,8299],{},[3622,8297,8298],{},"Set Explicit Dimensions",": Always specify width and height for images and videos",[629,8301,8302,8305],{},[3622,8303,8304],{},"Reserve Space for Dynamic Content",": Use CSS aspect-ratio and min-height",[629,8307,8308,8311],{},[3622,8309,8310],{},"Optimize Font Loading",": Use font-display: optional or swap with size-adjust",[629,8313,8314,8317],{},[3622,8315,8316],{},"Avoid Inserting Content Above Existing Content",": Load ads and embeds in reserved spaces",[118,8319,8321],{"className":262,"code":8320,"language":264,"meta":127,"style":127},"/* Reserve space for images */\n.img-container {\n aspect-ratio: 16 / 9;\n background: #f0f0f0;\n}\n\n/* Optimize font loading */\n@font-face {\n font-family: \"Inter\";\n src: url(\"/fonts/inter.woff2\") format(\"woff2\");\n font-display: swap;\n}\n",[125,8322,8323,8328,8337,8355,8370,8374,8378,8383,8390,8406,8441,8453],{"__ignoreMap":127},[149,8324,8325],{"class":151,"line":152},[149,8326,8327],{"class":155},"/* Reserve space for images */\n",[149,8329,8330,8332,8335],{"class":151,"line":159},[149,8331,276],{"class":170},[149,8333,8334],{"class":279},"img-container",[149,8336,283],{"class":170},[149,8338,8339,8342,8344,8347,8350,8353],{"class":151,"line":16},[149,8340,8341],{"class":288}," aspect-ratio",[149,8343,292],{"class":170},[149,8345,8346],{"class":308}," 16",[149,8348,8349],{"class":166}," / ",[149,8351,8352],{"class":308},"9",[149,8354,298],{"class":170},[149,8356,8357,8360,8362,8365,8368],{"class":151,"line":192},[149,8358,8359],{"class":288}," background",[149,8361,292],{"class":170},[149,8363,8364],{"class":170}," #",[149,8366,8367],{"class":166},"f0f0f0",[149,8369,298],{"class":170},[149,8371,8372],{"class":151,"line":204},[149,8373,328],{"class":170},[149,8375,8376],{"class":151,"line":216},[149,8377,334],{"emptyLinePlaceholder":333},[149,8379,8380],{"class":151,"line":228},[149,8381,8382],{"class":155},"/* Optimize font loading */\n",[149,8384,8385,8388],{"class":151,"line":240},[149,8386,8387],{"class":339},"@font-face",[149,8389,283],{"class":170},[149,8391,8392,8395,8397,8399,8402,8404],{"class":151,"line":252},[149,8393,8394],{"class":288}," font-family",[149,8396,292],{"class":170},[149,8398,746],{"class":170},[149,8400,8401],{"class":182},"Inter",[149,8403,186],{"class":170},[149,8405,298],{"class":170},[149,8407,8408,8411,8413,8416,8418,8420,8423,8425,8427,8430,8432,8434,8437,8439],{"class":151,"line":359},[149,8409,8410],{"class":288}," src",[149,8412,292],{"class":170},[149,8414,8415],{"class":504}," url",[149,8417,858],{"class":170},[149,8419,186],{"class":170},[149,8421,8422],{"class":182},"/fonts/inter.woff2",[149,8424,186],{"class":170},[149,8426,797],{"class":170},[149,8428,8429],{"class":504}," format",[149,8431,858],{"class":170},[149,8433,186],{"class":170},[149,8435,8436],{"class":182},"woff2",[149,8438,186],{"class":170},[149,8440,1508],{"class":170},[149,8442,8443,8446,8448,8451],{"class":151,"line":375},[149,8444,8445],{"class":288}," font-display",[149,8447,292],{"class":170},[149,8449,8450],{"class":166}," swap",[149,8452,298],{"class":170},[149,8454,8455],{"class":151,"line":381},[149,8456,328],{"class":170},[98,8458,8460],{"id":8459},"advanced-optimization-techniques","Advanced Optimization Techniques",[113,8462,8464],{"id":8463},"implementing-speculation-rules","Implementing Speculation Rules",[102,8466,8467],{},"Chrome's Speculation Rules API allows you to prefetch or prerender pages based on user behavior predictions. This can dramatically improve perceived performance for navigation.",[118,8469,8471],{"className":143,"code":8470,"language":145,"meta":127,"style":127},"// Nuxt 4: Enable speculation rules\nuseHead({\n script: [\n {\n type: \"speculationrules\",\n textContent: JSON.stringify({\n prefetch: [\n {\n source: \"document\",\n where: { href_matches: \"/blog/*\" },\n eagerness: \"moderate\",\n },\n ],\n }),\n },\n ],\n})\n",[125,8472,8473,8478,8486,8495,8499,8515,8534,8543,8548,8564,8588,8604,8609,8616,8625,8629,8635],{"__ignoreMap":127},[149,8474,8475],{"class":151,"line":152},[149,8476,8477],{"class":155},"// Nuxt 4: Enable speculation rules\n",[149,8479,8480,8482,8484],{"class":151,"line":159},[149,8481,7988],{"class":504},[149,8483,858],{"class":166},[149,8485,346],{"class":170},[149,8487,8488,8491,8493],{"class":151,"line":16},[149,8489,8490],{"class":406}," script",[149,8492,292],{"class":170},[149,8494,174],{"class":166},[149,8496,8497],{"class":151,"line":192},[149,8498,8006],{"class":170},[149,8500,8501,8504,8506,8508,8511,8513],{"class":151,"line":204},[149,8502,8503],{"class":406}," type",[149,8505,292],{"class":170},[149,8507,746],{"class":170},[149,8509,8510],{"class":182},"speculationrules",[149,8512,186],{"class":170},[149,8514,189],{"class":170},[149,8516,8517,8520,8522,8525,8527,8530,8532],{"class":151,"line":216},[149,8518,8519],{"class":406}," textContent",[149,8521,292],{"class":170},[149,8523,8524],{"class":166}," JSON",[149,8526,276],{"class":170},[149,8528,8529],{"class":504},"stringify",[149,8531,858],{"class":166},[149,8533,346],{"class":170},[149,8535,8536,8539,8541],{"class":151,"line":228},[149,8537,8538],{"class":406}," prefetch",[149,8540,292],{"class":170},[149,8542,174],{"class":166},[149,8544,8545],{"class":151,"line":240},[149,8546,8547],{"class":170}," {\n",[149,8549,8550,8553,8555,8557,8560,8562],{"class":151,"line":252},[149,8551,8552],{"class":406}," source",[149,8554,292],{"class":170},[149,8556,746],{"class":170},[149,8558,8559],{"class":182},"document",[149,8561,186],{"class":170},[149,8563,189],{"class":170},[149,8565,8566,8569,8571,8573,8576,8578,8580,8583,8585],{"class":151,"line":359},[149,8567,8568],{"class":406}," where",[149,8570,292],{"class":170},[149,8572,734],{"class":170},[149,8574,8575],{"class":406}," href_matches",[149,8577,292],{"class":170},[149,8579,746],{"class":170},[149,8581,8582],{"class":182},"/blog/*",[149,8584,186],{"class":170},[149,8586,8587],{"class":170}," },\n",[149,8589,8590,8593,8595,8597,8600,8602],{"class":151,"line":375},[149,8591,8592],{"class":406}," eagerness",[149,8594,292],{"class":170},[149,8596,746],{"class":170},[149,8598,8599],{"class":182},"moderate",[149,8601,186],{"class":170},[149,8603,189],{"class":170},[149,8605,8606],{"class":151,"line":381},[149,8607,8608],{"class":170}," },\n",[149,8610,8611,8614],{"class":151,"line":29},[149,8612,8613],{"class":166}," ]",[149,8615,189],{"class":170},[149,8617,8618,8621,8623],{"class":151,"line":573},[149,8619,8620],{"class":170}," }",[149,8622,797],{"class":166},[149,8624,189],{"class":170},[149,8626,8627],{"class":151,"line":583},[149,8628,8094],{"class":170},[149,8630,8631,8633],{"class":151,"line":594},[149,8632,8099],{"class":166},[149,8634,189],{"class":170},[149,8636,8637,8639],{"class":151,"line":613},[149,8638,1044],{"class":170},[149,8640,1211],{"class":166},[113,8642,8644],{"id":8643},"optimizing-third-party-scripts","Optimizing Third-Party Scripts",[102,8646,8647],{},"Third-party scripts are often the biggest performance bottleneck. Implement these strategies:",[7344,8649,8650,8656,8662,8668],{},[629,8651,8652,8655],{},[3622,8653,8654],{},"Load Non-Critical Scripts After Interaction",": Delay analytics until user engages",[629,8657,8658,8661],{},[3622,8659,8660],{},"Use Partytown",": Run third-party scripts in a web worker",[629,8663,8664,8667],{},[3622,8665,8666],{},"Implement Resource Hints",": Preconnect to third-party domains",[629,8669,8670,8673],{},[3622,8671,8672],{},"Monitor Third-Party Impact",": Track performance impact of each script",[118,8675,8677],{"className":143,"code":8676,"language":145,"meta":127,"style":127},"// Load analytics after user interaction\nlet analyticsLoaded = false\n\nfunction loadAnalytics() {\n if (analyticsLoaded) return\n analyticsLoaded = true\n\n // Dynamically import analytics\n import(\"./analytics\").then(({ init }) => init())\n}\n\n// Load on first user interaction\ndocument.addEventListener(\"click\", loadAnalytics, { once: true })\ndocument.addEventListener(\"scroll\", loadAnalytics, { once: true })\n",[125,8678,8679,8684,8697,8701,8712,8726,8736,8740,8745,8782,8786,8790,8795,8830],{"__ignoreMap":127},[149,8680,8681],{"class":151,"line":152},[149,8682,8683],{"class":155},"// Load analytics after user interaction\n",[149,8685,8686,8689,8692,8694],{"class":151,"line":159},[149,8687,8688],{"class":162},"let",[149,8690,8691],{"class":166}," analyticsLoaded ",[149,8693,171],{"class":170},[149,8695,8696],{"class":1656}," false\n",[149,8698,8699],{"class":151,"line":16},[149,8700,334],{"emptyLinePlaceholder":333},[149,8702,8703,8705,8708,8710],{"class":151,"line":192},[149,8704,6805],{"class":162},[149,8706,8707],{"class":504}," loadAnalytics",[149,8709,1166],{"class":170},[149,8711,283],{"class":170},[149,8713,8714,8716,8718,8721,8723],{"class":151,"line":204},[149,8715,2129],{"class":339},[149,8717,787],{"class":406},[149,8719,8720],{"class":166},"analyticsLoaded",[149,8722,2137],{"class":406},[149,8724,8725],{"class":339},"return\n",[149,8727,8728,8731,8733],{"class":151,"line":216},[149,8729,8730],{"class":166}," analyticsLoaded",[149,8732,1261],{"class":170},[149,8734,8735],{"class":1656}," true\n",[149,8737,8738],{"class":151,"line":228},[149,8739,334],{"emptyLinePlaceholder":333},[149,8741,8742],{"class":151,"line":240},[149,8743,8744],{"class":155}," // Dynamically import analytics\n",[149,8746,8747,8750,8752,8754,8757,8759,8761,8763,8766,8768,8770,8773,8775,8777,8779],{"class":151,"line":252},[149,8748,8749],{"class":170}," import",[149,8751,858],{"class":406},[149,8753,186],{"class":170},[149,8755,8756],{"class":182},"./analytics",[149,8758,186],{"class":170},[149,8760,797],{"class":406},[149,8762,276],{"class":170},[149,8764,8765],{"class":504},"then",[149,8767,858],{"class":406},[149,8769,6811],{"class":170},[149,8771,8772],{"class":790}," init",[149,8774,2801],{"class":170},[149,8776,800],{"class":162},[149,8778,8772],{"class":504},[149,8780,8781],{"class":406},"())\n",[149,8783,8784],{"class":151,"line":359},[149,8785,328],{"class":170},[149,8787,8788],{"class":151,"line":375},[149,8789,334],{"emptyLinePlaceholder":333},[149,8791,8792],{"class":151,"line":381},[149,8793,8794],{"class":155},"// Load on first user interaction\n",[149,8796,8797,8799,8801,8803,8805,8807,8809,8811,8813,8815,8817,8819,8822,8824,8826,8828],{"class":151,"line":29},[149,8798,8559],{"class":166},[149,8800,276],{"class":170},[149,8802,8225],{"class":504},[149,8804,858],{"class":166},[149,8806,186],{"class":170},[149,8808,2898],{"class":182},[149,8810,186],{"class":170},[149,8812,939],{"class":170},[149,8814,8707],{"class":166},[149,8816,939],{"class":170},[149,8818,734],{"class":170},[149,8820,8821],{"class":406}," once",[149,8823,292],{"class":170},[149,8825,8251],{"class":1656},[149,8827,740],{"class":170},[149,8829,1211],{"class":166},[149,8831,8832,8834,8836,8838,8840,8842,8844,8846,8848,8850,8852,8854,8856,8858,8860,8862],{"class":151,"line":573},[149,8833,8559],{"class":166},[149,8835,276],{"class":170},[149,8837,8225],{"class":504},[149,8839,858],{"class":166},[149,8841,186],{"class":170},[149,8843,8232],{"class":182},[149,8845,186],{"class":170},[149,8847,939],{"class":170},[149,8849,8707],{"class":166},[149,8851,939],{"class":170},[149,8853,734],{"class":170},[149,8855,8821],{"class":406},[149,8857,292],{"class":170},[149,8859,8251],{"class":1656},[149,8861,740],{"class":170},[149,8863,1211],{"class":166},[113,8865,8867],{"id":8866},"implementing-progressive-hydration","Implementing Progressive Hydration",[102,8869,8870],{},"Full hydration of complex SPAs can block interactivity. Progressive hydration loads and hydrates components as they become visible or needed.",[118,8872,8874],{"className":143,"code":8873,"language":145,"meta":127,"style":127},"// Nuxt 4: Lazy hydrate components\n\n",[125,8875,8876,8881,8889,8898,8908,8916,8920,8929,8938,8947,8956,8964,8972],{"__ignoreMap":127},[149,8877,8878],{"class":151,"line":152},[149,8879,8880],{"class":155},"// Nuxt 4: Lazy hydrate components\n",[149,8882,8883,8885,8887],{"class":151,"line":159},[149,8884,403],{"class":166},[149,8886,578],{"class":279},[149,8888,425],{"class":166},[149,8890,8891,8893,8896],{"class":151,"line":16},[149,8892,586],{"class":166},[149,8894,8895],{"class":279},"ClientOnly",[149,8897,425],{"class":166},[149,8899,8900,8902,8905],{"class":151,"line":192},[149,8901,597],{"class":170},[149,8903,8904],{"class":166},"LazyHeavyComponent ",[149,8906,8907],{"class":170},"/>\n",[149,8909,8910,8912,8914],{"class":151,"line":204},[149,8911,699],{"class":170},[149,8913,8895],{"class":166},[149,8915,425],{"class":170},[149,8917,8918],{"class":151,"line":216},[149,8919,334],{"emptyLinePlaceholder":333},[149,8921,8922,8924,8927],{"class":151,"line":228},[149,8923,586],{"class":166},[149,8925,8926],{"class":279},"Suspense",[149,8928,425],{"class":166},[149,8930,8931,8933,8936],{"class":151,"line":240},[149,8932,597],{"class":170},[149,8934,8935],{"class":166},"CriticalComponent ",[149,8937,8907],{"class":170},[149,8939,8940,8942,8945],{"class":151,"line":252},[149,8941,597],{"class":170},[149,8943,8944],{"class":166},"template #fallback",[149,8946,425],{"class":170},[149,8948,8949,8951,8954],{"class":151,"line":359},[149,8950,626],{"class":170},[149,8952,8953],{"class":166},"LoadingSkeleton ",[149,8955,8907],{"class":170},[149,8957,8958,8960,8962],{"class":151,"line":375},[149,8959,689],{"class":170},[149,8961,578],{"class":166},[149,8963,425],{"class":170},[149,8965,8966,8968,8970],{"class":151,"line":381},[149,8967,699],{"class":170},[149,8969,8926],{"class":166},[149,8971,425],{"class":170},[149,8973,8974,8976,8978],{"class":151,"line":29},[149,8975,562],{"class":170},[149,8977,578],{"class":166},[149,8979,425],{"class":170},[98,8981,8983],{"id":8982},"measuring-and-monitoring-performance","Measuring and Monitoring Performance",[113,8985,8987],{"id":8986},"real-user-monitoring-rum","Real User Monitoring (RUM)",[102,8989,8990],{},"Lab data from Lighthouse is valuable, but real user monitoring provides insights into actual user experiences. Implement RUM to track Core Web Vitals across your user base.",[118,8992,8994],{"className":143,"code":8993,"language":145,"meta":127,"style":127},"// Track Core Web Vitals with web-vitals library\nimport { onLCP, onINP, onCLS } from \"web-vitals\"\n\nonLCP((metric) => {\n // Send to analytics endpoint\n sendToAnalytics(\"LCP\", metric)\n})\n\nonINP((metric) => {\n sendToAnalytics(\"INP\", metric)\n})\n\nonCLS((metric) => {\n sendToAnalytics(\"CLS\", metric)\n})\n",[125,8995,8996,9001,9031,9035,9053,9058,9079,9085,9089,9106,9125,9131,9135,9152,9171],{"__ignoreMap":127},[149,8997,8998],{"class":151,"line":152},[149,8999,9000],{"class":155},"// Track Core Web Vitals with web-vitals library\n",[149,9002,9003,9005,9007,9010,9012,9015,9017,9020,9022,9024,9026,9029],{"class":151,"line":159},[149,9004,731],{"class":339},[149,9006,734],{"class":170},[149,9008,9009],{"class":166}," onLCP",[149,9011,939],{"class":170},[149,9013,9014],{"class":166}," onINP",[149,9016,939],{"class":170},[149,9018,9019],{"class":166}," onCLS",[149,9021,740],{"class":170},[149,9023,743],{"class":339},[149,9025,746],{"class":170},[149,9027,9028],{"class":182},"web-vitals",[149,9030,752],{"class":170},[149,9032,9033],{"class":151,"line":16},[149,9034,334],{"emptyLinePlaceholder":333},[149,9036,9037,9040,9042,9044,9047,9049,9051],{"class":151,"line":192},[149,9038,9039],{"class":504},"onLCP",[149,9041,858],{"class":166},[149,9043,858],{"class":170},[149,9045,9046],{"class":790},"metric",[149,9048,797],{"class":170},[149,9050,800],{"class":162},[149,9052,283],{"class":170},[149,9054,9055],{"class":151,"line":204},[149,9056,9057],{"class":155}," // Send to analytics endpoint\n",[149,9059,9060,9063,9065,9067,9070,9072,9074,9077],{"class":151,"line":216},[149,9061,9062],{"class":504}," sendToAnalytics",[149,9064,858],{"class":406},[149,9066,186],{"class":170},[149,9068,9069],{"class":182},"LCP",[149,9071,186],{"class":170},[149,9073,939],{"class":170},[149,9075,9076],{"class":166}," metric",[149,9078,1211],{"class":406},[149,9080,9081,9083],{"class":151,"line":228},[149,9082,1044],{"class":170},[149,9084,1211],{"class":166},[149,9086,9087],{"class":151,"line":240},[149,9088,334],{"emptyLinePlaceholder":333},[149,9090,9091,9094,9096,9098,9100,9102,9104],{"class":151,"line":252},[149,9092,9093],{"class":504},"onINP",[149,9095,858],{"class":166},[149,9097,858],{"class":170},[149,9099,9046],{"class":790},[149,9101,797],{"class":170},[149,9103,800],{"class":162},[149,9105,283],{"class":170},[149,9107,9108,9110,9112,9114,9117,9119,9121,9123],{"class":151,"line":359},[149,9109,9062],{"class":504},[149,9111,858],{"class":406},[149,9113,186],{"class":170},[149,9115,9116],{"class":182},"INP",[149,9118,186],{"class":170},[149,9120,939],{"class":170},[149,9122,9076],{"class":166},[149,9124,1211],{"class":406},[149,9126,9127,9129],{"class":151,"line":375},[149,9128,1044],{"class":170},[149,9130,1211],{"class":166},[149,9132,9133],{"class":151,"line":381},[149,9134,334],{"emptyLinePlaceholder":333},[149,9136,9137,9140,9142,9144,9146,9148,9150],{"class":151,"line":29},[149,9138,9139],{"class":504},"onCLS",[149,9141,858],{"class":166},[149,9143,858],{"class":170},[149,9145,9046],{"class":790},[149,9147,797],{"class":170},[149,9149,800],{"class":162},[149,9151,283],{"class":170},[149,9153,9154,9156,9158,9160,9163,9165,9167,9169],{"class":151,"line":573},[149,9155,9062],{"class":504},[149,9157,858],{"class":406},[149,9159,186],{"class":170},[149,9161,9162],{"class":182},"CLS",[149,9164,186],{"class":170},[149,9166,939],{"class":170},[149,9168,9076],{"class":166},[149,9170,1211],{"class":406},[149,9172,9173,9175],{"class":151,"line":583},[149,9174,1044],{"class":170},[149,9176,1211],{"class":166},[113,9178,9180],{"id":9179},"performance-budgets","Performance Budgets",[102,9182,9183],{},"Set performance budgets in your CI/CD pipeline to catch regressions before they reach production.",[118,9185,9187],{"className":3064,"code":9186,"language":1292,"meta":127,"style":127},"{\n \"performance\": {\n \"budgets\": [\n {\n \"path\": \"/*\",\n \"resourceSizes\": [\n { \"resourceType\": \"script\", \"budget\": 150 },\n { \"resourceType\": \"image\", \"budget\": 200 },\n { \"resourceType\": \"total\", \"budget\": 500 }\n ],\n \"resourceCounts\": [{ \"resourceType\": \"third-party\", \"budget\": 5 }]\n }\n ]\n }\n}\n",[125,9188,9189,9193,9206,9219,9223,9243,9256,9292,9325,9360,9365,9410,9415,9420,9424],{"__ignoreMap":127},[149,9190,9191],{"class":151,"line":152},[149,9192,346],{"class":170},[149,9194,9195,9197,9200,9202,9204],{"class":151,"line":159},[149,9196,179],{"class":170},[149,9198,9199],{"class":162},"performance",[149,9201,186],{"class":170},[149,9203,292],{"class":170},[149,9205,283],{"class":170},[149,9207,9208,9210,9213,9215,9217],{"class":151,"line":16},[149,9209,3089],{"class":170},[149,9211,9212],{"class":279},"budgets",[149,9214,186],{"class":170},[149,9216,292],{"class":170},[149,9218,174],{"class":170},[149,9220,9221],{"class":151,"line":192},[149,9222,7154],{"class":170},[149,9224,9225,9227,9230,9232,9234,9236,9239,9241],{"class":151,"line":204},[149,9226,8066],{"class":170},[149,9228,9229],{"class":308},"path",[149,9231,186],{"class":170},[149,9233,292],{"class":170},[149,9235,746],{"class":170},[149,9237,9238],{"class":182},"/*",[149,9240,186],{"class":170},[149,9242,189],{"class":170},[149,9244,9245,9247,9250,9252,9254],{"class":151,"line":216},[149,9246,8066],{"class":170},[149,9248,9249],{"class":308},"resourceSizes",[149,9251,186],{"class":170},[149,9253,292],{"class":170},[149,9255,174],{"class":170},[149,9257,9258,9261,9263,9266,9268,9270,9272,9274,9276,9278,9280,9283,9285,9287,9290],{"class":151,"line":228},[149,9259,9260],{"class":170}," {",[149,9262,746],{"class":170},[149,9264,9265],{"class":406},"resourceType",[149,9267,186],{"class":170},[149,9269,292],{"class":170},[149,9271,746],{"class":170},[149,9273,407],{"class":182},[149,9275,186],{"class":170},[149,9277,939],{"class":170},[149,9279,746],{"class":170},[149,9281,9282],{"class":406},"budget",[149,9284,186],{"class":170},[149,9286,292],{"class":170},[149,9288,9289],{"class":308}," 150",[149,9291,8587],{"class":170},[149,9293,9294,9296,9298,9300,9302,9304,9306,9308,9310,9312,9314,9316,9318,9320,9323],{"class":151,"line":240},[149,9295,9260],{"class":170},[149,9297,746],{"class":170},[149,9299,9265],{"class":406},[149,9301,186],{"class":170},[149,9303,292],{"class":170},[149,9305,746],{"class":170},[149,9307,8034],{"class":182},[149,9309,186],{"class":170},[149,9311,939],{"class":170},[149,9313,746],{"class":170},[149,9315,9282],{"class":406},[149,9317,186],{"class":170},[149,9319,292],{"class":170},[149,9321,9322],{"class":308}," 200",[149,9324,8587],{"class":170},[149,9326,9327,9329,9331,9333,9335,9337,9339,9342,9344,9346,9348,9350,9352,9354,9357],{"class":151,"line":252},[149,9328,9260],{"class":170},[149,9330,746],{"class":170},[149,9332,9265],{"class":406},[149,9334,186],{"class":170},[149,9336,292],{"class":170},[149,9338,746],{"class":170},[149,9340,9341],{"class":182},"total",[149,9343,186],{"class":170},[149,9345,939],{"class":170},[149,9347,746],{"class":170},[149,9349,9282],{"class":406},[149,9351,186],{"class":170},[149,9353,292],{"class":170},[149,9355,9356],{"class":308}," 500",[149,9358,9359],{"class":170}," }\n",[149,9361,9362],{"class":151,"line":359},[149,9363,9364],{"class":170}," ],\n",[149,9366,9367,9369,9372,9374,9376,9379,9381,9383,9385,9387,9389,9392,9394,9396,9398,9400,9402,9404,9407],{"class":151,"line":375},[149,9368,8066],{"class":170},[149,9370,9371],{"class":308},"resourceCounts",[149,9373,186],{"class":170},[149,9375,292],{"class":170},[149,9377,9378],{"class":170}," [{",[149,9380,746],{"class":170},[149,9382,9265],{"class":406},[149,9384,186],{"class":170},[149,9386,292],{"class":170},[149,9388,746],{"class":170},[149,9390,9391],{"class":182},"third-party",[149,9393,186],{"class":170},[149,9395,939],{"class":170},[149,9397,746],{"class":170},[149,9399,9282],{"class":406},[149,9401,186],{"class":170},[149,9403,292],{"class":170},[149,9405,9406],{"class":308}," 5",[149,9408,9409],{"class":170}," }]\n",[149,9411,9412],{"class":151,"line":381},[149,9413,9414],{"class":170}," }\n",[149,9416,9417],{"class":151,"line":29},[149,9418,9419],{"class":170}," ]\n",[149,9421,9422],{"class":151,"line":573},[149,9423,378],{"class":170},[149,9425,9426],{"class":151,"line":583},[149,9427,328],{"class":170},[98,9429,9431],{"id":9430},"case-study-e-commerce-performance-optimization","Case Study: E-commerce Performance Optimization",[102,9433,9434],{},"Let me share a real-world example of Core Web Vitals optimization for an e-commerce platform.",[113,9436,9438],{"id":9437},"initial-state","Initial State",[618,9440,9441,9444,9447,9450],{},[629,9442,9443],{},"LCP: 4.2s (Poor)",[629,9445,9446],{},"INP: 280ms (Needs Improvement)",[629,9448,9449],{},"CLS: 0.18 (Needs Improvement)",[629,9451,9452],{},"Mobile conversion rate: 1.8%",[113,9454,9456],{"id":9455},"optimization-steps","Optimization Steps",[7344,9458,9459,9465,9471,9477,9483],{},[629,9460,9461,9464],{},[3622,9462,9463],{},"Image Optimization",": Converted all product images to AVIF, implemented lazy loading",[629,9466,9467,9470],{},[3622,9468,9469],{},"Code Splitting",": Split vendor bundles, lazy-loaded non-critical components",[629,9472,9473,9476],{},[3622,9474,9475],{},"Edge Caching",": Implemented ISR for product pages, edge caching for static assets",[629,9478,9479,9482],{},[3622,9480,9481],{},"Font Optimization",": Switched to system fonts for body text, optimized heading fonts",[629,9484,9485,9488],{},[3622,9486,9487],{},"Third-Party Audit",": Removed unused analytics scripts, deferred ad loading",[113,9490,9492],{"id":9491},"results-after-3-months","Results After 3 Months",[618,9494,9495,9498,9501,9504,9507],{},[629,9496,9497],{},"LCP: 1.8s (Good) - 57% improvement",[629,9499,9500],{},"INP: 120ms (Good) - 57% improvement",[629,9502,9503],{},"CLS: 0.03 (Good) - 83% improvement",[629,9505,9506],{},"Mobile conversion rate: 2.6% - 44% increase",[629,9508,9509],{},"Organic traffic: +35%",[98,9511,9513],{"id":9512},"tools-and-resources","Tools and Resources",[102,9515,9516],{},"Essential tools for Core Web Vitals optimization:",[618,9518,9519,9525,9531,9537,9543],{},[629,9520,9521,9524],{},[3622,9522,9523],{},"PageSpeed Insights",": Lab and field data for any URL",[629,9526,9527,9530],{},[3622,9528,9529],{},"Chrome DevTools",": Performance panel, Lighthouse audits",[629,9532,9533,9536],{},[3622,9534,9535],{},"WebPageTest",": Advanced performance testing with custom configurations",[629,9538,9539,9542],{},[3622,9540,9541],{},"CrUX Dashboard",": Real user data in Google Data Studio",[629,9544,9545,9548],{},[3622,9546,9547],{},"SpeedCurve",": Continuous performance monitoring",[98,9550,3609],{"id":3608},[102,9552,9553],{},"Core Web Vitals are no longer optional—they're essential for search visibility, user experience, and business success. The optimization strategies outlined in this guide have proven effective across dozens of projects, delivering measurable improvements in performance metrics and business outcomes.",[102,9555,9556],{},"Start by measuring your current performance, identify the biggest opportunities, and implement optimizations incrementally. Focus on user-centric metrics rather than chasing perfect scores. Remember, performance optimization is an ongoing process, not a one-time fix.",[102,9558,9559],{},"The web is getting faster, and user expectations continue to rise. By mastering Core Web Vitals optimization, you'll deliver experiences that delight users and drive business results. The time to act is now—your users (and search rankings) will thank you.",[3627,9561,9562],{},"html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sqsOY, html code.shiki .sqsOY{--shiki-light:#8796B0;--shiki-default:#B2CCD6;--shiki-dark:#B2CCD6}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}",{"title":127,"searchDepth":159,"depth":159,"links":9564},[9565,9566,9571,9576,9580,9585,9586],{"id":7902,"depth":159,"text":7897},{"id":7911,"depth":159,"text":7912,"children":9567},[9568,9569,9570],{"id":7918,"depth":16,"text":7919},{"id":8110,"depth":16,"text":8111},{"id":8264,"depth":16,"text":8265},{"id":8459,"depth":159,"text":8460,"children":9572},[9573,9574,9575],{"id":8463,"depth":16,"text":8464},{"id":8643,"depth":16,"text":8644},{"id":8866,"depth":16,"text":8867},{"id":8982,"depth":159,"text":8983,"children":9577},[9578,9579],{"id":8986,"depth":16,"text":8987},{"id":9179,"depth":16,"text":9180},{"id":9430,"depth":159,"text":9431,"children":9581},[9582,9583,9584],{"id":9437,"depth":16,"text":9438},{"id":9455,"depth":16,"text":9456},{"id":9491,"depth":16,"text":9492},{"id":9512,"depth":159,"text":9513},{"id":3608,"depth":159,"text":3609},"2026-03-10","Master the latest Core Web Vitals metrics and learn proven optimization strategies to deliver lightning-fast web experiences that rank higher and convert better in 2026.",{"readingTime":3676},"/blog/20-core-web-vitals-2026-optimization",{"title":7897,"description":9588},"Web Performance","Comprehensive guide to web performance optimization and monitoring",{"src":9595,"mime":3683,"alt":9596,"width":3685,"height":3686},"/img/blog/20-core-web-vitals-2026-optimization/banner.svg","Core Web Vitals 2026 Optimization - Speed metrics dashboard with green checkmarks and performance graphs on blue-green gradient background","blog/20-core-web-vitals-2026-optimization",[7891,9599,9600,3691,7893],"Core Web Vitals","SEO","v-8qijFl74WKoVbUWXVZJt-dTLbphzXlyaiEHjs7wao",{"id":9603,"title":9604,"abstract":92,"author":93,"authorUrl":92,"body":9605,"date":10315,"dateUpdated":10315,"description":10316,"excerpt":92,"extension":3674,"featured":333,"headline":92,"image":92,"meta":10317,"navigation":333,"ogImage":92,"path":10319,"seo":10320,"series":10321,"seriesDescription":10322,"seriesOrder":152,"socialImage":10323,"stem":10326,"tags":10327,"__hash__":10332},"blog/blog/18-typescript-2026-new-features.md","TypeScript 2026: New Features Every Developer Should Know",{"type":95,"value":9606,"toc":10285},[9607,9610,9613,9616,9620,9623,9627,9630,9798,9801,9805,9808,9812,9815,9819,9826,9830,9833,9837,9840,9844,9847,9973,9977,9980,9984,9987,9991,9994,9998,10001,10003,10006,10010,10013,10017,10020,10024,10028,10031,10220,10224,10227,10231,10234,10236,10239,10271,10273,10276,10279,10282],[98,9608,9604],{"id":9609},"typescript-2026-new-features-every-developer-should-know",[102,9611,9612],{},"TypeScript continues to evolve at a remarkable pace, and 2026 has brought some of the most significant updates since the language's inception. As someone who's been using TypeScript since version 3.0, I'm genuinely excited about how these new features are transforming the way we write type-safe code.",[102,9614,9615],{},"In this comprehensive guide, we'll explore the game-changing TypeScript features released in 2026, understand their practical applications, and see how they can improve your development workflow. Whether you're building Nuxt applications, Node.js backends, or full-stack solutions, these features will become essential tools in your toolkit.",[98,9617,9619],{"id":9618},"enhanced-type-inference","Enhanced Type Inference",[102,9621,9622],{},"TypeScript 5.8's improved type inference engine is nothing short of revolutionary. The compiler now understands context better than ever, reducing the need for explicit type annotations while maintaining complete type safety.",[113,9624,9626],{"id":9625},"const-type-parameters","Const Type Parameters",[102,9628,9629],{},"One of the most requested features has finally arrived. Const type parameters allow you to preserve literal types in generic functions, eliminating a whole class of type errors that previously required workarounds.",[118,9631,9633],{"className":143,"code":9632,"language":145,"meta":127,"style":127},"// Before TypeScript 5.8\nfunction wrap(value: T): { value: T } {\n return { value }\n}\nconst result = wrap(\"hello\") // Type: { value: string }\n\n// With const type parameters\nfunction wrap(value: T): { value: T } {\n return { value }\n}\nconst result = wrap(\"hello\") // Type: { value: 'hello' }\n",[125,9634,9635,9640,9679,9689,9693,9718,9722,9727,9761,9771,9775],{"__ignoreMap":127},[149,9636,9637],{"class":151,"line":152},[149,9638,9639],{"class":155},"// Before TypeScript 5.8\n",[149,9641,9642,9644,9647,9649,9652,9655,9658,9660,9663,9666,9668,9671,9673,9675,9677],{"class":151,"line":159},[149,9643,6805],{"class":162},[149,9645,9646],{"class":504}," wrap",[149,9648,403],{"class":170},[149,9650,9651],{"class":279},"T",[149,9653,9654],{"class":170},">(",[149,9656,9657],{"class":790},"value",[149,9659,292],{"class":170},[149,9661,9662],{"class":279}," T",[149,9664,9665],{"class":170},"):",[149,9667,734],{"class":170},[149,9669,9670],{"class":406}," value",[149,9672,292],{"class":170},[149,9674,9662],{"class":279},[149,9676,740],{"class":170},[149,9678,283],{"class":170},[149,9680,9681,9683,9685,9687],{"class":151,"line":16},[149,9682,1284],{"class":339},[149,9684,734],{"class":170},[149,9686,9670],{"class":166},[149,9688,9359],{"class":170},[149,9690,9691],{"class":151,"line":192},[149,9692,328],{"class":170},[149,9694,9695,9697,9700,9702,9704,9706,9708,9711,9713,9715],{"class":151,"line":204},[149,9696,163],{"class":162},[149,9698,9699],{"class":166}," result ",[149,9701,171],{"class":170},[149,9703,9646],{"class":504},[149,9705,858],{"class":166},[149,9707,186],{"class":170},[149,9709,9710],{"class":182},"hello",[149,9712,186],{"class":170},[149,9714,2137],{"class":166},[149,9716,9717],{"class":155},"// Type: { value: string }\n",[149,9719,9720],{"class":151,"line":216},[149,9721,334],{"emptyLinePlaceholder":333},[149,9723,9724],{"class":151,"line":228},[149,9725,9726],{"class":155},"// With const type parameters\n",[149,9728,9729,9731,9733,9735,9737,9739,9741,9743,9745,9747,9749,9751,9753,9755,9757,9759],{"class":151,"line":240},[149,9730,6805],{"class":162},[149,9732,9646],{"class":504},[149,9734,403],{"class":170},[149,9736,163],{"class":162},[149,9738,9662],{"class":279},[149,9740,9654],{"class":170},[149,9742,9657],{"class":790},[149,9744,292],{"class":170},[149,9746,9662],{"class":279},[149,9748,9665],{"class":170},[149,9750,734],{"class":170},[149,9752,9670],{"class":406},[149,9754,292],{"class":170},[149,9756,9662],{"class":279},[149,9758,740],{"class":170},[149,9760,283],{"class":170},[149,9762,9763,9765,9767,9769],{"class":151,"line":252},[149,9764,1284],{"class":339},[149,9766,734],{"class":170},[149,9768,9670],{"class":166},[149,9770,9359],{"class":170},[149,9772,9773],{"class":151,"line":359},[149,9774,328],{"class":170},[149,9776,9777,9779,9781,9783,9785,9787,9789,9791,9793,9795],{"class":151,"line":375},[149,9778,163],{"class":162},[149,9780,9699],{"class":166},[149,9782,171],{"class":170},[149,9784,9646],{"class":504},[149,9786,858],{"class":166},[149,9788,186],{"class":170},[149,9790,9710],{"class":182},[149,9792,186],{"class":170},[149,9794,2137],{"class":166},[149,9796,9797],{"class":155},"// Type: { value: 'hello' }\n",[102,9799,9800],{},"This feature is particularly valuable when working with configuration objects, API responses, and any scenario where preserving literal types provides better type safety.",[113,9802,9804],{"id":9803},"improved-control-flow-analysis","Improved Control Flow Analysis",[102,9806,9807],{},"TypeScript 2026 introduces enhanced control flow analysis that tracks variable types through more complex code paths. This means fewer type assertions and better autocomplete in your IDE.",[98,9809,9811],{"id":9810},"module-resolution-improvements","Module Resolution Improvements",[102,9813,9814],{},"The new module resolution strategy, called \"bundler,\" is now the recommended approach for modern JavaScript projects. It aligns TypeScript's behavior with actual bundlers like Vite, Rollup, and Webpack, eliminating frustrating discrepancies between development and production builds.",[113,9816,9818],{"id":9817},"packagejson-exports-support","Package.json Exports Support",[102,9820,9821,9822,9825],{},"TypeScript now fully respects the ",[125,9823,9824],{},"exports"," field in package.json, providing better support for modern ESM packages and reducing issues with dual CJS/ESM packages.",[113,9827,9829],{"id":9828},"path-mapping-enhancements","Path Mapping Enhancements",[102,9831,9832],{},"Path aliases in tsconfig.json are now resolved more efficiently, with better support for monorepo setups and complex project structures. This is particularly beneficial for Nuxt projects with custom directory structures.",[98,9834,9836],{"id":9835},"template-literal-type-improvements","Template Literal Type Improvements",[102,9838,9839],{},"Template literal types have been supercharged in 2026, enabling more sophisticated type-level string manipulation. This opens up new possibilities for type-safe APIs, routing systems, and DSL implementations.",[113,9841,9843],{"id":9842},"string-manipulation-utilities","String Manipulation Utilities",[102,9845,9846],{},"New built-in utility types make it easier to work with string types:",[118,9848,9850],{"className":143,"code":9849,"language":145,"meta":127,"style":127},"type Route = `/api/${string}/users/${number}`\ntype ExtractId = T extends `/api/${string}/users/${infer Id extends number}`\n ? Id\n : never\ntype UserId = ExtractId<`/api/v1/users/123`> // Type: 123\n",[125,9851,9852,9885,9932,9940,9948],{"__ignoreMap":127},[149,9853,9854,9857,9860,9862,9865,9868,9870,9872,9874,9877,9879,9882],{"class":151,"line":152},[149,9855,9856],{"class":162},"type",[149,9858,9859],{"class":279}," Route",[149,9861,1261],{"class":170},[149,9863,9864],{"class":170}," `",[149,9866,9867],{"class":182},"/api/",[149,9869,6865],{"class":170},[149,9871,1163],{"class":279},[149,9873,1044],{"class":170},[149,9875,9876],{"class":182},"/users/",[149,9878,6865],{"class":170},[149,9880,9881],{"class":279},"number",[149,9883,9884],{"class":170},"}`\n",[149,9886,9887,9889,9892,9894,9896,9898,9900,9902,9905,9907,9909,9911,9913,9915,9917,9919,9922,9925,9927,9930],{"class":151,"line":159},[149,9888,9856],{"class":162},[149,9890,9891],{"class":279}," ExtractId",[149,9893,403],{"class":170},[149,9895,9651],{"class":279},[149,9897,513],{"class":170},[149,9899,1261],{"class":170},[149,9901,9662],{"class":279},[149,9903,9904],{"class":162}," extends",[149,9906,9864],{"class":170},[149,9908,9867],{"class":182},[149,9910,6865],{"class":170},[149,9912,1163],{"class":279},[149,9914,1044],{"class":170},[149,9916,9876],{"class":182},[149,9918,6865],{"class":170},[149,9920,9921],{"class":170},"infer",[149,9923,9924],{"class":279}," Id",[149,9926,9904],{"class":170},[149,9928,9929],{"class":279}," number",[149,9931,9884],{"class":170},[149,9933,9934,9937],{"class":151,"line":16},[149,9935,9936],{"class":170}," ?",[149,9938,9939],{"class":279}," Id\n",[149,9941,9942,9945],{"class":151,"line":192},[149,9943,9944],{"class":170}," :",[149,9946,9947],{"class":279}," never\n",[149,9949,9950,9952,9955,9957,9959,9961,9963,9966,9968,9970],{"class":151,"line":204},[149,9951,9856],{"class":162},[149,9953,9954],{"class":279}," UserId",[149,9956,1261],{"class":170},[149,9958,9891],{"class":279},[149,9960,403],{"class":170},[149,9962,6859],{"class":170},[149,9964,9965],{"class":182},"/api/v1/users/123",[149,9967,6859],{"class":170},[149,9969,513],{"class":170},[149,9971,9972],{"class":155}," // Type: 123\n",[113,9974,9976],{"id":9975},"enhanced-inference-in-template-literals","Enhanced Inference in Template Literals",[102,9978,9979],{},"The compiler now better infers types from template literal patterns, making it easier to work with dynamic strings while maintaining type safety.",[98,9981,9983],{"id":9982},"decorator-standardization","Decorator Standardization",[102,9985,9986],{},"After years of experimental support, decorators are now fully standardized in TypeScript 2026, following the TC39 Stage 3 proposal. This brings stability to metadata-driven programming patterns commonly used in frameworks like NestJS and Angular.",[113,9988,9990],{"id":9989},"class-decorators","Class Decorators",[102,9992,9993],{},"Class decorators now work consistently across all JavaScript runtimes, enabling powerful patterns for dependency injection, logging, and validation.",[113,9995,9997],{"id":9996},"method-and-property-decorators","Method and Property Decorators",[102,9999,10000],{},"Method and property decorators provide fine-grained control over class behavior, making it easier to implement cross-cutting concerns like authentication, caching, and rate limiting.",[98,10002,7274],{"id":7273},[102,10004,10005],{},"TypeScript 2026 isn't just about new features—it's also significantly faster. The compiler team has focused on reducing build times, especially for large projects.",[113,10007,10009],{"id":10008},"incremental-compilation-enhancements","Incremental Compilation Enhancements",[102,10011,10012],{},"Incremental compilation is now up to 40% faster for large codebases, thanks to improved caching strategies and more efficient dependency tracking.",[113,10014,10016],{"id":10015},"project-references-optimization","Project References Optimization",[102,10018,10019],{},"Project references, essential for monorepo setups, now resolve dependencies more efficiently, reducing overall build times in complex workspace configurations.",[98,10021,10023],{"id":10022},"practical-applications","Practical Applications",[113,10025,10027],{"id":10026},"building-type-safe-apis","Building Type-Safe APIs",[102,10029,10030],{},"The new TypeScript features make it easier than ever to build type-safe APIs. Combined with tools like Zod for runtime validation, you can ensure type safety from database to frontend.",[118,10032,10034],{"className":143,"code":10033,"language":145,"meta":127,"style":127},"// Type-safe API response\ntype ApiResponse = {\n data: T\n meta: {\n timestamp: string\n version: \"v1\" | \"v2\"\n }\n}\n\nasync function fetchUser(\n id: number,\n): Promise> {\n const response = await fetch(`/api/users/${id}`)\n return response.json()\n}\n",[125,10035,10036,10041,10058,10068,10077,10086,10110,10114,10118,10122,10134,10145,10178,10204,10216],{"__ignoreMap":127},[149,10037,10038],{"class":151,"line":152},[149,10039,10040],{"class":155},"// Type-safe API response\n",[149,10042,10043,10045,10048,10050,10052,10054,10056],{"class":151,"line":159},[149,10044,9856],{"class":162},[149,10046,10047],{"class":279}," ApiResponse",[149,10049,403],{"class":170},[149,10051,9651],{"class":279},[149,10053,513],{"class":170},[149,10055,1261],{"class":170},[149,10057,283],{"class":170},[149,10059,10060,10063,10065],{"class":151,"line":16},[149,10061,10062],{"class":406}," data",[149,10064,292],{"class":170},[149,10066,10067],{"class":279}," T\n",[149,10069,10070,10073,10075],{"class":151,"line":192},[149,10071,10072],{"class":406}," meta",[149,10074,292],{"class":170},[149,10076,283],{"class":170},[149,10078,10079,10082,10084],{"class":151,"line":204},[149,10080,10081],{"class":406}," timestamp",[149,10083,292],{"class":170},[149,10085,450],{"class":279},[149,10087,10088,10091,10093,10095,10098,10100,10103,10105,10108],{"class":151,"line":216},[149,10089,10090],{"class":406}," version",[149,10092,292],{"class":170},[149,10094,746],{"class":170},[149,10096,10097],{"class":182},"v1",[149,10099,186],{"class":170},[149,10101,10102],{"class":170}," |",[149,10104,746],{"class":170},[149,10106,10107],{"class":182},"v2",[149,10109,752],{"class":170},[149,10111,10112],{"class":151,"line":228},[149,10113,378],{"class":170},[149,10115,10116],{"class":151,"line":240},[149,10117,328],{"class":170},[149,10119,10120],{"class":151,"line":252},[149,10121,334],{"emptyLinePlaceholder":333},[149,10123,10124,10126,10129,10131],{"class":151,"line":359},[149,10125,6834],{"class":162},[149,10127,10128],{"class":162}," function",[149,10130,6824],{"class":504},[149,10132,10133],{"class":170},"(\n",[149,10135,10136,10139,10141,10143],{"class":151,"line":375},[149,10137,10138],{"class":790}," id",[149,10140,292],{"class":170},[149,10142,9929],{"class":279},[149,10144,189],{"class":170},[149,10146,10147,10149,10152,10154,10157,10159,10161,10163,10165,10167,10169,10171,10173,10176],{"class":151,"line":381},[149,10148,9665],{"class":170},[149,10150,10151],{"class":279}," Promise",[149,10153,403],{"class":170},[149,10155,10156],{"class":279},"ApiResponse",[149,10158,463],{"class":170},[149,10160,466],{"class":406},[149,10162,292],{"class":170},[149,10164,9929],{"class":279},[149,10166,474],{"class":170},[149,10168,477],{"class":406},[149,10170,292],{"class":170},[149,10172,471],{"class":279},[149,10174,10175],{"class":170}," }>>",[149,10177,283],{"class":170},[149,10179,10180,10182,10184,10186,10188,10190,10192,10194,10196,10198,10200,10202],{"class":151,"line":29},[149,10181,1255],{"class":162},[149,10183,6847],{"class":166},[149,10185,1261],{"class":170},[149,10187,1264],{"class":339},[149,10189,6854],{"class":504},[149,10191,858],{"class":406},[149,10193,6859],{"class":170},[149,10195,6862],{"class":182},[149,10197,6865],{"class":170},[149,10199,815],{"class":166},[149,10201,6870],{"class":170},[149,10203,1211],{"class":406},[149,10205,10206,10208,10210,10212,10214],{"class":151,"line":573},[149,10207,1284],{"class":339},[149,10209,6847],{"class":166},[149,10211,276],{"class":170},[149,10213,1292],{"class":504},[149,10215,516],{"class":406},[149,10217,10218],{"class":151,"line":583},[149,10219,328],{"class":170},[113,10221,10223],{"id":10222},"enhanced-nuxt-development","Enhanced Nuxt Development",[102,10225,10226],{},"Nuxt 4 developers benefit significantly from TypeScript 2026's improvements. Better type inference means less boilerplate in composables and pages, while improved module resolution simplifies working with Nuxt's auto-imports.",[113,10228,10230],{"id":10229},"full-stack-type-safety","Full-Stack Type Safety",[102,10232,10233],{},"With TypeScript 2026, sharing types between frontend and backend becomes even more seamless. The improved module resolution and type inference make it practical to maintain a single source of truth for your data models.",[98,10235,7335],{"id":7334},[102,10237,10238],{},"If you're upgrading from an older TypeScript version, here's a practical migration strategy:",[7344,10240,10241,10247,10253,10259,10265],{},[629,10242,10243,10246],{},[3622,10244,10245],{},"Update TypeScript",": Start with the latest version and fix any breaking changes",[629,10248,10249,10252],{},[3622,10250,10251],{},"Enable Strict Mode",": If you haven't already, enable all strict type-checking options",[629,10254,10255,10258],{},[3622,10256,10257],{},"Adopt New Features Gradually",": Start with const type parameters and enhanced inference",[629,10260,10261,10264],{},[3622,10262,10263],{},"Update Tooling",": Ensure your build tools and IDE extensions support TypeScript 2026",[629,10266,10267,10270],{},[3622,10268,10269],{},"Test Thoroughly",": Run your full test suite to catch any type-related issues",[98,10272,3609],{"id":3608},[102,10274,10275],{},"TypeScript 2026 represents a major leap forward in type safety, developer experience, and performance. The new features—particularly const type parameters, improved module resolution, and enhanced template literal types—solve real-world problems that developers face daily.",[102,10277,10278],{},"As the TypeScript ecosystem continues to mature, staying current with these features becomes essential for writing maintainable, type-safe code. Whether you're building a small project or a large enterprise application, TypeScript 2026 provides the tools you need to catch errors early and ship with confidence.",[102,10280,10281],{},"Start experimenting with these features today, and you'll quickly discover how they can transform your development workflow. The future of type-safe JavaScript is here, and it's more powerful than ever.",[3627,10283,10284],{},"html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":127,"searchDepth":159,"depth":159,"links":10286},[10287,10288,10292,10296,10300,10304,10308,10313,10314],{"id":9609,"depth":159,"text":9604},{"id":9618,"depth":159,"text":9619,"children":10289},[10290,10291],{"id":9625,"depth":16,"text":9626},{"id":9803,"depth":16,"text":9804},{"id":9810,"depth":159,"text":9811,"children":10293},[10294,10295],{"id":9817,"depth":16,"text":9818},{"id":9828,"depth":16,"text":9829},{"id":9835,"depth":159,"text":9836,"children":10297},[10298,10299],{"id":9842,"depth":16,"text":9843},{"id":9975,"depth":16,"text":9976},{"id":9982,"depth":159,"text":9983,"children":10301},[10302,10303],{"id":9989,"depth":16,"text":9990},{"id":9996,"depth":16,"text":9997},{"id":7273,"depth":159,"text":7274,"children":10305},[10306,10307],{"id":10008,"depth":16,"text":10009},{"id":10015,"depth":16,"text":10016},{"id":10022,"depth":159,"text":10023,"children":10309},[10310,10311,10312],{"id":10026,"depth":16,"text":10027},{"id":10222,"depth":16,"text":10223},{"id":10229,"depth":16,"text":10230},{"id":7334,"depth":159,"text":7335},{"id":3608,"depth":159,"text":3609},"2026-03-04","Discover the groundbreaking TypeScript features released in 2026 that are changing how we write type-safe code, from enhanced inference to revolutionary module resolution.",{"readingTime":10318},"9 min read","/blog/18-typescript-2026-new-features",{"title":9604,"description":10316},"TypeScript Mastery","Deep dive into TypeScript patterns and best practices",{"src":10324,"mime":3683,"alt":10325,"width":3685,"height":3686},"/img/blog/18-typescript-2026-new-features/banner.svg","TypeScript 2026 New Features - Blue TypeScript logo with futuristic code symbols and type annotations on dark gradient background","blog/18-typescript-2026-new-features",[10328,3692,10329,10330,10331],"TypeScript","Type Safety","Developer Tools","Programming","lVbd1y-qOowjY4JFvMrjN2NpGzo2eWc-_ykXGeFQyrs",["Reactive",10334],{"$scolor-mode":10335,"$snuxt-seo-utils:routeRules":10338,"$stoasts":10339,"$ssite-config":10340},{"preference":10336,"value":10336,"unknown":333,"forced":10337},"system",false,{"head":-1,"seoMeta":-1},[],{"_priority":10341,"defaultLocale":10344,"description":10345,"env":10346,"indexable":333,"name":10347,"url":10348},{"env":10342,"indexable":10343,"url":10343,"name":10343,"description":10343,"defaultLocale":10343},-15,-3,"en","Senior Software Engineer specializing in modern web technologies. Crafting scalable web applications and browser extensions for startups and founders.","production","Muhammad Ubaid Raza - Full Stack Engineer","https://mubaidr.js.org",["Set"],["ShallowReactive",10351],{"blog-post-/blog/33-full-stack-development-2026-roadmap":-1,"profile-data":-1,"series-Developer Career":-1,"related-posts-/blog/33-full-stack-development-2026-roadmap":-1}]