[
  {
    "start": 0.0,
    "end": 4.1,
    "text": "Are meta frameworks like Next, Remix,"
  },
  {
    "start": 4.3,
    "end": 8.76,
    "text": "AnalogJS or Nuxt, are those the future of"
  },
  {
    "start": 8.76,
    "end": 9.54,
    "text": "web development?"
  },
  {
    "start": 10.0,
    "end": 13.5,
    "text": "Should every web developer use those"
  },
  {
    "start": 13.5,
    "end": 15.94,
    "text": "meta frameworks and learn how to build"
  },
  {
    "start": 15.94,
    "end": 18.12,
    "text": "full stack applications with them?"
  },
  {
    "start": 18.78,
    "end": 22.46,
    "text": "Well, I think if you are working with"
  },
  {
    "start": 22.46,
    "end": 26.84,
    "text": "React or Angular or Vue, yes, you should"
  },
  {
    "start": 26.84,
    "end": 29.24,
    "text": "definitely learn those meta frameworks"
  },
  {
    "start": 29.24,
    "end": 33.1,
    "text": "because I believe they are the future of"
  },
  {
    "start": 33.1,
    "end": 34.82,
    "text": "React and Angular and so on."
  },
  {
    "start": 35.06,
    "end": 37.9,
    "text": "Well, especially for React and I'll get back"
  },
  {
    "start": 37.9,
    "end": 39.26,
    "text": "to that in a second."
  },
  {
    "start": 39.96,
    "end": 43.84,
    "text": "But I believe they are the future of those"
  },
  {
    "start": 43.84,
    "end": 46.46,
    "text": "frontend libraries and frameworks"
  },
  {
    "start": 46.46,
    "end": 48.84,
    "text": "because they solve an important"
  },
  {
    "start": 48.84,
    "end": 49.46,
    "text": "problem."
  },
  {
    "start": 50.18,
    "end": 52.22,
    "text": "When we build a website, a web"
  },
  {
    "start": 52.22,
    "end": 55.32,
    "text": "application, we typically don't just need"
  },
  {
    "start": 55.32,
    "end": 58.08,
    "text": "a frontend, we also need a backend and"
  },
  {
    "start": 58.08,
    "end": 60.46,
    "text": "that of course has always been the case"
  },
  {
    "start": 60.46,
    "end": 64.36,
    "text": "and we were able to build websites and"
  },
  {
    "start": 64.36,
    "end": 66.92,
    "text": "web applications that have both a"
  },
  {
    "start": 66.92,
    "end": 69.48,
    "text": "frontend and a backend without those"
  },
  {
    "start": 69.48,
    "end": 71.28,
    "text": "meta frameworks as well, right?"
  },
  {
    "start": 71.7,
    "end": 75.18,
    "text": "I mean, you could simply build a"
  },
  {
    "start": 75.18,
    "end": 77.84,
    "text": "frontend single page application, for"
  },
  {
    "start": 77.84,
    "end": 81.38,
    "text": "example, with React and then connect"
  },
  {
    "start": 81.38,
    "end": 84.54,
    "text": "it, so to say, to a backend that's built with"
  },
  {
    "start": 84.54,
    "end": 85.28,
    "text": "Node and Express."
  },
  {
    "start": 85.78,
    "end": 87.6,
    "text": "So you could build such a backend API,"
  },
  {
    "start": 88.18,
    "end": 90.72,
    "text": "typically a REST API, but could also be a"
  },
  {
    "start": 90.72,
    "end": 94.92,
    "text": "GraphQL API and then you could send"
  },
  {
    "start": 94.92,
    "end": 98.26,
    "text": "requests to that backend from inside the"
  },
  {
    "start": 98.26,
    "end": 101.2,
    "text": "frontend application, for example, with"
  },
  {
    "start": 101.2,
    "end": 104.04,
    "text": "help of React Query, which is a popular"
  },
  {
    "start": 104.04,
    "end": 107.18,
    "text": "library for doing that, or simply by using"
  },
  {
    "start": 107.18,
    "end": 109.68,
    "text": "the Fetch API inside of UseEffect, for"
  },
  {
    "start": 109.68,
    "end": 112.44,
    "text": "example, or in Angular by using"
  },
  {
    "start": 112.48,
    "end": 114.9,
    "text": "Angular's built-in HTTP client."
  },
  {
    "start": 115.64,
    "end": 118.2,
    "text": "And then you could fetch data from the"
  },
  {
    "start": 118.2,
    "end": 121.06,
    "text": "backend or send data to that backend"
  },
  {
    "start": 121.06,
    "end": 123.8,
    "text": "and update the frontend UI accordingly"
  },
  {
    "start": 123.8,
    "end": 127.16,
    "text": "to, for example, show that data or if data"
  },
  {
    "start": 127.16,
    "end": 129.46,
    "text": "was sent to show a success message."
  },
  {
    "start": 129.94,
    "end": 132.74,
    "text": "We don't need those meta frameworks"
  },
  {
    "start": 132.74,
    "end": 134.28,
    "text": "like Next for that."
  },
  {
    "start": 141.68,
    "end": 136.02,
    "text": "That's absolutely not the case."
  },
  {
    "start": 136.74,
    "end": 140.18,
    "text": "But those meta frameworks like Next or"
  },
  {
    "start": 140.18,
    "end": 143.32,
    "text": "Remix and so on can make building"
  },
  {
    "start": 143.32,
    "end": 146.92,
    "text": "complex full-stack applications, so"
  },
  {
    "start": 146.92,
    "end": 149.34,
    "text": "where you have both the frontend and"
  },
  {
    "start": 149.34,
    "end": 152.26,
    "text": "the backend, simply a bit easier and"
  },
  {
    "start": 152.26,
    "end": 154.02,
    "text": "solve certain problems."
  },
  {
    "start": 154.22,
    "end": 156.16,
    "text": "And that's their huge advantage."
  },
  {
    "start": 156.72,
    "end": 159.84,
    "text": "And they do make that easier and solve"
  },
  {
    "start": 159.84,
    "end": 162.64,
    "text": "certain problems by giving you a"
  },
  {
    "start": 162.64,
    "end": 166.24,
    "text": "seamless integration, by blending"
  },
  {
    "start": 166.24,
    "end": 168.98,
    "text": "frontend and backend code with each"
  },
  {
    "start": 168.98,
    "end": 170.16,
    "text": "other, so to say."
  },
  {
    "start": 170.56,
    "end": 173.26,
    "text": "That can also lead to new problems"
  },
  {
    "start": 173.26,
    "end": 176.22,
    "text": "because as a developer, you should"
  },
  {
    "start": 176.22,
    "end": 179.7,
    "text": "absolutely understand where exactly the"
  },
  {
    "start": 179.7,
    "end": 181.72,
    "text": "border is between backend and"
  },
  {
    "start": 181.72,
    "end": 183.64,
    "text": "frontend code so that you make sure"
  },
  {
    "start": 183.64,
    "end": 186.36,
    "text": "that the wrong code doesn't end up on"
  },
  {
    "start": 186.24,
    "end": 187.14,
    "text": "the wrong end."
  },
  {
    "start": 187.62,
    "end": 191.14,
    "text": "But mostly, it can help get rid of certain"
  },
  {
    "start": 191.14,
    "end": 193.18,
    "text": "problems or simply make it a bit easier"
  },
  {
    "start": 193.18,
    "end": 194.88,
    "text": "to write complex applications."
  },
  {
    "start": 195.26,
    "end": 197.14,
    "text": "Because, for example, when you're"
  },
  {
    "start": 197.14,
    "end": 199.36,
    "text": "working with Next.js, but also with"
  },
  {
    "start": 199.36,
    "end": 202.64,
    "text": "Remix and so on, you can effectively"
  },
  {
    "start": 202.64,
    "end": 206.72,
    "text": "fetch data from right inside your React"
  },
  {
    "start": 206.72,
    "end": 208.04,
    "text": "component, for example."
  },
  {
    "start": 208.64,
    "end": 211.46,
    "text": "Or with Remix, you would do it in a"
  },
  {
    "start": 211.46,
    "end": 214.08,
    "text": "separate function which is placed close"
  },
  {
    "start": 214.08,
    "end": 215.7,
    "text": "to your component typically, though."
  },
  {
    "start": 216.04,
    "end": 219.08,
    "text": "You could fetch data from there and"
  },
  {
    "start": 219.08,
    "end": 223.16,
    "text": "then render your HTML code with help"
  },
  {
    "start": 223.16,
    "end": 226.76,
    "text": "of React that's already including that"
  },
  {
    "start": 226.76,
    "end": 227.46,
    "text": "fetched data."
  },
  {
    "start": 227.6,
    "end": 229.56,
    "text": "And all that would happen on the server"
  },
  {
    "start": 229.56,
    "end": 232.1,
    "text": "and the advantage of that would be that"
  },
  {
    "start": 232.1,
    "end": 236.02,
    "text": "the user, the client, receives the finished"
  },
  {
    "start": 236.02,
    "end": 236.94,
    "text": "web page."
  },
  {
    "start": 237.12,
    "end": 240.06,
    "text": "So it gets back a response from the"
  },
  {
    "start": 240.06,
    "end": 243.08,
    "text": "server that already contains all the"
  },
  {
    "start": 243.08,
    "end": 246.12,
    "text": "markup with all the content that's"
  },
  {
    "start": 246.12,
    "end": 249.08,
    "text": "needed for the page that was requested."
  },
  {
    "start": 249.9,
    "end": 252.36,
    "text": "And that, for example, is great for search"
  },
  {
    "start": 252.36,
    "end": 254.74,
    "text": "engine optimization because those"
  },
  {
    "start": 254.74,
    "end": 259.06,
    "text": "search engine crawlers then also see all"
  },
  {
    "start": 259.06,
    "end": 261.36,
    "text": "the content and see the finished page."
  },
  {
    "start": 261.839,
    "end": 264.78,
    "text": "Whereas with traditional single page"
  },
  {
    "start": 264.78,
    "end": 267.6,
    "text": "applications, that page that's coming"
  },
  {
    "start": 267.6,
    "end": 270.34,
    "text": "back from a server would typically be"
  },
  {
    "start": 270.34,
    "end": 273.5,
    "text": "empty and contain no content because"
  },
  {
    "start": 273.5,
    "end": 276.4,
    "text": "that content would have been fetched"
  },
  {
    "start": 276.4,
    "end": 278.9,
    "text": "from inside the browser with help of"
  },
  {
    "start": 278.9,
    "end": 281.02,
    "text": "client-side JavaScript code."
  },
  {
    "start": 281.88,
    "end": 284.4,
    "text": "And whilst to the user that might not"
  },
  {
    "start": 284.4,
    "end": 286.62,
    "text": "make that much of a difference because"
  },
  {
    "start": 286.62,
    "end": 289.56,
    "text": "fetching that data often is pretty quick, it"
  },
  {
    "start": 289.56,
    "end": 292.26,
    "text": "still can because they might temporarily"
  },
  {
    "start": 292.26,
    "end": 295.2,
    "text": "see some loading spinner or some"
  },
  {
    "start": 295.2,
    "end": 297.62,
    "text": "progress bar whilst they're waiting for"
  },
  {
    "start": 297.62,
    "end": 297.98,
    "text": "the data."
  },
  {
    "start": 298.1,
    "end": 299.12,
    "text": "So it can be annoying."
  },
  {
    "start": 299.4,
    "end": 302.48,
    "text": "But what's even worse is that all those"
  },
  {
    "start": 302.48,
    "end": 305.18,
    "text": "search engine crawlers would see an"
  },
  {
    "start": 305.18,
    "end": 305.94,
    "text": "empty page."
  },
  {
    "start": 306.4,
    "end": 309.2,
    "text": "And that can really hurt your search"
  },
  {
    "start": 309.2,
    "end": 312.82,
    "text": "rankings because to those crawlers, your"
  },
  {
    "start": 312.82,
    "end": 314.76,
    "text": "page doesn't have any content."
  },
  {
    "start": 315.08,
    "end": 318.08,
    "text": "So that's one important problem that's,"
  },
  {
    "start": 318.22,
    "end": 320.84,
    "text": "for example, solved by that seamless"
  },
  {
    "start": 320.84,
    "end": 324.18,
    "text": "integration of frontend and backend and"
  },
  {
    "start": 324.18,
    "end": 326.36,
    "text": "by blending that code and blending"
  },
  {
    "start": 326.36,
    "end": 328.32,
    "text": "those two ends, so to say."
  },
  {
    "start": 328.64,
    "end": 331.32,
    "text": "Another thing that can get easier and"
  },
  {
    "start": 331.32,
    "end": 334.08,
    "text": "possibly also more secure would be"
  },
  {
    "start": 334.08,
    "end": 336.58,
    "text": "authentication because we can, of"
  },
  {
    "start": 336.58,
    "end": 339.98,
    "text": "course, also authenticate users when"
  },
  {
    "start": 339.98,
    "end": 342.48,
    "text": "building separated frontends and"
  },
  {
    "start": 342.48,
    "end": 343.0,
    "text": "backends."
  },
  {
    "start": 343.2,
    "end": 345.78,
    "text": "For example, with JSON web tokens,"
  },
  {
    "start": 345.92,
    "end": 347.7,
    "text": "that would be a popular approach."
  },
  {
    "start": 348.38,
    "end": 351.46,
    "text": "But that approach also has certain"
  },
  {
    "start": 351.46,
    "end": 352.42,
    "text": "disadvantages."
  },
  {
    "start": 353.12,
    "end": 356.36,
    "text": "For example, that those tokens are then"
  },
  {
    "start": 356.36,
    "end": 358.96,
    "text": "the only thing that identifies a user."
  },
  {
    "start": 359.48,
    "end": 362.82,
    "text": "And if for some reason, such a token"
  },
  {
    "start": 362.82,
    "end": 366.16,
    "text": "would get stolen, if an attacker could get"
  },
  {
    "start": 366.16,
    "end": 369.38,
    "text": "hold of such a token of an authenticated"
  },
  {
    "start": 369.38,
    "end": 372.5,
    "text": "user, they could basically assume their"
  },
  {
    "start": 372.5,
    "end": 376.08,
    "text": "identity and then send requests on"
  },
  {
    "start": 376.08,
    "end": 377.2,
    "text": "behalf of that user."
  },
  {
    "start": 377.7,
    "end": 379.66,
    "text": "Now, there are defense mechanisms"
  },
  {
    "start": 379.66,
    "end": 380.42,
    "text": "against that."
  },
  {
    "start": 380.86,
    "end": 383.12,
    "text": "For example, those tokens are typically"
  },
  {
    "start": 383.12,
    "end": 386.14,
    "text": "short lived to make sure that if they do"
  },
  {
    "start": 386.14,
    "end": 389.6,
    "text": "get stolen, they are not available for a"
  },
  {
    "start": 389.6,
    "end": 390.42,
    "text": "long time period."
  },
  {
    "start": 390.68,
    "end": 393.02,
    "text": "But still, it can be a problem."
  },
  {
    "start": 393.46,
    "end": 395.7,
    "text": "And if you have a seamless integration,"
  },
  {
    "start": 396.16,
    "end": 398.02,
    "text": "implementing session based"
  },
  {
    "start": 398.02,
    "end": 400.7,
    "text": "authentication, where the"
  },
  {
    "start": 400.7,
    "end": 403.54,
    "text": "authentication status is stored on the"
  },
  {
    "start": 403.54,
    "end": 405.18,
    "text": "server instead of the client,"
  },
  {
    "start": 405.9,
    "end": 408.3,
    "text": "implementing that is easier."
  },
  {
    "start": 408.6,
    "end": 411.42,
    "text": "And that can also add an extra layer of"
  },
  {
    "start": 411.42,
    "end": 412.0,
    "text": "security."
  },
  {
    "start": 412.28,
    "end": 414.76,
    "text": "It can also be easier than implementing"
  },
  {
    "start": 414.76,
    "end": 417.06,
    "text": "authentication tokens, JSON web"
  },
  {
    "start": 417.06,
    "end": 419.52,
    "text": "tokens, and storing them on the client."
  },
  {
    "start": 419.9,
    "end": 422.9,
    "text": "So that's another area where those meta"
  },
  {
    "start": 422.9,
    "end": 424.72,
    "text": "frameworks and that seamless"
  },
  {
    "start": 424.72,
    "end": 427.5,
    "text": "integration of backend and frontend can"
  },
  {
    "start": 427.5,
    "end": 430.74,
    "text": "potentially solve certain problems, or at"
  },
  {
    "start": 430.74,
    "end": 433.94,
    "text": "least make certain common things like"
  },
  {
    "start": 433.94,
    "end": 436.78,
    "text": "user authentication easier and"
  },
  {
    "start": 436.78,
    "end": 438.24,
    "text": "straightforward to implement."
  },
  {
    "start": 438.52,
    "end": 440.5,
    "text": "And that, of course, can be a great thing."
  },
  {
    "start": 441.06,
    "end": 443.82,
    "text": "There also is another advantage I see"
  },
  {
    "start": 443.82,
    "end": 445.88,
    "text": "when using such meta frameworks."
  },
  {
    "start": 446.38,
    "end": 450.3,
    "text": "And that would be that since you are in"
  },
  {
    "start": 450.3,
    "end": 453.94,
    "text": "the end blending those ends, you can"
  },
  {
    "start": 453.94,
    "end": 456.58,
    "text": "still use all the knowledge you have"
  },
  {
    "start": 456.58,
    "end": 460.28,
    "text": "about React or Vue or Angular to render"
  },
  {
    "start": 460.28,
    "end": 461.32,
    "text": "the user interface."
  },
  {
    "start": 461.6,
    "end": 463.88,
    "text": "And you can still add all that client side"
  },
  {
    "start": 463.88,
    "end": 465.7,
    "text": "interactivity you want to add."
  },
  {
    "start": 465.86,
    "end": 468.08,
    "text": "Because the great thing about those"
  },
  {
    "start": 468.0,
    "end": 471.34,
    "text": "meta frameworks is that once they did"
  },
  {
    "start": 471.34,
    "end": 474.18,
    "text": "send back that first response that"
  },
  {
    "start": 474.18,
    "end": 476.36,
    "text": "contains all the content already, as I"
  },
  {
    "start": 476.36,
    "end": 479.22,
    "text": "described, once that happened, it's"
  },
  {
    "start": 479.22,
    "end": 482.04,
    "text": "again client side JavaScript that takes"
  },
  {
    "start": 482.04,
    "end": 485.26,
    "text": "over and in the end gives the user this"
  },
  {
    "start": 485.26,
    "end": 488.16,
    "text": "single page application experience"
  },
  {
    "start": 488.16,
    "end": 491.16,
    "text": "again, where everything on the page is"
  },
  {
    "start": 491.16,
    "end": 493.94,
    "text": "again updated by client side JavaScript"
  },
  {
    "start": 493.94,
    "end": 494.52,
    "text": "code."
  },
  {
    "start": 494.68,
    "end": 497.76,
    "text": "And behind the scenes new data or new"
  },
  {
    "start": 497.76,
    "end": 500.58,
    "text": "HTML code is fetched from the backend."
  },
  {
    "start": 501.04,
    "end": 503.86,
    "text": "But as a user of the website, you still"
  },
  {
    "start": 503.86,
    "end": 506.88,
    "text": "have all the instant transitions and the"
  },
  {
    "start": 506.88,
    "end": 509.9,
    "text": "great user experience you often get from"
  },
  {
    "start": 509.9,
    "end": 511.28,
    "text": "single page applications."
  },
  {
    "start": 511.8,
    "end": 515.159,
    "text": "So you keep those advantages, but you"
  },
  {
    "start": 515.159,
    "end": 517.6,
    "text": "enrich them with more advantages."
  },
  {
    "start": 518.48,
    "end": 521.039,
    "text": "And of course, since you have that"
  },
  {
    "start": 521.039,
    "end": 524.8,
    "text": "seamless integration, you do render all"
  },
  {
    "start": 524.8,
    "end": 527.12,
    "text": "the content that's being sent back from"
  },
  {
    "start": 527.12,
    "end": 529.54,
    "text": "the backend to the frontend on that first"
  },
  {
    "start": 529.54,
    "end": 529.98,
    "text": "request."
  },
  {
    "start": 530.36,
    "end": 533.32,
    "text": "You do that all with the templating"
  },
  {
    "start": 533.32,
    "end": 536.04,
    "text": "language you already know and love."
  },
  {
    "start": 536.28,
    "end": 539.58,
    "text": "So with JSX, for example, if you're using"
  },
  {
    "start": 539.58,
    "end": 543.74,
    "text": "React, you don't have to use a separate"
  },
  {
    "start": 544.0,
    "end": 546.8,
    "text": "templating language to dynamically"
  },
  {
    "start": 546.8,
    "end": 549.58,
    "text": "generate HTML code on the server."
  },
  {
    "start": 550.12,
    "end": 552.58,
    "text": "And that is what you would typically do"
  },
  {
    "start": 552.58,
    "end": 556.18,
    "text": "when building backends that send back"
  },
  {
    "start": 556.18,
    "end": 559.48,
    "text": "HTML instead of just data without such a"
  },
  {
    "start": 559.48,
    "end": 560.06,
    "text": "meta framework."
  },
  {
    "start": 560.58,
    "end": 563.38,
    "text": "If you would build a backend with, for"
  },
  {
    "start": 563.38,
    "end": 568.14,
    "text": "example, Node.js and Express, as many"
  },
  {
    "start": 568.14,
    "end": 570.72,
    "text": "companies still do it because it is a fine"
  },
  {
    "start": 570.72,
    "end": 573.92,
    "text": "way, then you would typically either"
  },
  {
    "start": 573.92,
    "end": 577.52,
    "text": "create an API, a REST API, for example,"
  },
  {
    "start": 577.88,
    "end": 579.78,
    "text": "that's then used by a separated"
  },
  {
    "start": 579.78,
    "end": 580.42,
    "text": "frontend."
  },
  {
    "start": 580.86,
    "end": 582.82,
    "text": "But if you want to build an integrated"
  },
  {
    "start": 582.82,
    "end": 585.7,
    "text": "full stack application without such a"
  },
  {
    "start": 585.7,
    "end": 588.3,
    "text": "meta framework, you would typically do"
  },
  {
    "start": 588.3,
    "end": 591.64,
    "text": "that by using a templating engine on"
  },
  {
    "start": 591.64,
    "end": 594.44,
    "text": "the backend in that Node Express code."
  },
  {
    "start": 594.98,
    "end": 598.02,
    "text": "And here you have popular options like"
  },
  {
    "start": 598.02,
    "end": 601.24,
    "text": "EJS or handlebars and so on."
  },
  {
    "start": 601.56,
    "end": 604.84,
    "text": "But these are all separate templating"
  },
  {
    "start": 604.84,
    "end": 607.08,
    "text": "engines you have to learn so that you"
  },
  {
    "start": 607.08,
    "end": 609.54,
    "text": "understand how you can use them to"
  },
  {
    "start": 609.54,
    "end": 611.3,
    "text": "render the content you want to render."
  },
  {
    "start": 611.68,
    "end": 614.12,
    "text": "So it's an extra thing to learn."
  },
  {
    "start": 614.52,
    "end": 616.56,
    "text": "And then if you want to add client-side"
  },
  {
    "start": 616.56,
    "end": 620.5,
    "text": "interactivity, you have to add React or"
  },
  {
    "start": 620.5,
    "end": 622.9,
    "text": "Vue as an extra dependency to that"
  },
  {
    "start": 622.9,
    "end": 626.18,
    "text": "project and manually write all the code"
  },
  {
    "start": 626.18,
    "end": 629.9,
    "text": "that makes sure that it takes over once"
  },
  {
    "start": 629.9,
    "end": 631.88,
    "text": "the page has been loaded in the"
  },
  {
    "start": 631.88,
    "end": 633.18,
    "text": "browser of your visitor."
  },
  {
    "start": 633.62,
    "end": 636.3,
    "text": "And you manually have to set up all the"
  },
  {
    "start": 636.3,
    "end": 639.68,
    "text": "extra API endpoints, which then could"
  },
  {
    "start": 639.68,
    "end": 643.4,
    "text": "be used by that frontend library if it"
  },
  {
    "start": 643.4,
    "end": 646.24,
    "text": "wants to fetch or send new data after"
  },
  {
    "start": 646.24,
    "end": 648.22,
    "text": "that initial first page load."
  },
  {
    "start": 648.42,
    "end": 650.42,
    "text": "So that would be more complex than"
  },
  {
    "start": 650.42,
    "end": 651.96,
    "text": "using such a meta framework."
  },
  {
    "start": 652.7,
    "end": 655.58,
    "text": "And for all those reasons, I think that if"
  },
  {
    "start": 655.58,
    "end": 658.46,
    "text": "you want to build a full stack application"
  },
  {
    "start": 658.46,
    "end": 661.36,
    "text": "that has all the advantages you know"
  },
  {
    "start": 661.36,
    "end": 664.22,
    "text": "from working with React or Angular or"
  },
  {
    "start": 664.22,
    "end": 667.42,
    "text": "Node, if you want to do that, then"
  },
  {
    "start": 667.42,
    "end": 670.3,
    "text": "picking up such a meta framework is"
  },
  {
    "start": 670.3,
    "end": 672.54,
    "text": "really important and a good idea."
  },
  {
    "start": 673.4,
    "end": 675.76,
    "text": "Now, it's also worth noting, though, that"
  },
  {
    "start": 675.76,
    "end": 679.14,
    "text": "we're still in the early days of this entire"
  },
  {
    "start": 679.14,
    "end": 683.38,
    "text": "development and evolution of frontend"
  },
  {
    "start": 683.38,
    "end": 685.02,
    "text": "web development, if you want to call it"
  },
  {
    "start": 685.02,
    "end": 685.62,
    "text": "like that."
  },
  {
    "start": 686.06,
    "end": 689.88,
    "text": "Of course, Next.js, for example, which is"
  },
  {
    "start": 689.88,
    "end": 692.74,
    "text": "arguably the most important and"
  },
  {
    "start": 692.74,
    "end": 696.14,
    "text": "popular meta framework for React, has"
  },
  {
    "start": 696.14,
    "end": 698.6,
    "text": "already been around for many years, but"
  },
  {
    "start": 698.6,
    "end": 701.96,
    "text": "it's only been recently for one and a half"
  },
  {
    "start": 701.96,
    "end": 706.0,
    "text": "years or probably two years now that"
  },
  {
    "start": 706.0,
    "end": 709.8,
    "text": "they really moved quickly towards that"
  },
  {
    "start": 709.8,
    "end": 712.96,
    "text": "integrated approach and towards a"
  },
  {
    "start": 712.96,
    "end": 715.1,
    "text": "world where the frontend and backend"
  },
  {
    "start": 715.1,
    "end": 718.16,
    "text": "code blend together and blend into"
  },
  {
    "start": 718.16,
    "end": 719.18,
    "text": "each other, so to say."
  },
  {
    "start": 719.28,
    "end": 721.74,
    "text": "That's a relatively new development."
  },
  {
    "start": 722.08,
    "end": 724.82,
    "text": "And it is a development which we now"
  },
  {
    "start": 724.82,
    "end": 728.24,
    "text": "see in other meta frameworks as well."
  },
  {
    "start": 728.56,
    "end": 730.82,
    "text": "But it's still pretty new and therefore, of"
  },
  {
    "start": 730.82,
    "end": 734.44,
    "text": "course, there still are some rough edges"
  },
  {
    "start": 734.44,
    "end": 737.34,
    "text": "and some new patterns to be learned"
  },
  {
    "start": 737.34,
    "end": 740.64,
    "text": "and some things to be understood to, for"
  },
  {
    "start": 740.64,
    "end": 742.78,
    "text": "example, make sure, as I mentioned"
  },
  {
    "start": 742.78,
    "end": 745.9,
    "text": "before, that your code doesn't end up on"
  },
  {
    "start": 745.9,
    "end": 747.7,
    "text": "the wrong end and you're getting"
  },
  {
    "start": 747.7,
    "end": 751.24,
    "text": "strange bugs or you're exposing data in"
  },
  {
    "start": 751.24,
    "end": 752.94,
    "text": "places where it shouldn't be exposed."
  },
  {
    "start": 753.28,
    "end": 756.72,
    "text": "So there also are pitfalls related to that,"
  },
  {
    "start": 757.1,
    "end": 759.36,
    "text": "also because it is so new."
  },
  {
    "start": 759.8,
    "end": 763.4,
    "text": "But ultimately, as always in the world of"
  },
  {
    "start": 763.4,
    "end": 765.48,
    "text": "programming, things will, of course,"
  },
  {
    "start": 765.48,
    "end": 768.0,
    "text": "become better and smoother and"
  },
  {
    "start": 768.0,
    "end": 770.3,
    "text": "patterns will emerge and certain"
  },
  {
    "start": 770.3,
    "end": 771.8,
    "text": "problems will disappear."
  },
  {
    "start": 772.18,
    "end": 773.84,
    "text": "Well, and I guess new problems will"
  },
  {
    "start": 773.84,
    "end": 776.02,
    "text": "appear, but you get my point."
  },
  {
    "start": 776.3,
    "end": 779.56,
    "text": "I think we're definitely heading towards"
  },
  {
    "start": 779.56,
    "end": 781.88,
    "text": "such a world where those meta"
  },
  {
    "start": 781.88,
    "end": 784.18,
    "text": "frameworks will be super important,"
  },
  {
    "start": 784.74,
    "end": 787.74,
    "text": "though I will also say that this is still just"
  },
  {
    "start": 787.74,
    "end": 790.94,
    "text": "one area of web development."
  },
  {
    "start": 791.58,
    "end": 795.22,
    "text": "We absolutely still have those separated"
  },
  {
    "start": 795.22,
    "end": 798.1,
    "text": "frontend and backend applications and"
  },
  {
    "start": 798.1,
    "end": 801.32,
    "text": "we absolutely still have full stack"
  },
  {
    "start": 801.32,
    "end": 804.12,
    "text": "applications where HTML code is"
  },
  {
    "start": 804.08,
    "end": 806.6,
    "text": "rendered on the server with help of"
  },
  {
    "start": 806.6,
    "end": 809.62,
    "text": "templating engines like EJS or, for"
  },
  {
    "start": 809.62,
    "end": 813.92,
    "text": "example, in PHP-based backends with"
  },
  {
    "start": 813.92,
    "end": 815.66,
    "text": "Laravel's Blade engine."
  },
  {
    "start": 816.08,
    "end": 818.5,
    "text": "So we definitely have those applications"
  },
  {
    "start": 818.5,
    "end": 821.56,
    "text": "as well and actually those websites and"
  },
  {
    "start": 821.56,
    "end": 823.84,
    "text": "applications are the majority."
  },
  {
    "start": 824.24,
    "end": 826.18,
    "text": "So it's always important to keep in mind"
  },
  {
    "start": 826.4,
    "end": 830.22,
    "text": "that we're in a niche here, nonetheless in"
  },
  {
    "start": 830.22,
    "end": 833.02,
    "text": "an important niche, which I believe will"
  },
  {
    "start": 833.02,
    "end": 835.66,
    "text": "grow because it offers certain"
  },
  {
    "start": 835.66,
    "end": 836.32,
    "text": "advantages."
  },
  {
    "start": 837.1,
    "end": 838.8,
    "text": "And the advantage is that we have the"
  },
  {
    "start": 838.8,
    "end": 842.26,
    "text": "best of both worlds, that single page"
  },
  {
    "start": 842.26,
    "end": 844.98,
    "text": "application experience, the great user"
  },
  {
    "start": 844.98,
    "end": 847.12,
    "text": "experience offered by that, combined"
  },
  {
    "start": 847.12,
    "end": 849.46,
    "text": "with all the advantages of rendering"
  },
  {
    "start": 849.46,
    "end": 851.92,
    "text": "content on the server and having such"
  },
  {
    "start": 851.92,
    "end": 853.6,
    "text": "full stack applications."
  },
  {
    "start": 855.06,
    "end": 858.08,
    "text": "Now, as mentioned, Next.js is arguably"
  },
  {
    "start": 858.08,
    "end": 860.44,
    "text": "the most popular and important meta"
  },
  {
    "start": 860.44,
    "end": 863.34,
    "text": "framework, but for React we, for"
  },
  {
    "start": 863.34,
    "end": 866.18,
    "text": "example, also have Remix, which is a"
  },
  {
    "start": 866.18,
    "end": 868.68,
    "text": "competitor to Next.js, if you want to call"
  },
  {
    "start": 868.68,
    "end": 871.18,
    "text": "it like this, which is also growing in"
  },
  {
    "start": 871.18,
    "end": 872.98,
    "text": "popularity and becoming more and"
  },
  {
    "start": 872.98,
    "end": 876.12,
    "text": "more important and which offers, in my"
  },
  {
    "start": 876.12,
    "end": 879.18,
    "text": "opinion, certain advantages over Next.js,"
  },
  {
    "start": 879.48,
    "end": 882.38,
    "text": "though that probably would be a topic"
  },
  {
    "start": 882.38,
    "end": 885.14,
    "text": "for a separate episode or video."
  },
  {
    "start": 885.7,
    "end": 887.92,
    "text": "Nonetheless, you have these two options"
  },
  {
    "start": 887.92,
    "end": 891.08,
    "text": "and if you are working with React, I"
  },
  {
    "start": 891.08,
    "end": 892.9,
    "text": "would simply recommend that you take"
  },
  {
    "start": 892.9,
    "end": 895.4,
    "text": "a look at both meta frameworks and you"
  },
  {
    "start": 895.4,
    "end": 898.26,
    "text": "go through their quick start guides to"
  },
  {
    "start": 898.26,
    "end": 900.36,
    "text": "see which one you like the most, for"
  },
  {
    "start": 900.36,
    "end": 900.9,
    "text": "example."
  },
  {
    "start": 901.68,
    "end": 904.1,
    "text": "Now, if you're an Angular developer,"
  },
  {
    "start": 904.5,
    "end": 906.12,
    "text": "there are less choices."
  },
  {
    "start": 906.82,
    "end": 909.72,
    "text": "Here you basically have analog.js and"
  },
  {
    "start": 909.72,
    "end": 913.66,
    "text": "this is a project which, as far as I can tell,"
  },
  {
    "start": 913.78,
    "end": 917.0,
    "text": "is a bit less mature than Next.js or"
  },
  {
    "start": 917.0,
    "end": 917.58,
    "text": "Remix."
  },
  {
    "start": 917.86,
    "end": 920.46,
    "text": "It doesn't have the same set of features"
  },
  {
    "start": 920.46,
    "end": 923.26,
    "text": "and it has certain limitations, also"
  },
  {
    "start": 923.26,
    "end": 925.32,
    "text": "because it's mainly developed by just"
  },
  {
    "start": 925.32,
    "end": 926.28,
    "text": "one person."
  },
  {
    "start": 926.78,
    "end": 929.68,
    "text": "Though I believe that meta frameworks"
  },
  {
    "start": 929.68,
    "end": 933.04,
    "text": "will be and will mostly become so"
  },
  {
    "start": 933.04,
    "end": 935.78,
    "text": "important that we'll see more"
  },
  {
    "start": 935.78,
    "end": 938.34,
    "text": "development in that area in the Angular"
  },
  {
    "start": 938.34,
    "end": 939.5,
    "text": "world as well."
  },
  {
    "start": 940.12,
    "end": 942.5,
    "text": "Maybe because the Angular team"
  },
  {
    "start": 942.5,
    "end": 945.68,
    "text": "makes analog.js or something like that"
  },
  {
    "start": 945.68,
    "end": 949.22,
    "text": "an official extension of the Angular"
  },
  {
    "start": 949.22,
    "end": 951.46,
    "text": "framework, so we might see more"
  },
  {
    "start": 951.46,
    "end": 953.3,
    "text": "development because of that or"
  },
  {
    "start": 953.3,
    "end": 955.58,
    "text": "because more community projects"
  },
  {
    "start": 955.58,
    "end": 956.22,
    "text": "come up."
  },
  {
    "start": 956.68,
    "end": 959.36,
    "text": "Now, if you're a Vue developer, things are"
  },
  {
    "start": 959.36,
    "end": 961.88,
    "text": "actually different because there we do"
  },
  {
    "start": 961.88,
    "end": 965.1,
    "text": "have a very popular and successful meta"
  },
  {
    "start": 965.1,
    "end": 968.3,
    "text": "framework called Next.js and it's been"
  },
  {
    "start": 968.3,
    "end": 971.74,
    "text": "around since 2017, I think, so it's really"
  },
  {
    "start": 971.74,
    "end": 974.24,
    "text": "old by now but of course it has also"
  },
  {
    "start": 974.24,
    "end": 977.28,
    "text": "evolved over all that time and I would"
  },
  {
    "start": 977.28,
    "end": 980.2,
    "text": "say it's pretty comparable to Next.js"
  },
  {
    "start": 980.2,
    "end": 982.78,
    "text": "regarding its maturity, for example."
  },
  {
    "start": 983.36,
    "end": 986.24,
    "text": "Now, it works differently but the main"
  },
  {
    "start": 986.24,
    "end": 988.52,
    "text": "idea is the same, that you can build"
  },
  {
    "start": 988.52,
    "end": 991.72,
    "text": "full-stack applications with Vue and that"
  },
  {
    "start": 991.72,
    "end": 993.78,
    "text": "you can blend back-end and front-end"
  },
  {
    "start": 993.78,
    "end": 996.02,
    "text": "and it has many features that help you"
  },
  {
    "start": 996.02,
    "end": 998.0,
    "text": "with that and that help you with"
  },
  {
    "start": 998.0,
    "end": 1002.54,
    "text": "building complex and user-friendly web"
  },
  {
    "start": 1002.54,
    "end": 1005.06,
    "text": "applications and websites in general."
  },
  {
    "start": 1005.58,
    "end": 1008.26,
    "text": "And therefore, as web developers, we"
  },
  {
    "start": 1008.26,
    "end": 1010.54,
    "text": "now essentially have one additional"
  },
  {
    "start": 1010.54,
    "end": 1014.06,
    "text": "option where besides traditional"
  },
  {
    "start": 1014.06,
    "end": 1017.24,
    "text": "full-stack applications where we, for"
  },
  {
    "start": 1017.24,
    "end": 1019.64,
    "text": "example, use Node, Express and then a"
  },
  {
    "start": 1019.64,
    "end": 1023.1,
    "text": "templating engine like EJS or separated"
  },
  {
    "start": 1023.1,
    "end": 1025.9,
    "text": "front-ends and back-ends, we now also"
  },
  {
    "start": 1025.9,
    "end": 1028.74,
    "text": "have that very intriguing option of"
  },
  {
    "start": 1028.74,
    "end": 1031.4,
    "text": "building full-stack applications where"
  },
  {
    "start": 1031.4,
    "end": 1033.599,
    "text": "we get the best of both worlds by"
  },
  {
    "start": 1033.599,
    "end": 1036.5,
    "text": "seamlessly integrating and blending"
  },
  {
    "start": 1036.5,
    "end": 1039.78,
    "text": "front-end and back-end with those meta"
  },
  {
    "start": 1039.78,
    "end": 1040.359,
    "text": "frameworks."
  },
  {
    "start": 1040.819,
    "end": 1042.98,
    "text": "And of course, we have those rough"
  },
  {
    "start": 1042.98,
    "end": 1045.52,
    "text": "edges you should be aware of and you"
  },
  {
    "start": 1045.52,
    "end": 1048.74,
    "text": "should expect but those will absolutely"
  },
  {
    "start": 1048.74,
    "end": 1051.64,
    "text": "become smoother in the future and"
  },
  {
    "start": 1051.64,
    "end": 1054.02,
    "text": "therefore, I'm convinced that every"
  },
  {
    "start": 1054.02,
    "end": 1057.18,
    "text": "React, Angular or Vue developer should"
  },
  {
    "start": 1057.18,
    "end": 1060.18,
    "text": "also at least take a look at those meta"
  },
  {
    "start": 1060.18,
    "end": 1060.6,
    "text": "frameworks."
  }
]