[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"summary-9166f90169a38f6e-5-layer-mvvm-keeps-swiftui-apps-maintainable-summary":3,"summaries-facets-categories":146,"summary-related-9166f90169a38f6e-5-layer-mvvm-keeps-swiftui-apps-maintainable-summary":3715},{"id":4,"title":5,"ai":6,"body":13,"categories":111,"created_at":113,"date_modified":113,"description":105,"extension":114,"faq":113,"featured":115,"kicker_label":113,"meta":116,"navigation":130,"path":131,"published_at":113,"question":113,"scraped_at":132,"seo":133,"sitemap":134,"source_id":135,"source_name":136,"source_type":137,"source_url":138,"stem":139,"tags":140,"thumbnail_url":113,"tldr":143,"tweet":113,"unknown_tags":144,"__hash__":145},"summaries\u002Fsummaries\u002F9166f90169a38f6e-5-layer-mvvm-keeps-swiftui-apps-maintainable-summary.md","5-Layer MVVM Keeps SwiftUI Apps Maintainable",{"provider":7,"model":8,"input_tokens":9,"output_tokens":10,"processing_time_ms":11,"cost_usd":12},"openrouter","x-ai\u002Fgrok-4.1-fast",5306,1690,8817,0.00139935,{"type":14,"value":15,"toc":104},"minimark",[16,21,58,61,65,90,93,97],[17,18,20],"h2",{"id":19},"layered-mvvm-separates-concerns-for-scalability","Layered MVVM Separates Concerns for Scalability",[22,23,24,25,29,30,33,34,37,38,41,42,45,46,49,50,53,54,57],"p",{},"Build SwiftUI apps using a 'full layer cake' MVVM with five distinct layers to prevent Views from handling data or logic, resulting in boring, maintainable code. Models define pure data structures like ",[26,27,28],"code",{},"Task"," (with title, notes, priority, category, due date, completion status), ",[26,31,32],{},"SubTask",", ",[26,35,36],{},"TaskPriority"," (Low\u002FMedium\u002FHigh), and ",[26,39,40],{},"TaskCategory","—no UI or persistence code. Repositories abstract storage via protocols like ",[26,43,44],{},"TaskRepositoryProtocol","; ",[26,47,48],{},"TaskRepository"," uses SwiftData's ",[26,51,52],{},"ModelContext"," but hides it from callers. Services handle cross-cutting utilities: date checks (e.g., 'is this today?'), greeting generation, formatting, settings, and notifications, avoiding bloated ViewModels. ViewModels (",[26,55,56],{},"@Observable",") manage screen state, fetch via repositories, process with services, and expose UI-ready data\u002Factions. Views render only, calling ViewModel methods without business rules.",[22,59,60],{},"This structure scales by keeping each layer single-responsibility: Views stay declarative, ViewModels testable, and data\u002Fpersistence swappable.",[17,62,64],{"id":63},"dependency-injection-and-data-flow-enable-testing","Dependency Injection and Data Flow Enable Testing",[22,66,67,68,71,72,75,76,79,80,82,83,85,86,89],{},"Inject repositories and services at app launch via ",[26,69,70],{},"@Environment"," or root views—ViewModels never instantiate dependencies. Data flows unidirectionally: user actions trigger ViewModel methods (e.g., ",[26,73,74],{},"toggleComplete(task)","), which call ",[26,77,78],{},"repository.toggleComplete(task)"," updating ",[26,81,52],{},", then refresh observable state for Views. Protocols like ",[26,84,44],{}," allow faking for unit tests: swap ",[26,87,88],{},"FakeTaskRepository"," to test ViewModels without SwiftData, UI, or real persistence, verifying state changes and actions in isolation.",[22,91,92],{},"Trade-off: Adds upfront boilerplate but prevents God objects and eases refactoring as apps grow.",[17,94,96],{"id":95},"demo-app-features-validate-architecture","Demo App Features Validate Architecture",[22,98,99,100,103],{},"The todo app showcases layers across screens. Today view displays due-today tasks with progress ring and personalized greeting (via Services). All Tasks lists with filters (All\u002FActive\u002FCompleted, by category) loaded by ViewModel. Add Task form sets priority\u002Fcategory\u002Fdue date\u002Ftime\u002Fsubtasks. Search queries tasks by name, showing matches with details. Settings manages profile, default priority, theme (System\u002FLight\u002FDark), notifications—all persisted via repository. UI uses Liquid Glass effects for polish. Run by opening ",[26,101,102],{},"IOSMvvCApp.xcodeproj"," in Xcode; MIT licensed.",{"title":105,"searchDepth":106,"depth":106,"links":107},"",2,[108,109,110],{"id":19,"depth":106,"text":20},{"id":63,"depth":106,"text":64},{"id":95,"depth":106,"text":96},[112],"Software Engineering",null,"md",false,{"content_references":117,"triage":125},[118],{"type":119,"title":120,"author":121,"publisher":122,"url":123,"context":124},"other","MVVM in SwiftUI: Build an iOS App That Stays Organized as It Grows","sanjaynelagadde1992","Medium","https:\u002F\u002Fmedium.com\u002F@sanjaynelagadde1992\u002Fmvvm-in-swiftui-build-an-ios-app-that-stays-organized-as-it-grows-a16e64d9eb3a","recommended",{"relevance":126,"novelty":127,"quality":126,"actionability":126,"composite":128,"reasoning":129},4,3,3.8,"Category: Design & Frontend. The article provides a structured approach to implementing MVVM in SwiftUI, addressing the audience's need for maintainable code and scalability, which is a common pain point for developers. It offers specific examples of how to structure code and implement dependency injection, making it actionable for developers looking to improve their app architecture.",true,"\u002Fsummaries\u002F9166f90169a38f6e-5-layer-mvvm-keeps-swiftui-apps-maintainable-summary","2026-04-16 02:56:11",{"title":5,"description":105},{"loc":131},"9166f90169a38f6e","__oneoff__","article","https:\u002F\u002Fgithub.com\u002Fsanjaynela\u002FIOSMvvCApp","summaries\u002F9166f90169a38f6e-5-layer-mvvm-keeps-swiftui-apps-maintainable-summary",[141,142],"coding","frontend","Implement MVVM as five layers—Models, Repositories, Services, ViewModels, Views—to isolate UI from data, logic, and persistence, enabling dependency injection and isolated ViewModel testing.",[],"P2RjZndIh2s04qnEiZcXtKRJ8CO0tytKe3mwjvwk198",[147,150,153,156,159,162,164,166,168,170,172,174,177,179,181,183,185,187,189,191,193,195,198,201,203,205,207,209,211,214,216,218,220,222,224,226,228,230,232,234,236,238,240,242,244,246,248,250,252,254,256,258,260,262,264,266,268,270,272,274,276,278,280,282,284,286,288,290,292,294,296,298,300,302,304,306,308,310,312,314,316,318,320,322,324,326,328,330,332,334,336,338,340,342,344,346,348,350,352,354,356,358,360,362,364,366,368,370,372,374,376,378,380,382,384,386,388,390,392,394,396,398,400,402,404,406,408,410,412,414,416,418,420,422,424,426,428,430,432,434,436,438,440,442,444,446,448,450,452,454,456,458,460,462,464,466,469,471,473,475,477,479,481,483,485,487,489,491,493,495,497,499,501,503,505,507,509,511,513,515,517,519,521,523,525,527,529,531,533,535,537,539,541,543,545,547,549,551,553,555,557,559,561,563,565,567,569,571,573,575,577,579,581,583,585,587,589,591,593,595,597,599,601,603,605,607,609,611,613,615,617,619,621,623,625,627,629,631,633,635,637,639,641,643,645,647,649,651,653,655,657,659,661,663,665,667,669,671,673,675,677,679,681,683,685,687,689,691,693,695,697,699,701,703,705,707,709,711,713,715,717,719,721,723,725,727,729,731,733,735,737,739,741,743,745,747,749,751,753,755,757,759,761,763,765,767,769,771,773,775,777,779,781,783,785,787,789,791,793,795,797,799,801,803,805,807,809,811,813,815,817,819,821,823,825,827,829,831,833,835,837,839,841,843,845,847,849,851,853,855,857,859,861,863,865,867,869,871,873,875,877,879,881,883,885,887,889,891,893,895,897,899,901,903,905,907,909,911,913,915,917,919,921,923,925,927,929,931,933,935,937,939,941,943,945,947,949,951,953,955,957,959,961,963,965,967,969,971,973,975,977,979,981,983,985,987,989,991,993,995,997,999,1001,1003,1005,1007,1009,1011,1013,1015,1017,1019,1021,1023,1025,1027,1029,1031,1033,1035,1037,1039,1041,1043,1045,1047,1049,1051,1053,1055,1057,1059,1061,1063,1065,1067,1069,1071,1073,1075,1077,1079,1081,1083,1085,1087,1089,1091,1093,1095,1097,1099,1101,1103,1105,1107,1109,1111,1113,1115,1117,1119,1121,1123,1125,1127,1129,1131,1133,1135,1137,1139,1141,1143,1145,1147,1149,1151,1153,1155,1157,1159,1161,1163,1165,1167,1169,1171,1173,1175,1177,1179,1181,1183,1185,1187,1189,1191,1193,1195,1197,1199,1201,1203,1205,1207,1209,1211,1213,1215,1217,1219,1221,1223,1225,1227,1229,1231,1233,1235,1237,1239,1241,1243,1245,1247,1249,1251,1253,1255,1257,1259,1261,1263,1265,1267,1269,1271,1273,1275,1277,1279,1281,1283,1285,1287,1289,1291,1293,1295,1297,1299,1301,1303,1305,1307,1309,1311,1313,1315,1317,1319,1321,1323,1325,1327,1329,1331,1333,1335,1337,1339,1341,1343,1345,1347,1349,1351,1353,1355,1357,1359,1361,1363,1365,1367,1369,1371,1373,1375,1377,1379,1381,1383,1385,1387,1389,1391,1393,1395,1397,1399,1401,1403,1405,1407,1409,1411,1413,1415,1417,1419,1421,1423,1425,1427,1429,1431,1433,1435,1437,1439,1441,1443,1445,1447,1449,1451,1453,1455,1457,1459,1461,1463,1465,1467,1469,1471,1473,1475,1477,1479,1481,1483,1485,1487,1489,1491,1493,1495,1497,1499,1501,1503,1505,1507,1509,1511,1513,1515,1517,1519,1521,1523,1525,1527,1529,1531,1533,1535,1537,1539,1541,1543,1545,1547,1549,1551,1553,1555,1557,1559,1561,1563,1565,1567,1569,1571,1573,1575,1577,1579,1581,1583,1585,1587,1589,1591,1593,1595,1597,1599,1601,1603,1605,1607,1609,1611,1613,1615,1617,1619,1621,1623,1625,1627,1629,1631,1633,1635,1637,1639,1641,1643,1645,1647,1649,1651,1653,1655,1657,1659,1661,1663,1665,1667,1669,1671,1673,1675,1677,1679,1681,1683,1685,1687,1689,1691,1693,1695,1697,1699,1701,1703,1705,1707,1709,1711,1713,1715,1717,1719,1721,1723,1725,1727,1729,1731,1733,1735,1737,1739,1741,1743,1745,1747,1749,1751,1753,1755,1757,1759,1761,1763,1765,1767,1769,1771,1773,1775,1777,1779,1781,1783,1785,1787,1789,1791,1793,1795,1797,1799,1801,1803,1805,1807,1809,1811,1813,1815,1817,1819,1821,1823,1825,1827,1829,1831,1833,1835,1837,1839,1841,1843,1845,1847,1849,1851,1853,1855,1857,1859,1861,1863,1865,1867,1869,1871,1873,1875,1877,1879,1881,1883,1885,1887,1889,1891,1893,1895,1897,1899,1901,1903,1905,1907,1909,1911,1913,1915,1917,1919,1921,1923,1925,1927,1929,1931,1933,1935,1937,1939,1941,1943,1945,1947,1949,1951,1953,1955,1957,1959,1961,1963,1965,1967,1969,1971,1973,1975,1977,1979,1981,1983,1985,1987,1989,1991,1993,1995,1997,1999,2001,2003,2005,2007,2009,2011,2013,2015,2017,2019,2021,2023,2025,2027,2029,2031,2033,2035,2037,2039,2041,2043,2045,2047,2049,2051,2053,2055,2057,2059,2061,2063,2065,2067,2069,2071,2073,2075,2077,2079,2081,2083,2085,2087,2089,2091,2093,2095,2097,2099,2101,2103,2105,2107,2109,2111,2113,2115,2117,2119,2121,2123,2125,2127,2129,2131,2133,2135,2137,2139,2141,2143,2145,2147,2149,2151,2153,2155,2157,2159,2161,2163,2165,2167,2169,2171,2173,2175,2177,2179,2181,2183,2185,2187,2189,2191,2193,2195,2197,2199,2201,2203,2205,2207,2209,2211,2213,2215,2217,2219,2221,2223,2225,2227,2229,2231,2233,2235,2237,2239,2241,2243,2245,2247,2249,2251,2253,2255,2257,2259,2261,2263,2265,2267,2269,2271,2273,2275,2277,2279,2281,2283,2285,2287,2289,2291,2293,2295,2297,2299,2301,2303,2305,2307,2309,2311,2313,2315,2317,2319,2321,2323,2325,2327,2329,2331,2333,2335,2337,2339,2341,2343,2345,2347,2349,2351,2353,2355,2357,2359,2361,2363,2365,2367,2369,2371,2373,2375,2377,2379,2381,2383,2385,2387,2389,2391,2393,2395,2397,2399,2401,2403,2405,2407,2409,2411,2413,2415,2417,2419,2421,2423,2425,2427,2429,2431,2433,2435,2437,2439,2441,2443,2445,2447,2449,2451,2453,2455,2457,2459,2461,2463,2465,2467,2469,2471,2473,2475,2477,2479,2481,2483,2485,2487,2489,2491,2493,2495,2497,2499,2501,2503,2505,2507,2509,2511,2513,2515,2517,2519,2521,2523,2525,2527,2529,2531,2533,2535,2537,2539,2541,2543,2545,2547,2549,2551,2553,2555,2557,2559,2561,2563,2565,2567,2569,2571,2573,2575,2577,2579,2581,2583,2585,2587,2589,2591,2593,2595,2597,2599,2601,2603,2605,2607,2609,2611,2613,2615,2617,2619,2621,2623,2625,2627,2629,2631,2633,2635,2637,2639,2641,2643,2645,2647,2649,2651,2653,2655,2657,2659,2661,2663,2665,2667,2669,2671,2673,2675,2677,2679,2681,2683,2685,2687,2689,2691,2693,2695,2697,2699,2701,2703,2705,2707,2709,2711,2713,2715,2717,2719,2721,2723,2725,2727,2729,2731,2733,2735,2737,2739,2741,2743,2745,2747,2749,2751,2753,2755,2757,2759,2761,2763,2765,2767,2769,2771,2773,2775,2777,2779,2781,2783,2785,2787,2789,2791,2793,2795,2797,2799,2801,2803,2805,2807,2809,2811,2813,2815,2817,2819,2821,2823,2825,2827,2829,2831,2833,2835,2837,2839,2841,2843,2845,2847,2849,2851,2853,2855,2857,2859,2861,2863,2865,2867,2869,2871,2873,2875,2877,2879,2881,2883,2885,2887,2889,2891,2893,2895,2897,2899,2901,2903,2905,2907,2909,2911,2913,2915,2917,2919,2921,2923,2925,2927,2929,2931,2933,2935,2937,2939,2941,2943,2945,2947,2949,2951,2953,2955,2957,2959,2961,2963,2965,2967,2969,2971,2973,2975,2977,2979,2981,2983,2985,2987,2989,2991,2993,2995,2997,2999,3001,3003,3005,3007,3009,3011,3013,3015,3017,3019,3021,3023,3025,3027,3029,3031,3033,3035,3037,3039,3041,3043,3045,3047,3049,3051,3053,3055,3057,3059,3061,3063,3065,3067,3069,3071,3073,3075,3077,3079,3081,3083,3085,3087,3089,3091,3093,3095,3097,3099,3101,3103,3105,3107,3109,3111,3113,3115,3117,3119,3121,3123,3125,3127,3129,3131,3133,3135,3137,3139,3141,3143,3145,3147,3149,3151,3153,3155,3157,3159,3161,3163,3165,3167,3169,3171,3173,3175,3177,3179,3181,3183,3185,3187,3189,3191,3193,3195,3197,3199,3201,3203,3205,3207,3209,3211,3213,3215,3217,3219,3221,3223,3225,3227,3229,3231,3233,3235,3237,3239,3241,3243,3245,3247,3249,3251,3253,3255,3257,3259,3261,3263,3265,3267,3269,3271,3273,3275,3277,3279,3281,3283,3285,3287,3289,3291,3293,3295,3297,3299,3301,3303,3305,3307,3309,3311,3313,3315,3317,3319,3321,3323,3325,3327,3329,3331,3333,3335,3337,3339,3341,3343,3345,3347,3349,3351,3353,3355,3357,3359,3361,3363,3365,3367,3369,3371,3373,3375,3377,3379,3381,3383,3385,3387,3389,3391,3393,3395,3397,3399,3401,3403,3405,3407,3409,3411,3413,3415,3417,3419,3421,3423,3425,3427,3429,3431,3433,3435,3437,3439,3441,3443,3445,3447,3449,3451,3453,3455,3457,3459,3461,3463,3465,3467,3469,3471,3473,3475,3477,3479,3481,3483,3485,3487,3489,3491,3493,3495,3497,3499,3501,3503,3505,3507,3509,3511,3513,3515,3517,3519,3521,3523,3525,3527,3529,3531,3533,3535,3537,3539,3541,3543,3545,3547,3549,3551,3553,3555,3557,3559,3561,3563,3565,3567,3569,3571,3573,3575,3577,3579,3581,3583,3585,3587,3589,3591,3593,3595,3597,3599,3601,3603,3605,3607,3609,3611,3613,3615,3617,3619,3621,3623,3625,3627,3629,3631,3633,3635,3637,3639,3641,3643,3645,3647,3649,3651,3653,3655,3657,3659,3661,3663,3665,3667,3669,3671,3673,3675,3677,3679,3681,3683,3685,3687,3689,3691,3693,3695,3697,3699,3701,3703,3705,3707,3709,3711,3713],{"categories":148},[149],"Developer Productivity",{"categories":151},[152],"Business & SaaS",{"categories":154},[155],"AI & LLMs",{"categories":157},[158],"AI Automation",{"categories":160},[161],"Product Strategy",{"categories":163},[155],{"categories":165},[149],{"categories":167},[152],{"categories":169},[],{"categories":171},[155],{"categories":173},[],{"categories":175},[176],"AI News & Trends",{"categories":178},[158],{"categories":180},[176],{"categories":182},[158],{"categories":184},[158],{"categories":186},[155],{"categories":188},[155],{"categories":190},[176],{"categories":192},[155],{"categories":194},[],{"categories":196},[197],"Design & Frontend",{"categories":199},[200],"Data Science & Visualization",{"categories":202},[176],{"categories":204},[],{"categories":206},[112],{"categories":208},[155],{"categories":210},[158],{"categories":212},[213],"Marketing & Growth",{"categories":215},[155],{"categories":217},[158],{"categories":219},[],{"categories":221},[],{"categories":223},[197],{"categories":225},[158],{"categories":227},[149],{"categories":229},[197],{"categories":231},[155],{"categories":233},[158],{"categories":235},[176],{"categories":237},[],{"categories":239},[],{"categories":241},[158],{"categories":243},[112],{"categories":245},[],{"categories":247},[152],{"categories":249},[],{"categories":251},[],{"categories":253},[158],{"categories":255},[158],{"categories":257},[155],{"categories":259},[],{"categories":261},[112],{"categories":263},[],{"categories":265},[],{"categories":267},[],{"categories":269},[155],{"categories":271},[213],{"categories":273},[197],{"categories":275},[197],{"categories":277},[155],{"categories":279},[158],{"categories":281},[155],{"categories":283},[155],{"categories":285},[158],{"categories":287},[158],{"categories":289},[200],{"categories":291},[176],{"categories":293},[158],{"categories":295},[213],{"categories":297},[158],{"categories":299},[161],{"categories":301},[],{"categories":303},[158],{"categories":305},[],{"categories":307},[158],{"categories":309},[112],{"categories":311},[197],{"categories":313},[155],{"categories":315},[],{"categories":317},[],{"categories":319},[158],{"categories":321},[],{"categories":323},[155],{"categories":325},[],{"categories":327},[149],{"categories":329},[112],{"categories":331},[152],{"categories":333},[176],{"categories":335},[155],{"categories":337},[],{"categories":339},[155],{"categories":341},[],{"categories":343},[112],{"categories":345},[200],{"categories":347},[],{"categories":349},[155],{"categories":351},[197],{"categories":353},[],{"categories":355},[197],{"categories":357},[158],{"categories":359},[],{"categories":361},[158],{"categories":363},[176],{"categories":365},[155],{"categories":367},[],{"categories":369},[158],{"categories":371},[155],{"categories":373},[161],{"categories":375},[],{"categories":377},[155],{"categories":379},[158],{"categories":381},[158],{"categories":383},[],{"categories":385},[200],{"categories":387},[155],{"categories":389},[],{"categories":391},[149],{"categories":393},[152],{"categories":395},[155],{"categories":397},[158],{"categories":399},[112],{"categories":401},[155],{"categories":403},[],{"categories":405},[],{"categories":407},[155],{"categories":409},[],{"categories":411},[197],{"categories":413},[],{"categories":415},[155],{"categories":417},[],{"categories":419},[158],{"categories":421},[155],{"categories":423},[197],{"categories":425},[],{"categories":427},[155],{"categories":429},[155],{"categories":431},[152],{"categories":433},[158],{"categories":435},[155],{"categories":437},[197],{"categories":439},[158],{"categories":441},[],{"categories":443},[],{"categories":445},[176],{"categories":447},[],{"categories":449},[155],{"categories":451},[152,213],{"categories":453},[],{"categories":455},[155],{"categories":457},[],{"categories":459},[],{"categories":461},[155],{"categories":463},[],{"categories":465},[155],{"categories":467},[468],"DevOps & Cloud",{"categories":470},[],{"categories":472},[176],{"categories":474},[197],{"categories":476},[],{"categories":478},[176],{"categories":480},[176],{"categories":482},[155],{"categories":484},[213],{"categories":486},[],{"categories":488},[152],{"categories":490},[],{"categories":492},[155,468],{"categories":494},[155],{"categories":496},[155],{"categories":498},[158],{"categories":500},[155,112],{"categories":502},[200],{"categories":504},[155],{"categories":506},[213],{"categories":508},[158],{"categories":510},[158],{"categories":512},[],{"categories":514},[158],{"categories":516},[155,152],{"categories":518},[],{"categories":520},[197],{"categories":522},[197],{"categories":524},[],{"categories":526},[],{"categories":528},[176],{"categories":530},[],{"categories":532},[149],{"categories":534},[112],{"categories":536},[155],{"categories":538},[197],{"categories":540},[158],{"categories":542},[112],{"categories":544},[176],{"categories":546},[197],{"categories":548},[],{"categories":550},[155],{"categories":552},[155],{"categories":554},[155],{"categories":556},[176],{"categories":558},[149],{"categories":560},[155],{"categories":562},[158],{"categories":564},[468],{"categories":566},[197],{"categories":568},[158],{"categories":570},[],{"categories":572},[],{"categories":574},[197],{"categories":576},[176],{"categories":578},[200],{"categories":580},[],{"categories":582},[155],{"categories":584},[155],{"categories":586},[152],{"categories":588},[155],{"categories":590},[155],{"categories":592},[176],{"categories":594},[],{"categories":596},[158],{"categories":598},[112],{"categories":600},[],{"categories":602},[155],{"categories":604},[155],{"categories":606},[158],{"categories":608},[],{"categories":610},[],{"categories":612},[155],{"categories":614},[],{"categories":616},[152],{"categories":618},[158],{"categories":620},[],{"categories":622},[149],{"categories":624},[155],{"categories":626},[152],{"categories":628},[176],{"categories":630},[],{"categories":632},[],{"categories":634},[],{"categories":636},[176],{"categories":638},[176],{"categories":640},[],{"categories":642},[],{"categories":644},[152],{"categories":646},[],{"categories":648},[],{"categories":650},[149],{"categories":652},[],{"categories":654},[213],{"categories":656},[158],{"categories":658},[152],{"categories":660},[158],{"categories":662},[],{"categories":664},[161],{"categories":666},[197],{"categories":668},[112],{"categories":670},[155],{"categories":672},[158],{"categories":674},[152],{"categories":676},[155],{"categories":678},[],{"categories":680},[],{"categories":682},[112],{"categories":684},[200],{"categories":686},[161],{"categories":688},[158],{"categories":690},[155],{"categories":692},[],{"categories":694},[468],{"categories":696},[],{"categories":698},[158],{"categories":700},[],{"categories":702},[],{"categories":704},[155],{"categories":706},[197],{"categories":708},[213],{"categories":710},[158],{"categories":712},[],{"categories":714},[149],{"categories":716},[],{"categories":718},[176],{"categories":720},[155,468],{"categories":722},[176],{"categories":724},[155],{"categories":726},[152],{"categories":728},[155],{"categories":730},[],{"categories":732},[152],{"categories":734},[],{"categories":736},[112],{"categories":738},[197],{"categories":740},[176],{"categories":742},[200],{"categories":744},[149],{"categories":746},[155],{"categories":748},[112],{"categories":750},[],{"categories":752},[],{"categories":754},[161],{"categories":756},[],{"categories":758},[155],{"categories":760},[],{"categories":762},[197],{"categories":764},[197],{"categories":766},[197],{"categories":768},[],{"categories":770},[],{"categories":772},[176],{"categories":774},[158],{"categories":776},[155],{"categories":778},[155],{"categories":780},[155],{"categories":782},[152],{"categories":784},[155],{"categories":786},[],{"categories":788},[112],{"categories":790},[112],{"categories":792},[152],{"categories":794},[],{"categories":796},[155],{"categories":798},[155],{"categories":800},[152],{"categories":802},[176],{"categories":804},[213],{"categories":806},[158],{"categories":808},[],{"categories":810},[197],{"categories":812},[],{"categories":814},[155],{"categories":816},[],{"categories":818},[152],{"categories":820},[158],{"categories":822},[],{"categories":824},[468],{"categories":826},[200],{"categories":828},[112],{"categories":830},[213],{"categories":832},[112],{"categories":834},[158],{"categories":836},[],{"categories":838},[],{"categories":840},[158],{"categories":842},[149],{"categories":844},[158],{"categories":846},[161],{"categories":848},[152],{"categories":850},[],{"categories":852},[155],{"categories":854},[161],{"categories":856},[155],{"categories":858},[155],{"categories":860},[213],{"categories":862},[197],{"categories":864},[158],{"categories":866},[],{"categories":868},[],{"categories":870},[468],{"categories":872},[112],{"categories":874},[],{"categories":876},[158],{"categories":878},[155],{"categories":880},[197,155],{"categories":882},[149],{"categories":884},[],{"categories":886},[155],{"categories":888},[149],{"categories":890},[197],{"categories":892},[158],{"categories":894},[112],{"categories":896},[],{"categories":898},[155],{"categories":900},[],{"categories":902},[149],{"categories":904},[],{"categories":906},[158],{"categories":908},[161],{"categories":910},[155],{"categories":912},[155],{"categories":914},[197],{"categories":916},[158],{"categories":918},[468],{"categories":920},[197],{"categories":922},[158],{"categories":924},[155],{"categories":926},[155],{"categories":928},[155],{"categories":930},[176],{"categories":932},[],{"categories":934},[161],{"categories":936},[158],{"categories":938},[197],{"categories":940},[158],{"categories":942},[112],{"categories":944},[197],{"categories":946},[158],{"categories":948},[176],{"categories":950},[],{"categories":952},[155],{"categories":954},[197],{"categories":956},[155],{"categories":958},[149],{"categories":960},[176],{"categories":962},[155],{"categories":964},[213],{"categories":966},[155],{"categories":968},[155],{"categories":970},[158],{"categories":972},[158],{"categories":974},[155],{"categories":976},[158],{"categories":978},[197],{"categories":980},[155],{"categories":982},[],{"categories":984},[],{"categories":986},[112],{"categories":988},[],{"categories":990},[149],{"categories":992},[468],{"categories":994},[],{"categories":996},[149],{"categories":998},[152],{"categories":1000},[213],{"categories":1002},[],{"categories":1004},[152],{"categories":1006},[],{"categories":1008},[],{"categories":1010},[],{"categories":1012},[],{"categories":1014},[],{"categories":1016},[155],{"categories":1018},[158],{"categories":1020},[468],{"categories":1022},[149],{"categories":1024},[155],{"categories":1026},[112],{"categories":1028},[161],{"categories":1030},[155],{"categories":1032},[213],{"categories":1034},[155],{"categories":1036},[155],{"categories":1038},[155],{"categories":1040},[155,149],{"categories":1042},[112],{"categories":1044},[112],{"categories":1046},[197],{"categories":1048},[155],{"categories":1050},[],{"categories":1052},[],{"categories":1054},[],{"categories":1056},[112],{"categories":1058},[200],{"categories":1060},[176],{"categories":1062},[197],{"categories":1064},[],{"categories":1066},[155],{"categories":1068},[155],{"categories":1070},[],{"categories":1072},[],{"categories":1074},[158],{"categories":1076},[155],{"categories":1078},[152],{"categories":1080},[],{"categories":1082},[149],{"categories":1084},[155],{"categories":1086},[149],{"categories":1088},[155],{"categories":1090},[112],{"categories":1092},[213],{"categories":1094},[155,197],{"categories":1096},[176],{"categories":1098},[197],{"categories":1100},[],{"categories":1102},[468],{"categories":1104},[197],{"categories":1106},[158],{"categories":1108},[],{"categories":1110},[],{"categories":1112},[],{"categories":1114},[],{"categories":1116},[112],{"categories":1118},[158],{"categories":1120},[158],{"categories":1122},[155],{"categories":1124},[155],{"categories":1126},[],{"categories":1128},[197],{"categories":1130},[],{"categories":1132},[],{"categories":1134},[158],{"categories":1136},[],{"categories":1138},[],{"categories":1140},[213],{"categories":1142},[213],{"categories":1144},[158],{"categories":1146},[],{"categories":1148},[155],{"categories":1150},[155],{"categories":1152},[112],{"categories":1154},[197],{"categories":1156},[197],{"categories":1158},[158],{"categories":1160},[149],{"categories":1162},[155],{"categories":1164},[197],{"categories":1166},[197],{"categories":1168},[158],{"categories":1170},[158],{"categories":1172},[155],{"categories":1174},[],{"categories":1176},[],{"categories":1178},[155],{"categories":1180},[158],{"categories":1182},[176],{"categories":1184},[112],{"categories":1186},[149],{"categories":1188},[155],{"categories":1190},[],{"categories":1192},[158],{"categories":1194},[158],{"categories":1196},[],{"categories":1198},[149],{"categories":1200},[155],{"categories":1202},[149],{"categories":1204},[149],{"categories":1206},[],{"categories":1208},[],{"categories":1210},[158],{"categories":1212},[158],{"categories":1214},[155],{"categories":1216},[155],{"categories":1218},[176],{"categories":1220},[200],{"categories":1222},[161],{"categories":1224},[176],{"categories":1226},[197],{"categories":1228},[],{"categories":1230},[176],{"categories":1232},[],{"categories":1234},[],{"categories":1236},[],{"categories":1238},[],{"categories":1240},[112],{"categories":1242},[200],{"categories":1244},[],{"categories":1246},[155],{"categories":1248},[155],{"categories":1250},[200],{"categories":1252},[112],{"categories":1254},[],{"categories":1256},[],{"categories":1258},[158],{"categories":1260},[176],{"categories":1262},[176],{"categories":1264},[158],{"categories":1266},[149],{"categories":1268},[155,468],{"categories":1270},[],{"categories":1272},[197],{"categories":1274},[149],{"categories":1276},[158],{"categories":1278},[197],{"categories":1280},[],{"categories":1282},[158],{"categories":1284},[158],{"categories":1286},[155],{"categories":1288},[213],{"categories":1290},[112],{"categories":1292},[197],{"categories":1294},[],{"categories":1296},[158],{"categories":1298},[155],{"categories":1300},[158],{"categories":1302},[158],{"categories":1304},[158],{"categories":1306},[213],{"categories":1308},[158],{"categories":1310},[155],{"categories":1312},[],{"categories":1314},[213],{"categories":1316},[176],{"categories":1318},[158],{"categories":1320},[],{"categories":1322},[],{"categories":1324},[155],{"categories":1326},[158],{"categories":1328},[176],{"categories":1330},[158],{"categories":1332},[],{"categories":1334},[],{"categories":1336},[],{"categories":1338},[158],{"categories":1340},[],{"categories":1342},[],{"categories":1344},[200],{"categories":1346},[155],{"categories":1348},[200],{"categories":1350},[176],{"categories":1352},[155],{"categories":1354},[155],{"categories":1356},[158],{"categories":1358},[155],{"categories":1360},[],{"categories":1362},[],{"categories":1364},[468],{"categories":1366},[],{"categories":1368},[],{"categories":1370},[149],{"categories":1372},[],{"categories":1374},[],{"categories":1376},[],{"categories":1378},[],{"categories":1380},[112],{"categories":1382},[176],{"categories":1384},[213],{"categories":1386},[152],{"categories":1388},[155],{"categories":1390},[155],{"categories":1392},[152],{"categories":1394},[],{"categories":1396},[197],{"categories":1398},[158],{"categories":1400},[152],{"categories":1402},[155],{"categories":1404},[155],{"categories":1406},[149],{"categories":1408},[],{"categories":1410},[149],{"categories":1412},[155],{"categories":1414},[213],{"categories":1416},[158],{"categories":1418},[176],{"categories":1420},[152],{"categories":1422},[155],{"categories":1424},[158],{"categories":1426},[],{"categories":1428},[155],{"categories":1430},[149],{"categories":1432},[155],{"categories":1434},[],{"categories":1436},[176],{"categories":1438},[155],{"categories":1440},[],{"categories":1442},[152],{"categories":1444},[155],{"categories":1446},[],{"categories":1448},[],{"categories":1450},[],{"categories":1452},[155],{"categories":1454},[],{"categories":1456},[468],{"categories":1458},[155],{"categories":1460},[],{"categories":1462},[155],{"categories":1464},[155],{"categories":1466},[155],{"categories":1468},[155,468],{"categories":1470},[155],{"categories":1472},[155],{"categories":1474},[197],{"categories":1476},[158],{"categories":1478},[],{"categories":1480},[158],{"categories":1482},[155],{"categories":1484},[155],{"categories":1486},[155],{"categories":1488},[149],{"categories":1490},[149],{"categories":1492},[112],{"categories":1494},[197],{"categories":1496},[158],{"categories":1498},[],{"categories":1500},[155],{"categories":1502},[176],{"categories":1504},[155],{"categories":1506},[152],{"categories":1508},[],{"categories":1510},[468],{"categories":1512},[197],{"categories":1514},[197],{"categories":1516},[158],{"categories":1518},[176],{"categories":1520},[158],{"categories":1522},[155],{"categories":1524},[],{"categories":1526},[155],{"categories":1528},[],{"categories":1530},[],{"categories":1532},[155],{"categories":1534},[155],{"categories":1536},[155],{"categories":1538},[158],{"categories":1540},[155],{"categories":1542},[],{"categories":1544},[200],{"categories":1546},[158],{"categories":1548},[],{"categories":1550},[155],{"categories":1552},[176],{"categories":1554},[],{"categories":1556},[197],{"categories":1558},[468],{"categories":1560},[176],{"categories":1562},[112],{"categories":1564},[112],{"categories":1566},[176],{"categories":1568},[176],{"categories":1570},[468],{"categories":1572},[],{"categories":1574},[176],{"categories":1576},[155],{"categories":1578},[149],{"categories":1580},[176],{"categories":1582},[],{"categories":1584},[200],{"categories":1586},[176],{"categories":1588},[112],{"categories":1590},[176],{"categories":1592},[468],{"categories":1594},[155],{"categories":1596},[155],{"categories":1598},[],{"categories":1600},[152],{"categories":1602},[],{"categories":1604},[],{"categories":1606},[155],{"categories":1608},[155],{"categories":1610},[155],{"categories":1612},[155],{"categories":1614},[],{"categories":1616},[200],{"categories":1618},[149],{"categories":1620},[],{"categories":1622},[155],{"categories":1624},[155],{"categories":1626},[468],{"categories":1628},[468],{"categories":1630},[],{"categories":1632},[158],{"categories":1634},[176],{"categories":1636},[176],{"categories":1638},[155],{"categories":1640},[158],{"categories":1642},[],{"categories":1644},[197],{"categories":1646},[155],{"categories":1648},[155],{"categories":1650},[],{"categories":1652},[],{"categories":1654},[468],{"categories":1656},[155],{"categories":1658},[112],{"categories":1660},[152],{"categories":1662},[155],{"categories":1664},[],{"categories":1666},[158],{"categories":1668},[149],{"categories":1670},[149],{"categories":1672},[],{"categories":1674},[155],{"categories":1676},[197],{"categories":1678},[158],{"categories":1680},[],{"categories":1682},[155],{"categories":1684},[155],{"categories":1686},[158],{"categories":1688},[],{"categories":1690},[158],{"categories":1692},[112],{"categories":1694},[],{"categories":1696},[155],{"categories":1698},[],{"categories":1700},[155],{"categories":1702},[],{"categories":1704},[155],{"categories":1706},[155],{"categories":1708},[],{"categories":1710},[155],{"categories":1712},[176],{"categories":1714},[155],{"categories":1716},[155],{"categories":1718},[149],{"categories":1720},[155],{"categories":1722},[176],{"categories":1724},[158],{"categories":1726},[],{"categories":1728},[155],{"categories":1730},[213],{"categories":1732},[],{"categories":1734},[],{"categories":1736},[],{"categories":1738},[149],{"categories":1740},[176],{"categories":1742},[158],{"categories":1744},[155],{"categories":1746},[197],{"categories":1748},[158],{"categories":1750},[],{"categories":1752},[158],{"categories":1754},[],{"categories":1756},[155],{"categories":1758},[158],{"categories":1760},[155],{"categories":1762},[],{"categories":1764},[155],{"categories":1766},[155],{"categories":1768},[176],{"categories":1770},[197],{"categories":1772},[158],{"categories":1774},[197],{"categories":1776},[152],{"categories":1778},[],{"categories":1780},[],{"categories":1782},[155],{"categories":1784},[149],{"categories":1786},[176],{"categories":1788},[],{"categories":1790},[],{"categories":1792},[112],{"categories":1794},[197],{"categories":1796},[],{"categories":1798},[155],{"categories":1800},[],{"categories":1802},[213],{"categories":1804},[155],{"categories":1806},[468],{"categories":1808},[112],{"categories":1810},[],{"categories":1812},[158],{"categories":1814},[155],{"categories":1816},[158],{"categories":1818},[158],{"categories":1820},[155],{"categories":1822},[],{"categories":1824},[149],{"categories":1826},[155],{"categories":1828},[152],{"categories":1830},[112],{"categories":1832},[197],{"categories":1834},[],{"categories":1836},[],{"categories":1838},[],{"categories":1840},[158],{"categories":1842},[197],{"categories":1844},[176],{"categories":1846},[155],{"categories":1848},[176],{"categories":1850},[197],{"categories":1852},[],{"categories":1854},[197],{"categories":1856},[176],{"categories":1858},[152],{"categories":1860},[155],{"categories":1862},[176],{"categories":1864},[213],{"categories":1866},[],{"categories":1868},[],{"categories":1870},[200],{"categories":1872},[155,112],{"categories":1874},[176],{"categories":1876},[155],{"categories":1878},[158],{"categories":1880},[158],{"categories":1882},[155],{"categories":1884},[],{"categories":1886},[112],{"categories":1888},[155],{"categories":1890},[200],{"categories":1892},[158],{"categories":1894},[213],{"categories":1896},[468],{"categories":1898},[],{"categories":1900},[149],{"categories":1902},[158],{"categories":1904},[158],{"categories":1906},[112],{"categories":1908},[155],{"categories":1910},[155],{"categories":1912},[],{"categories":1914},[],{"categories":1916},[],{"categories":1918},[468],{"categories":1920},[176],{"categories":1922},[155],{"categories":1924},[155],{"categories":1926},[155],{"categories":1928},[],{"categories":1930},[200],{"categories":1932},[152],{"categories":1934},[],{"categories":1936},[158],{"categories":1938},[468],{"categories":1940},[],{"categories":1942},[197],{"categories":1944},[197],{"categories":1946},[],{"categories":1948},[112],{"categories":1950},[197],{"categories":1952},[155],{"categories":1954},[],{"categories":1956},[176],{"categories":1958},[155],{"categories":1960},[197],{"categories":1962},[158],{"categories":1964},[176],{"categories":1966},[],{"categories":1968},[158],{"categories":1970},[197],{"categories":1972},[155],{"categories":1974},[],{"categories":1976},[155],{"categories":1978},[155],{"categories":1980},[468],{"categories":1982},[176],{"categories":1984},[200],{"categories":1986},[200],{"categories":1988},[],{"categories":1990},[],{"categories":1992},[],{"categories":1994},[158],{"categories":1996},[112],{"categories":1998},[112],{"categories":2000},[],{"categories":2002},[],{"categories":2004},[155],{"categories":2006},[],{"categories":2008},[158],{"categories":2010},[155],{"categories":2012},[],{"categories":2014},[155],{"categories":2016},[152],{"categories":2018},[155],{"categories":2020},[213],{"categories":2022},[158],{"categories":2024},[155],{"categories":2026},[112],{"categories":2028},[176],{"categories":2030},[158],{"categories":2032},[],{"categories":2034},[176],{"categories":2036},[158],{"categories":2038},[158],{"categories":2040},[],{"categories":2042},[152],{"categories":2044},[158],{"categories":2046},[],{"categories":2048},[155],{"categories":2050},[149],{"categories":2052},[176],{"categories":2054},[468],{"categories":2056},[158],{"categories":2058},[158],{"categories":2060},[149],{"categories":2062},[155],{"categories":2064},[],{"categories":2066},[],{"categories":2068},[197],{"categories":2070},[155,152],{"categories":2072},[],{"categories":2074},[149],{"categories":2076},[200],{"categories":2078},[155],{"categories":2080},[112],{"categories":2082},[155],{"categories":2084},[158],{"categories":2086},[155],{"categories":2088},[155],{"categories":2090},[176],{"categories":2092},[158],{"categories":2094},[],{"categories":2096},[],{"categories":2098},[158],{"categories":2100},[155],{"categories":2102},[468],{"categories":2104},[],{"categories":2106},[155],{"categories":2108},[158],{"categories":2110},[],{"categories":2112},[155],{"categories":2114},[213],{"categories":2116},[200],{"categories":2118},[158],{"categories":2120},[155],{"categories":2122},[468],{"categories":2124},[],{"categories":2126},[155],{"categories":2128},[213],{"categories":2130},[197],{"categories":2132},[155],{"categories":2134},[],{"categories":2136},[213],{"categories":2138},[176],{"categories":2140},[155],{"categories":2142},[155],{"categories":2144},[149],{"categories":2146},[],{"categories":2148},[],{"categories":2150},[197],{"categories":2152},[155],{"categories":2154},[200],{"categories":2156},[213],{"categories":2158},[213],{"categories":2160},[176],{"categories":2162},[],{"categories":2164},[],{"categories":2166},[155],{"categories":2168},[],{"categories":2170},[155,112],{"categories":2172},[176],{"categories":2174},[158],{"categories":2176},[112],{"categories":2178},[155],{"categories":2180},[149],{"categories":2182},[],{"categories":2184},[],{"categories":2186},[149],{"categories":2188},[213],{"categories":2190},[155],{"categories":2192},[],{"categories":2194},[197,155],{"categories":2196},[468],{"categories":2198},[149],{"categories":2200},[],{"categories":2202},[152],{"categories":2204},[152],{"categories":2206},[155],{"categories":2208},[112],{"categories":2210},[158],{"categories":2212},[176],{"categories":2214},[213],{"categories":2216},[197],{"categories":2218},[155],{"categories":2220},[155],{"categories":2222},[155],{"categories":2224},[149],{"categories":2226},[155],{"categories":2228},[158],{"categories":2230},[176],{"categories":2232},[],{"categories":2234},[],{"categories":2236},[200],{"categories":2238},[112],{"categories":2240},[155],{"categories":2242},[197],{"categories":2244},[200],{"categories":2246},[155],{"categories":2248},[155],{"categories":2250},[158],{"categories":2252},[158],{"categories":2254},[155,152],{"categories":2256},[],{"categories":2258},[197],{"categories":2260},[],{"categories":2262},[155],{"categories":2264},[176],{"categories":2266},[149],{"categories":2268},[149],{"categories":2270},[158],{"categories":2272},[155],{"categories":2274},[152],{"categories":2276},[112],{"categories":2278},[213],{"categories":2280},[],{"categories":2282},[176],{"categories":2284},[155],{"categories":2286},[155],{"categories":2288},[176],{"categories":2290},[112],{"categories":2292},[155],{"categories":2294},[158],{"categories":2296},[176],{"categories":2298},[155],{"categories":2300},[197],{"categories":2302},[155],{"categories":2304},[155],{"categories":2306},[468],{"categories":2308},[161],{"categories":2310},[158],{"categories":2312},[155],{"categories":2314},[176],{"categories":2316},[158],{"categories":2318},[213],{"categories":2320},[155],{"categories":2322},[],{"categories":2324},[155],{"categories":2326},[],{"categories":2328},[],{"categories":2330},[],{"categories":2332},[152],{"categories":2334},[155],{"categories":2336},[158],{"categories":2338},[176],{"categories":2340},[176],{"categories":2342},[176],{"categories":2344},[176],{"categories":2346},[],{"categories":2348},[149],{"categories":2350},[158],{"categories":2352},[176],{"categories":2354},[149],{"categories":2356},[158],{"categories":2358},[155],{"categories":2360},[155,158],{"categories":2362},[158],{"categories":2364},[468],{"categories":2366},[176],{"categories":2368},[176],{"categories":2370},[158],{"categories":2372},[155],{"categories":2374},[],{"categories":2376},[176],{"categories":2378},[213],{"categories":2380},[149],{"categories":2382},[155],{"categories":2384},[155],{"categories":2386},[],{"categories":2388},[112],{"categories":2390},[],{"categories":2392},[149],{"categories":2394},[158],{"categories":2396},[176],{"categories":2398},[155],{"categories":2400},[176],{"categories":2402},[149],{"categories":2404},[176],{"categories":2406},[176],{"categories":2408},[],{"categories":2410},[152],{"categories":2412},[158],{"categories":2414},[176],{"categories":2416},[176],{"categories":2418},[176],{"categories":2420},[176],{"categories":2422},[176],{"categories":2424},[176],{"categories":2426},[176],{"categories":2428},[176],{"categories":2430},[176],{"categories":2432},[176],{"categories":2434},[200],{"categories":2436},[149],{"categories":2438},[155],{"categories":2440},[155],{"categories":2442},[],{"categories":2444},[155,149],{"categories":2446},[],{"categories":2448},[158],{"categories":2450},[176],{"categories":2452},[158],{"categories":2454},[155],{"categories":2456},[155],{"categories":2458},[155],{"categories":2460},[155],{"categories":2462},[155],{"categories":2464},[158],{"categories":2466},[152],{"categories":2468},[197],{"categories":2470},[176],{"categories":2472},[155],{"categories":2474},[],{"categories":2476},[],{"categories":2478},[158],{"categories":2480},[197],{"categories":2482},[155],{"categories":2484},[],{"categories":2486},[],{"categories":2488},[213],{"categories":2490},[155],{"categories":2492},[],{"categories":2494},[],{"categories":2496},[149],{"categories":2498},[152],{"categories":2500},[155],{"categories":2502},[152],{"categories":2504},[197],{"categories":2506},[],{"categories":2508},[176],{"categories":2510},[],{"categories":2512},[197],{"categories":2514},[155],{"categories":2516},[213],{"categories":2518},[],{"categories":2520},[213],{"categories":2522},[],{"categories":2524},[],{"categories":2526},[158],{"categories":2528},[],{"categories":2530},[152],{"categories":2532},[149],{"categories":2534},[197],{"categories":2536},[112],{"categories":2538},[],{"categories":2540},[],{"categories":2542},[155],{"categories":2544},[149],{"categories":2546},[213],{"categories":2548},[],{"categories":2550},[158],{"categories":2552},[158],{"categories":2554},[176],{"categories":2556},[155],{"categories":2558},[158],{"categories":2560},[155],{"categories":2562},[158],{"categories":2564},[155],{"categories":2566},[161],{"categories":2568},[176],{"categories":2570},[],{"categories":2572},[213],{"categories":2574},[112],{"categories":2576},[158],{"categories":2578},[],{"categories":2580},[155],{"categories":2582},[158],{"categories":2584},[152],{"categories":2586},[149],{"categories":2588},[155],{"categories":2590},[197],{"categories":2592},[112],{"categories":2594},[112],{"categories":2596},[155],{"categories":2598},[200],{"categories":2600},[155],{"categories":2602},[158],{"categories":2604},[152],{"categories":2606},[158],{"categories":2608},[155],{"categories":2610},[155],{"categories":2612},[158],{"categories":2614},[176],{"categories":2616},[],{"categories":2618},[149],{"categories":2620},[155],{"categories":2622},[158],{"categories":2624},[155],{"categories":2626},[155],{"categories":2628},[],{"categories":2630},[197],{"categories":2632},[152],{"categories":2634},[176],{"categories":2636},[155],{"categories":2638},[155],{"categories":2640},[197],{"categories":2642},[213],{"categories":2644},[200],{"categories":2646},[155],{"categories":2648},[176],{"categories":2650},[155],{"categories":2652},[158],{"categories":2654},[468],{"categories":2656},[155],{"categories":2658},[158],{"categories":2660},[200],{"categories":2662},[],{"categories":2664},[158],{"categories":2666},[112],{"categories":2668},[197],{"categories":2670},[155],{"categories":2672},[149],{"categories":2674},[152],{"categories":2676},[112],{"categories":2678},[],{"categories":2680},[158],{"categories":2682},[155],{"categories":2684},[],{"categories":2686},[176],{"categories":2688},[],{"categories":2690},[176],{"categories":2692},[155],{"categories":2694},[158],{"categories":2696},[158],{"categories":2698},[158],{"categories":2700},[],{"categories":2702},[],{"categories":2704},[155],{"categories":2706},[155],{"categories":2708},[],{"categories":2710},[197],{"categories":2712},[158],{"categories":2714},[213],{"categories":2716},[149],{"categories":2718},[],{"categories":2720},[],{"categories":2722},[176],{"categories":2724},[112],{"categories":2726},[155],{"categories":2728},[155],{"categories":2730},[155],{"categories":2732},[112],{"categories":2734},[176],{"categories":2736},[197],{"categories":2738},[155],{"categories":2740},[155],{"categories":2742},[155],{"categories":2744},[176],{"categories":2746},[155],{"categories":2748},[176],{"categories":2750},[158],{"categories":2752},[158],{"categories":2754},[112],{"categories":2756},[158],{"categories":2758},[155],{"categories":2760},[112],{"categories":2762},[197],{"categories":2764},[],{"categories":2766},[158],{"categories":2768},[],{"categories":2770},[],{"categories":2772},[152],{"categories":2774},[155],{"categories":2776},[158],{"categories":2778},[149],{"categories":2780},[158],{"categories":2782},[213],{"categories":2784},[],{"categories":2786},[158],{"categories":2788},[],{"categories":2790},[149],{"categories":2792},[158],{"categories":2794},[],{"categories":2796},[158],{"categories":2798},[155],{"categories":2800},[176],{"categories":2802},[155],{"categories":2804},[158],{"categories":2806},[176],{"categories":2808},[158],{"categories":2810},[112],{"categories":2812},[197],{"categories":2814},[149],{"categories":2816},[],{"categories":2818},[158],{"categories":2820},[197],{"categories":2822},[176],{"categories":2824},[155],{"categories":2826},[197],{"categories":2828},[149],{"categories":2830},[],{"categories":2832},[158],{"categories":2834},[158],{"categories":2836},[155],{"categories":2838},[],{"categories":2840},[158],{"categories":2842},[161],{"categories":2844},[176],{"categories":2846},[158],{"categories":2848},[152],{"categories":2850},[],{"categories":2852},[155],{"categories":2854},[161],{"categories":2856},[155],{"categories":2858},[158],{"categories":2860},[176],{"categories":2862},[149],{"categories":2864},[468],{"categories":2866},[155],{"categories":2868},[155],{"categories":2870},[155],{"categories":2872},[176],{"categories":2874},[152],{"categories":2876},[155],{"categories":2878},[197],{"categories":2880},[176],{"categories":2882},[468],{"categories":2884},[155],{"categories":2886},[],{"categories":2888},[],{"categories":2890},[468],{"categories":2892},[200],{"categories":2894},[158],{"categories":2896},[158],{"categories":2898},[176],{"categories":2900},[155],{"categories":2902},[149],{"categories":2904},[197],{"categories":2906},[158],{"categories":2908},[155],{"categories":2910},[213],{"categories":2912},[155],{"categories":2914},[158],{"categories":2916},[],{"categories":2918},[155],{"categories":2920},[155],{"categories":2922},[176],{"categories":2924},[149],{"categories":2926},[],{"categories":2928},[155],{"categories":2930},[155],{"categories":2932},[112],{"categories":2934},[197],{"categories":2936},[155,158],{"categories":2938},[213,152],{"categories":2940},[155],{"categories":2942},[],{"categories":2944},[158],{"categories":2946},[],{"categories":2948},[112],{"categories":2950},[155],{"categories":2952},[176],{"categories":2954},[],{"categories":2956},[158],{"categories":2958},[],{"categories":2960},[158],{"categories":2962},[149],{"categories":2964},[158],{"categories":2966},[155],{"categories":2968},[468],{"categories":2970},[213],{"categories":2972},[152],{"categories":2974},[152],{"categories":2976},[149],{"categories":2978},[149],{"categories":2980},[155],{"categories":2982},[158],{"categories":2984},[155],{"categories":2986},[155],{"categories":2988},[149],{"categories":2990},[155],{"categories":2992},[213],{"categories":2994},[176],{"categories":2996},[155],{"categories":2998},[158],{"categories":3000},[155],{"categories":3002},[],{"categories":3004},[112],{"categories":3006},[],{"categories":3008},[158],{"categories":3010},[149],{"categories":3012},[],{"categories":3014},[468],{"categories":3016},[155],{"categories":3018},[],{"categories":3020},[176],{"categories":3022},[158],{"categories":3024},[112],{"categories":3026},[155],{"categories":3028},[158],{"categories":3030},[112],{"categories":3032},[158],{"categories":3034},[176],{"categories":3036},[149],{"categories":3038},[176],{"categories":3040},[112],{"categories":3042},[155],{"categories":3044},[197],{"categories":3046},[155],{"categories":3048},[155],{"categories":3050},[155],{"categories":3052},[155],{"categories":3054},[158],{"categories":3056},[155],{"categories":3058},[158],{"categories":3060},[155],{"categories":3062},[149],{"categories":3064},[155],{"categories":3066},[158],{"categories":3068},[197],{"categories":3070},[149],{"categories":3072},[158],{"categories":3074},[197],{"categories":3076},[],{"categories":3078},[155],{"categories":3080},[155],{"categories":3082},[112],{"categories":3084},[],{"categories":3086},[158],{"categories":3088},[213],{"categories":3090},[155],{"categories":3092},[176],{"categories":3094},[213],{"categories":3096},[158],{"categories":3098},[152],{"categories":3100},[152],{"categories":3102},[155],{"categories":3104},[149],{"categories":3106},[],{"categories":3108},[155],{"categories":3110},[],{"categories":3112},[149],{"categories":3114},[155],{"categories":3116},[158],{"categories":3118},[158],{"categories":3120},[],{"categories":3122},[112],{"categories":3124},[112],{"categories":3126},[213],{"categories":3128},[197],{"categories":3130},[],{"categories":3132},[155],{"categories":3134},[149],{"categories":3136},[155],{"categories":3138},[112],{"categories":3140},[149],{"categories":3142},[176],{"categories":3144},[176],{"categories":3146},[],{"categories":3148},[176],{"categories":3150},[158],{"categories":3152},[197],{"categories":3154},[200],{"categories":3156},[155],{"categories":3158},[],{"categories":3160},[176],{"categories":3162},[112],{"categories":3164},[152],{"categories":3166},[155],{"categories":3168},[149],{"categories":3170},[468],{"categories":3172},[149],{"categories":3174},[],{"categories":3176},[],{"categories":3178},[176],{"categories":3180},[],{"categories":3182},[158],{"categories":3184},[158],{"categories":3186},[158],{"categories":3188},[],{"categories":3190},[155],{"categories":3192},[],{"categories":3194},[176],{"categories":3196},[149],{"categories":3198},[197],{"categories":3200},[155],{"categories":3202},[176],{"categories":3204},[176],{"categories":3206},[],{"categories":3208},[176],{"categories":3210},[149],{"categories":3212},[155],{"categories":3214},[],{"categories":3216},[158],{"categories":3218},[158],{"categories":3220},[149],{"categories":3222},[],{"categories":3224},[],{"categories":3226},[],{"categories":3228},[197],{"categories":3230},[158],{"categories":3232},[155],{"categories":3234},[],{"categories":3236},[],{"categories":3238},[],{"categories":3240},[197],{"categories":3242},[],{"categories":3244},[149],{"categories":3246},[],{"categories":3248},[],{"categories":3250},[197],{"categories":3252},[155],{"categories":3254},[176],{"categories":3256},[],{"categories":3258},[213],{"categories":3260},[176],{"categories":3262},[213],{"categories":3264},[155],{"categories":3266},[],{"categories":3268},[],{"categories":3270},[158],{"categories":3272},[],{"categories":3274},[],{"categories":3276},[158],{"categories":3278},[155],{"categories":3280},[],{"categories":3282},[158],{"categories":3284},[176],{"categories":3286},[213],{"categories":3288},[200],{"categories":3290},[158],{"categories":3292},[158],{"categories":3294},[],{"categories":3296},[],{"categories":3298},[],{"categories":3300},[176],{"categories":3302},[],{"categories":3304},[],{"categories":3306},[197],{"categories":3308},[149],{"categories":3310},[],{"categories":3312},[152],{"categories":3314},[213],{"categories":3316},[155],{"categories":3318},[112],{"categories":3320},[149],{"categories":3322},[200],{"categories":3324},[152],{"categories":3326},[112],{"categories":3328},[],{"categories":3330},[],{"categories":3332},[158],{"categories":3334},[149],{"categories":3336},[197],{"categories":3338},[149],{"categories":3340},[158],{"categories":3342},[468],{"categories":3344},[158],{"categories":3346},[],{"categories":3348},[155],{"categories":3350},[176],{"categories":3352},[112],{"categories":3354},[],{"categories":3356},[197],{"categories":3358},[176],{"categories":3360},[149],{"categories":3362},[158],{"categories":3364},[155],{"categories":3366},[152],{"categories":3368},[158,468],{"categories":3370},[158],{"categories":3372},[112],{"categories":3374},[155],{"categories":3376},[200],{"categories":3378},[213],{"categories":3380},[158],{"categories":3382},[],{"categories":3384},[158],{"categories":3386},[155],{"categories":3388},[152],{"categories":3390},[],{"categories":3392},[],{"categories":3394},[155],{"categories":3396},[200],{"categories":3398},[155],{"categories":3400},[],{"categories":3402},[176],{"categories":3404},[],{"categories":3406},[176],{"categories":3408},[112],{"categories":3410},[158],{"categories":3412},[155],{"categories":3414},[213],{"categories":3416},[112],{"categories":3418},[],{"categories":3420},[176],{"categories":3422},[155],{"categories":3424},[],{"categories":3426},[155],{"categories":3428},[158],{"categories":3430},[155],{"categories":3432},[158],{"categories":3434},[155],{"categories":3436},[155],{"categories":3438},[155],{"categories":3440},[155],{"categories":3442},[152],{"categories":3444},[],{"categories":3446},[161],{"categories":3448},[176],{"categories":3450},[155],{"categories":3452},[],{"categories":3454},[112],{"categories":3456},[155],{"categories":3458},[155],{"categories":3460},[158],{"categories":3462},[176],{"categories":3464},[155],{"categories":3466},[155],{"categories":3468},[152],{"categories":3470},[158],{"categories":3472},[197],{"categories":3474},[],{"categories":3476},[200],{"categories":3478},[155],{"categories":3480},[],{"categories":3482},[176],{"categories":3484},[213],{"categories":3486},[],{"categories":3488},[],{"categories":3490},[176],{"categories":3492},[176],{"categories":3494},[213],{"categories":3496},[149],{"categories":3498},[158],{"categories":3500},[158],{"categories":3502},[155],{"categories":3504},[152],{"categories":3506},[],{"categories":3508},[],{"categories":3510},[176],{"categories":3512},[200],{"categories":3514},[112],{"categories":3516},[158],{"categories":3518},[197],{"categories":3520},[200],{"categories":3522},[200],{"categories":3524},[],{"categories":3526},[176],{"categories":3528},[155],{"categories":3530},[155],{"categories":3532},[112],{"categories":3534},[],{"categories":3536},[176],{"categories":3538},[176],{"categories":3540},[176],{"categories":3542},[],{"categories":3544},[158],{"categories":3546},[155],{"categories":3548},[],{"categories":3550},[149],{"categories":3552},[152],{"categories":3554},[],{"categories":3556},[155],{"categories":3558},[155],{"categories":3560},[],{"categories":3562},[112],{"categories":3564},[],{"categories":3566},[],{"categories":3568},[],{"categories":3570},[],{"categories":3572},[155],{"categories":3574},[176],{"categories":3576},[],{"categories":3578},[],{"categories":3580},[155],{"categories":3582},[155],{"categories":3584},[155],{"categories":3586},[200],{"categories":3588},[155],{"categories":3590},[200],{"categories":3592},[],{"categories":3594},[200],{"categories":3596},[200],{"categories":3598},[468],{"categories":3600},[158],{"categories":3602},[112],{"categories":3604},[],{"categories":3606},[],{"categories":3608},[200],{"categories":3610},[112],{"categories":3612},[112],{"categories":3614},[112],{"categories":3616},[],{"categories":3618},[149],{"categories":3620},[112],{"categories":3622},[112],{"categories":3624},[149],{"categories":3626},[112],{"categories":3628},[152],{"categories":3630},[112],{"categories":3632},[112],{"categories":3634},[112],{"categories":3636},[200],{"categories":3638},[176],{"categories":3640},[176],{"categories":3642},[155],{"categories":3644},[112],{"categories":3646},[200],{"categories":3648},[468],{"categories":3650},[200],{"categories":3652},[200],{"categories":3654},[200],{"categories":3656},[],{"categories":3658},[152],{"categories":3660},[],{"categories":3662},[468],{"categories":3664},[112],{"categories":3666},[112],{"categories":3668},[112],{"categories":3670},[158],{"categories":3672},[176,152],{"categories":3674},[200],{"categories":3676},[],{"categories":3678},[],{"categories":3680},[200],{"categories":3682},[],{"categories":3684},[200],{"categories":3686},[176],{"categories":3688},[158],{"categories":3690},[],{"categories":3692},[112],{"categories":3694},[155],{"categories":3696},[197],{"categories":3698},[],{"categories":3700},[155],{"categories":3702},[],{"categories":3704},[176],{"categories":3706},[149],{"categories":3708},[200],{"categories":3710},[],{"categories":3712},[112],{"categories":3714},[176],[3716,3856,3914,4006],{"id":3717,"title":3718,"ai":3719,"body":3724,"categories":3828,"created_at":113,"date_modified":113,"description":105,"extension":114,"faq":113,"featured":115,"kicker_label":113,"meta":3829,"navigation":130,"path":3842,"published_at":3843,"question":113,"scraped_at":3844,"seo":3845,"sitemap":3846,"source_id":3847,"source_name":3848,"source_type":137,"source_url":3849,"stem":3850,"tags":3851,"thumbnail_url":113,"tldr":3853,"tweet":113,"unknown_tags":3854,"__hash__":3855},"summaries\u002Fsummaries\u002Fc116726456b33e2b-tanstack-server-components-opt-in-granularity-beat-summary.md","TanStack Server Components: Opt-In Granularity Beats Next.js",{"provider":7,"model":8,"input_tokens":3720,"output_tokens":3721,"processing_time_ms":3722,"cost_usd":3723},7116,1537,11991,0.00216905,{"type":14,"value":3725,"toc":3823},[3726,3730,3745,3752,3756,3767,3770,3774,3777,3820],[17,3727,3729],{"id":3728},"opt-in-server-rendering-via-server-functions","Opt-In Server Rendering via Server Functions",[22,3731,3732,3733,3736,3737,3740,3741,3744],{},"Render React components on the server explicitly by wrapping them in ",[26,3734,3735],{},"renderServerComponent"," inside a server function, then fetch like JSON data. This runs server-only code (e.g., ",[26,3738,3739],{},"os.hostname()",", env vars) without changing your client-first app structure. Pass computed values as props to keep components pure and reusable on client or server. In a TanStack Start route loader, await the server function and use ",[26,3742,3743],{},"loaderData"," to render: the boundary stays clear since server logic lives solely in the function. Replace server components with JSON fetches seamlessly—no framework overhaul required, unlike Next.js's server-first tree where 'use client' opts out interactivity.",[22,3746,3747,3748,3751],{},"For multiple components, use ",[26,3749,3750],{},"Promise.all"," in one server function or return promises directly for streaming. Client-side, wrap in Suspense for skeletons: slow components load independently without blocking the page.",[17,3753,3755],{"id":3754},"composite-components-eliminate-server-controlled-client-trees","Composite Components Eliminate Server-Controlled Client Trees",[22,3757,3758,3759,3762,3763,3766],{},"Avoid nesting 'use client' components inside server renders, which muddies boundaries (e.g., tracing counter logic requires jumping files). Instead, return ",[26,3760,3761],{},"createCompositeComponent"," from server functions, defining slots for client content. Fetch the source in loaders, then render with ",[26,3764,3765],{},"\u003CComposite source={greetingSource}>","—server defines structure and data passthrough, but clients fill slots.",[22,3768,3769],{},"This keeps all client decisions in client code: server sees opaque slots, executes no client functions. Integrates with TanStack Query for caching\u002FCDN simplicity. Result: explicit server\u002Fclient separation, no 'use client' needed for slots.",[17,3771,3773],{"id":3772},"slot-patterns-for-flexible-client-integration","Slot Patterns for Flexible Client Integration",[22,3775,3776],{},"Use three slot types to inject client components without server knowledge of their identity:",[3778,3779,3780,3792,3802],"ul",{},[3781,3782,3783,3787,3788,3791],"li",{},[3784,3785,3786],"strong",{},"Children slots",": Pass ",[26,3789,3790],{},"{children}"," prop; server forwards anything provided (e.g., counter under greeting).",[3781,3793,3794,3797,3798,3801],{},[3784,3795,3796],{},"Render props",": Define function props (e.g., ",[26,3799,3800],{},"renderActions?: (postId: string, authorId: string) => ReactNode","). Server calls optionally with data (e.g., above post title); client provides function returning component. Opaque to server—runs client-side, avoids double-fetches (author data passes directly).",[3781,3803,3804,3807,3808,3811,3812,3815,3816,3819],{},[3784,3805,3806],{},"Component props",": Pass component directly (e.g., ",[26,3809,3810],{},"PostActions: Component\u003C{postId: string, authorId: string}>","). Server renders ",[26,3813,3814],{},"\u003CPostActions {...data} \u002F>"," as placeholder. Swap implementations client-side (e.g., ",[26,3817,3818],{},"FakePostActions"," works identically). Prefer render props if needing data transforms; component props for direct passthrough.",[22,3821,3822],{},"These solve real issues: targeted actions (like\u002Ffollow) without children dumping at bottom, data sharing without client refetching. Server provides data\u002Fslots; client handles rendering—reverses Next.js logic for better DX and modularity.",{"title":105,"searchDepth":106,"depth":106,"links":3824},[3825,3826,3827],{"id":3728,"depth":106,"text":3729},{"id":3754,"depth":106,"text":3755},{"id":3772,"depth":106,"text":3773},[112],{"content_references":3830,"triage":3840},[3831,3836],{"type":3832,"title":3833,"url":3834,"context":3835},"tool","TanStack Start Server Components Docs","https:\u002F\u002Ftanstack.com\u002Fstart\u002Flatest\u002Fdocs\u002Fframework\u002Freact\u002Fguide\u002Fserver-components","mentioned",{"type":119,"title":3837,"url":3838,"context":3839},"TanStack React Server Components Announcement","https:\u002F\u002Ftanstack.com\u002Fblog\u002Freact-server-components","cited",{"relevance":126,"novelty":127,"quality":126,"actionability":126,"composite":128,"reasoning":3841},"Category: Design & Frontend. The article discusses practical techniques for rendering React components on the server, addressing a specific pain point for developers looking to optimize their frontend architecture. It provides actionable insights on using `renderServerComponent` and `createCompositeComponent`, which can be directly applied in building AI-powered products.","\u002Fsummaries\u002Fc116726456b33e2b-tanstack-server-components-opt-in-granularity-beat-summary","2026-04-20 22:30:20","2026-04-21 15:16:40",{"title":3718,"description":105},{"loc":3842},"44549f7a250bdc2f","Better Stack","https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=pWxRvFFUHcY","summaries\u002Fc116726456b33e2b-tanstack-server-components-opt-in-granularity-beat-summary",[142,141,3852],"software-engineering","Use renderServerComponent in server functions to render React components on the server granularly, like fetching JSON. Composite components with slots keep client boundaries clean without 'use client' directives.",[3852],"txEuohnvndBk3yN4LUpj-Ih9qNEyhx3iGFhMQ45h3_o",{"id":3857,"title":3858,"ai":3859,"body":3864,"categories":3896,"created_at":113,"date_modified":113,"description":3897,"extension":114,"faq":113,"featured":115,"kicker_label":113,"meta":3898,"navigation":130,"path":3899,"published_at":3900,"question":113,"scraped_at":3901,"seo":3902,"sitemap":3903,"source_id":3904,"source_name":3905,"source_type":3906,"source_url":3907,"stem":3908,"tags":3909,"thumbnail_url":113,"tldr":3911,"tweet":113,"unknown_tags":3912,"__hash__":3913},"summaries\u002Fsummaries\u002F46ee9b4965eebef4-asm-js-predicted-js-s-demise-wasm-partially-delive-summary.md","Asm.js Predicted JS's Demise – Wasm Partially Delivers",{"provider":7,"model":8,"input_tokens":3860,"output_tokens":3861,"processing_time_ms":3862,"cost_usd":3863},5305,1615,15930,0.00184615,{"type":14,"value":3865,"toc":3891},[3866,3870,3877,3881,3884,3888],[17,3867,3869],{"id":3868},"asmjs-unlocks-high-performance-non-js-code-in-browsers","Asm.js Unlocks High-Performance Non-JS Code in Browsers",[22,3871,3872,3873,3876],{},"Asm.js, a strict typed subset of JavaScript acting as web assembly, allows compiling C\u002FC++ or other languages directly to browser-executable code. Every operation explicitly coerces types (e.g., ",[26,3874,3875],{},"function square(x) { x = +x; return x * x; }"," becomes a single mul instruction via JIT optimization). This enabled demos like Unreal Engine 3 running at playable frame rates (not 60 FPS) in Firefox in 2013, outperforming pure JS in Chrome. Bundles reached 3MB, feasible despite slower internet and VMs then, proving you could run complex apps like games without native JS. Gary Bernhardt demonstrated Chrome (compiled to Asm.js) running inside Firefox via Wine and X Windows shims, all from C – showing 'if it compiles to C, it runs in the browser.' The core claim: Asm.js lets developers ditch JS for preferred languages while still targeting JS engines, dooming JS dominance.",[17,3878,3880],{"id":3879},"_2025-prediction-massive-app-ports-fall-short-due-to-ai","2025 Prediction: Massive App Ports Fall Short Due to AI",[22,3882,3883],{},"Bernhardt predicted 2025 as peak Asm.js adoption with 'thick, extremely large applications' ported to it, frustrated developers fleeing JS pains (e.g., Brendan Eich's 10-day creation lore). Reality diverged: No massive war (as charted), but COVID and AI code generation eased JS frustrations, reducing migration urgency. Asm.js evolved into WebAssembly (Wasm), now at version 3.0 with garbage collection, better exceptions, JS string builtins, custom text annotations, and deterministic profiling – making it viable beyond early clunkiness.",[17,3885,3887],{"id":3886},"wasm-gains-traction-in-production-despite-js-persistence","Wasm Gains Traction in Production Despite JS Persistence",[22,3889,3890],{},"Wasm enables Rust, C++, Go (and experimentally Python) in Cloudflare Workers for serverless backends, bypassing JS. Notable apps like Figma use it. Hosting providers embrace it, hinting at Bernhardt's wild 'metal' vision: Embed JS VM in kernel for ring-0\u002F3 isolation, compiling all software to Asm\u002FWasm. While kernel-level remains far-fetched, Wasm's inroads validate the 'JS kills JS' thesis partially – blame AI for stalling full replacement by automating JS workarounds.",{"title":105,"searchDepth":106,"depth":106,"links":3892},[3893,3894,3895],{"id":3868,"depth":106,"text":3869},{"id":3879,"depth":106,"text":3880},{"id":3886,"depth":106,"text":3887},[112],"Birth and death: https:\u002F\u002Fwww.destroyallsoftware.com\u002Ftalks\u002Fthe-birth-and-death-of-javascript\n\nbecome an engineer, not just a slop cannon.  Check out https:\u002F\u002Fboot.dev\u002Fprime! And get 25% off. \n\nhttps:\u002F\u002Ftwitch.tv\u002FThePrimeagen - I Stream on Twitch\n\nhttps:\u002F\u002Ftwitter.com\u002Fterminaldotshop - Want to order coffee over SSH?\nssh terminal.shop\n\nBecome Backend Dev: https:\u002F\u002Fboot.dev\u002Fprime\n(plus i make courses for them)\n\nThis is also the best way to support me is to support yourself becoming a better backend engineer.  \n\nGreat News?  Want me to research and create video????: https:\u002F\u002Fwww.reddit.com\u002Fr\u002FThePrimeagen\n\nKinesis Advantage 360: https:\u002F\u002Fbit.ly\u002FPrime-Kinesis",{},"\u002Fsummaries\u002F46ee9b4965eebef4-asm-js-predicted-js-s-demise-wasm-partially-delive-summary","2026-03-31 12:00:41","2026-04-03 21:18:26",{"title":3858,"description":3897},{"loc":3899},"46ee9b4965eebef4","The PrimeTime","video","https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=ceH0IT-OBCw","summaries\u002F46ee9b4965eebef4-asm-js-predicted-js-s-demise-wasm-partially-delive-summary",[142,141,3910],"wasm","Gary Bernhardt's 2014 talk foresaw JavaScript killing itself via Asm.js, a typed subset enabling any language in browsers; Wasm advances this but AI code generation has delayed full adoption.",[3910],"IKCDMlQrZE5eeyf2Lb7FKlX88Ham2VN4JOhuCDMQI6U",{"id":3915,"title":3916,"ai":3917,"body":3922,"categories":3989,"created_at":113,"date_modified":113,"description":105,"extension":114,"faq":113,"featured":115,"kicker_label":113,"meta":3990,"navigation":130,"path":3995,"published_at":113,"question":113,"scraped_at":3996,"seo":3997,"sitemap":3998,"source_id":3999,"source_name":136,"source_type":137,"source_url":3981,"stem":4000,"tags":4001,"thumbnail_url":113,"tldr":4003,"tweet":113,"unknown_tags":4004,"__hash__":4005},"summaries\u002Fsummaries\u002F6eb63cd73ca2db1a-servo-html5ever-parser-runs-in-browser-via-465kb-w-summary.md","Servo html5ever Parser Runs in Browser via 465KB WASM",{"provider":7,"model":8,"input_tokens":3918,"output_tokens":3919,"processing_time_ms":3920,"cost_usd":3921},3583,1305,11684,0.0013466,{"type":14,"value":3923,"toc":3985},[3924,3928,3943,3954,3958,3961,3975],[17,3925,3927],{"id":3926},"compile-servo-sub-crates-to-wasm-for-browser-use","Compile Servo Sub-Crates to WASM for Browser Use",[22,3929,3930,3931,3934,3935,3938,3939,3942],{},"Servo's individual crates like ",[26,3932,3933],{},"html5ever"," (HTML5 parser) and ",[26,3936,3937],{},"markup5ever_rcdom"," (RC DOM builder) compile cleanly to WebAssembly at ~465 KB, enabling fully client-side execution without server roundtrips. This sidesteps the full ",[26,3940,3941],{},"servo"," crate's compilation blockers: SpiderMonkey JS engine, threading, and OpenGL dependencies. Result: a production-grade parser runs in any modern browser tab, producing a parse tree and normalized serialization from raw input.",[22,3944,3945,3946,3949,3950,3953],{},"To integrate, load the WASM module (shows 'loading wasm…' on init), feed it HTML strings, and query the output DOM. Handles real-world mess: input like ",[26,3947,3948],{},"\u003Cp>hello\u003Cb>world\u003C\u002Fp>\u003Ci>! \u003Cdiv>\u003Ctable>\u003Ctr>\u003Ctd>implicit tbody \u003Cp>unclosed\u003C\u002Fhtml>\u003C!-- parser adopts the mis-nested tags -->"," yields Servo's tolerant interpretation—implicit ",[26,3951,3952],{},"\u003Ctbody>",", tag adoption despite mis-nesting, and comment preservation.",[17,3955,3957],{"id":3956},"interactive-demo-reveals-parser-robustness","Interactive Demo Reveals Parser Robustness",[22,3959,3960],{},"Edit HTML live on the left pane; right pane updates with:",[3778,3962,3963,3969],{},[3781,3964,3965,3968],{},[3784,3966,3967],{},"Parse tree",": Full DOM structure as Servo sees it, exposing quirks like implicit table elements.",[3781,3970,3971,3974],{},[3784,3972,3973],{},"Normalized HTML",": Clean serialization matching Servo's output, stripping errors without losing intent.",[22,3976,3977,3978,3984],{},"This proves Servo components deliver browser fidelity in WASM—ideal for tools needing accurate parsing (linters, preprocessors, editors) without bundling a full engine. Trade-off: sticks to parser\u002FDOM only; no layout or rendering. Start with the demo at ",[3979,3980,3981],"a",{"href":3981,"rel":3982},"https:\u002F\u002Fsimonw.github.io\u002Fresearch\u002Fservo-crate-exploration\u002Fhtml5ever-wasm-demo\u002Fwww\u002F",[3983],"nofollow"," to test edge cases yourself.",{"title":105,"searchDepth":106,"depth":106,"links":3986},[3987,3988],{"id":3926,"depth":106,"text":3927},{"id":3956,"depth":106,"text":3957},[112],{"content_references":3991,"triage":3992},[],{"relevance":127,"novelty":127,"quality":126,"actionability":127,"composite":3993,"reasoning":3994},3.25,"Category: Design & Frontend. The article discusses compiling Servo's html5ever and markup5ever_rcdom crates to WebAssembly for client-side HTML parsing, which is relevant for frontend developers. It provides a practical demonstration of the parser's capabilities, but lacks detailed step-by-step integration guidance.","\u002Fsummaries\u002F6eb63cd73ca2db1a-servo-html5ever-parser-runs-in-browser-via-465kb-w-summary","2026-04-15 15:35:11",{"title":3916,"description":105},{"loc":3995},"6eb63cd73ca2db1a","summaries\u002F6eb63cd73ca2db1a-servo-html5ever-parser-runs-in-browser-via-465kb-w-summary",[142,4002,141],"open-source","Compile Servo's html5ever and markup5ever_rcdom crates to WebAssembly for client-side HTML parsing, handling malformed input like unclosed tags and mis-nesting—full Servo won't compile due to SpiderMonkey, threads, and GL dependencies.",[],"oN4TlOdOhmULZaf8-h-BOCMlw8b1gDvPnzF2Qf-KRoI",{"id":4007,"title":4008,"ai":4009,"body":4014,"categories":4042,"created_at":113,"date_modified":113,"description":105,"extension":114,"faq":113,"featured":115,"kicker_label":113,"meta":4043,"navigation":130,"path":4056,"published_at":113,"question":113,"scraped_at":4057,"seo":4058,"sitemap":4059,"source_id":4060,"source_name":136,"source_type":137,"source_url":4061,"stem":4062,"tags":4063,"thumbnail_url":113,"tldr":4065,"tweet":113,"unknown_tags":4066,"__hash__":4067},"summaries\u002Fsummaries\u002Fb9d2d95557e72e3e-socket-io-reliable-websocket-fallbacks-for-realtim-summary.md","Socket.IO: Reliable WebSocket Fallbacks for Realtime Apps",{"provider":7,"model":8,"input_tokens":4010,"output_tokens":4011,"processing_time_ms":4012,"cost_usd":4013},9516,1481,8019,0.00213685,{"type":14,"value":4015,"toc":4037},[4016,4020,4023,4027,4030,4034],[17,4017,4019],{"id":4018},"transport-and-performance-choices","Transport and Performance Choices",[22,4021,4022],{},"Socket.IO defaults to WebSocket connections for minimal overhead between server and client, ensuring low-latency bidirectional messaging across platforms. If WebSocket fails, it automatically switches to HTTP long-polling to maintain connectivity without user intervention. This setup delivers reliable transport that handles network variability—connections drop and reconnect seamlessly, preventing data loss in real-world apps like chats or live updates.",[17,4024,4026],{"id":4025},"scaling-and-broadcasting","Scaling and Broadcasting",[22,4028,4029],{},"Built for production, Socket.IO supports horizontal scaling across multiple servers. Broadcast events to every connected client effortlessly, using adapters for backends like Redis (recently added three new ones on March 29, 2024). This avoids single-server bottlenecks, making it suitable for high-traffic scenarios without custom infrastructure hacks.",[17,4031,4033],{"id":4032},"hands-on-implementation","Hands-On Implementation",[22,4035,4036],{},"Start with the minimal example: server listens on port 3000, emits 'hello' events; client receives and responds. Run it instantly on Replit, StackBlitz, or CodeSandbox—no local setup required. Full docs cover v4 tutorial and advanced patterns. Recent updates include Bun engine support (Aug 22, 2025), npm package provenance (July 25, 2024), monorepo migration (July 12, 2024), and a chat platform demo (Jan 12, 2024). This page is a thin landing site with some rendering errors (Docusaurus baseUrl mismatch, requestAnimationFrame undefined), but core library docs remain actionable for integrating realtime features.",{"title":105,"searchDepth":106,"depth":106,"links":4038},[4039,4040,4041],{"id":4018,"depth":106,"text":4019},{"id":4025,"depth":106,"text":4026},{"id":4032,"depth":106,"text":4033},[112],{"content_references":4044,"triage":4054},[4045,4048,4051],{"type":3832,"title":4046,"url":4047,"context":3835},"Replit Socket.IO Minimal Example","https:\u002F\u002Freplit.com\u002F@socketio\u002Fsocketio-minimal-example",{"type":3832,"title":4049,"url":4050,"context":3835},"StackBlitz Socket.IO Base","https:\u002F\u002Fstackblitz.com\u002Fedit\u002Fsocketio-base?file=index.js",{"type":3832,"title":4052,"url":4053,"context":3835},"CodeSandbox Socket.IO Minimal Example","https:\u002F\u002Fcodesandbox.io\u002Fs\u002Fsocket-io-minimal-example-k3h2l",{"relevance":127,"novelty":106,"quality":127,"actionability":126,"composite":127,"reasoning":4055},"Category: Software Engineering. The article discusses Socket.IO, which is relevant for developers looking to implement real-time features in their applications. While it provides a solid overview of the technology, it lacks deeper insights or novel perspectives on its use cases.","\u002Fsummaries\u002Fb9d2d95557e72e3e-socket-io-reliable-websocket-fallbacks-for-realtim-summary","2026-04-16 02:59:43",{"title":4008,"description":105},{"loc":4056},"b9d2d95557e72e3e","https:\u002F\u002Fsocket.io\u002F","summaries\u002Fb9d2d95557e72e3e-socket-io-reliable-websocket-fallbacks-for-realtim-summary",[4064,142,141],"backend","Socket.IO prioritizes WebSocket for low-overhead bidirectional communication, falls back to HTTP long-polling if needed, auto-reconnects on drops, and scales across servers for broadcasting to all clients.",[],"uyNx_TtK0NXs7ZkEGjmsF1xPZR5IQbzc0NOkG1YiUd0"]