{"id":109418,"date":"2025-05-17T23:24:22","date_gmt":"2025-05-17T19:54:22","guid":{"rendered":"https:\/\/nabfollower.com\/blog\/hidden-capabilities-of-remixjs-that-will-transform-your-approach-to-markdown-blogs-in-2025-4ic5\/"},"modified":"2025-05-17T23:24:22","modified_gmt":"2025-05-17T19:54:22","slug":"hidden-capabilities-of-remixjs-that-will-transform-your-approach-to-markdown-blogs-in-2025-4ic5","status":"publish","type":"post","link":"https:\/\/nabfollower.com\/blog\/hidden-capabilities-of-remixjs-that-will-transform-your-approach-to-markdown-blogs-in-2025-4ic5\/","title":{"rendered":"\u0642\u0627\u0628\u0644\u06cc\u062a \u0647\u0627\u06cc \u067e\u0646\u0647\u0627\u0646 Remix.js \u06a9\u0647 \u0631\u0648\u06cc\u06a9\u0631\u062f \u0634\u0645\u0627 \u0631\u0627 \u0628\u0647 \u0648\u0628\u0644\u0627\u06af \u0647\u0627\u06cc Markdown \u062f\u0631 \u0633\u0627\u0644 2025 \u062a\u063a\u06cc\u06cc\u0631 \u0645\u06cc \u062f\u0647\u062f"},"content":{"rendered":"<div data-article-id=\"2497588\" id=\"article-body\" wp_automatic_readability=\"246\">\n<p><\/p>\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_85 counter-hierarchy ez-toc-counter-rtl ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">\u0641\u0647\u0631\u0633\u062a \u0645\u0637\u0627\u0644\u0628<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"\u062a\u063a\u06cc\u06cc\u0631 \u0648\u0636\u0639\u06cc\u062a \u0641\u0647\u0631\u0633\u062a \u0645\u0637\u0627\u0644\u0628\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/nabfollower.com\/blog\/hidden-capabilities-of-remixjs-that-will-transform-your-approach-to-markdown-blogs-in-2025-4ic5\/#%D9%85%D9%82%D8%AF%D9%85%D9%87\" >\u0645\u0642\u062f\u0645\u0647<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/nabfollower.com\/blog\/hidden-capabilities-of-remixjs-that-will-transform-your-approach-to-markdown-blogs-in-2025-4ic5\/#Remix_vs_Nextjs_%D8%AF%D8%B1_%D8%B3%D8%A7%D9%84_2025_%DB%8C%DA%A9_%D8%AA%D9%81%D8%A7%D9%88%D8%AA_%D8%A7%D8%B3%D8%A7%D8%B3%DB%8C_%D9%81%D9%84%D8%B3%D9%81%DB%8C\" >Remix vs Next.js \u062f\u0631 \u0633\u0627\u0644 2025: \u06cc\u06a9 \u062a\u0641\u0627\u0648\u062a \u0627\u0633\u0627\u0633\u06cc \u0641\u0644\u0633\u0641\u06cc<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/nabfollower.com\/blog\/hidden-capabilities-of-remixjs-that-will-transform-your-approach-to-markdown-blogs-in-2025-4ic5\/#%D8%A7%D9%84%DA%AF%D9%88%DB%8C_%D9%85%D8%B9%D9%85%D8%A7%D8%B1%DB%8C_%D9%85%D8%AE%D9%81%DB%8C_%D9%85%D8%B9%D9%85%D8%A7%D8%B1%DB%8C_%D8%B4%D8%B4_%D8%B6%D9%84%D8%B9%DB%8C\" >\u0627\u0644\u06af\u0648\u06cc \u0645\u0639\u0645\u0627\u0631\u06cc \u0645\u062e\u0641\u06cc: \u0645\u0639\u0645\u0627\u0631\u06cc \u0634\u0634 \u0636\u0644\u0639\u06cc<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/nabfollower.com\/blog\/hidden-capabilities-of-remixjs-that-will-transform-your-approach-to-markdown-blogs-in-2025-4ic5\/#%D8%B1%D9%88%DB%8C%DA%A9%D8%B1%D8%AF_%D8%B0%D8%AE%DB%8C%D8%B1%D9%87_%D8%B3%D8%A7%D8%B2%DB%8C_%D9%85%D8%AD%D8%AA%D9%88%D8%A7%DB%8C_%D8%AA%D8%B1%DA%A9%DB%8C%D8%A8%DB%8C\" >\u0631\u0648\u06cc\u06a9\u0631\u062f \u0630\u062e\u06cc\u0631\u0647 \u0633\u0627\u0632\u06cc \u0645\u062d\u062a\u0648\u0627\u06cc \u062a\u0631\u06a9\u06cc\u0628\u06cc<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/nabfollower.com\/blog\/hidden-capabilities-of-remixjs-that-will-transform-your-approach-to-markdown-blogs-in-2025-4ic5\/#%D8%A8%D8%A7%D8%B2_%DA%A9%D8%B1%D8%AF%D9%86_%D9%BE%D8%AA%D8%A7%D9%86%D8%B3%DB%8C%D9%84_%DA%A9%D8%A7%D9%85%D9%84_MDX\" >\u0628\u0627\u0632 \u06a9\u0631\u062f\u0646 \u067e\u062a\u0627\u0646\u0633\u06cc\u0644 \u06a9\u0627\u0645\u0644 MDX<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/nabfollower.com\/blog\/hidden-capabilities-of-remixjs-that-will-transform-your-approach-to-markdown-blogs-in-2025-4ic5\/#%D8%A7%D8%B3%D8%AA%D8%B1%D8%A7%D8%AA%DA%98%DB%8C_%D8%B0%D8%AE%DB%8C%D8%B1%D9%87_%D8%B3%D9%87_%D9%84%D8%A7%DB%8C%D9%87_%D8%A8%D8%B1%D8%A7%DB%8C_%D8%B9%D9%85%D9%84%DA%A9%D8%B1%D8%AF_%D8%B5%D8%A7%D8%B9%D9%82%D9%87\" >\u0627\u0633\u062a\u0631\u0627\u062a\u0698\u06cc \u0630\u062e\u06cc\u0631\u0647 \u0633\u0647 \u0644\u0627\u06cc\u0647 \u0628\u0631\u0627\u06cc \u0639\u0645\u0644\u06a9\u0631\u062f \u0635\u0627\u0639\u0642\u0647<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/nabfollower.com\/blog\/hidden-capabilities-of-remixjs-that-will-transform-your-approach-to-markdown-blogs-in-2025-4ic5\/#%D8%A8%D9%87%DB%8C%D9%86%D9%87_%D8%B3%D8%A7%D8%B2%DB%8C_%D8%B3%D8%A6%D9%88_%D8%A8%DB%8C%D8%B4%D8%AA%D8%B1_%D8%AA%D9%88%D8%B3%D8%B9%D9%87_%D8%AF%D9%87%D9%86%D8%AF%DA%AF%D8%A7%D9%86_%D8%A7%D8%B2_%D8%AF%D8%B3%D8%AA_%D9%85%DB%8C_%D8%AF%D9%87%D9%86%D8%AF\" >\u0628\u0647\u06cc\u0646\u0647 \u0633\u0627\u0632\u06cc \u0633\u0626\u0648 \u0628\u06cc\u0634\u062a\u0631 \u062a\u0648\u0633\u0639\u0647 \u062f\u0647\u0646\u062f\u06af\u0627\u0646 \u0627\u0632 \u062f\u0633\u062a \u0645\u06cc \u062f\u0647\u0646\u062f<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/nabfollower.com\/blog\/hidden-capabilities-of-remixjs-that-will-transform-your-approach-to-markdown-blogs-in-2025-4ic5\/#%D8%B1%D9%88%D9%86%D8%AF%D9%87%D8%A7%DB%8C_%D8%A2%DB%8C%D9%86%D8%AF%D9%87_%D8%A7%D8%AF%D8%BA%D8%A7%D9%85_%D9%87%D9%88%D8%B4_%D9%85%D8%B5%D9%86%D9%88%D8%B9%DB%8C_%D8%A8%D8%A7_%D8%B1%DB%8C%D9%85%DB%8C%DA%A9%D8%B3\" >\u0631\u0648\u0646\u062f\u0647\u0627\u06cc \u0622\u06cc\u0646\u062f\u0647: \u0627\u062f\u063a\u0627\u0645 \u0647\u0648\u0634 \u0645\u0635\u0646\u0648\u0639\u06cc \u0628\u0627 \u0631\u06cc\u0645\u06cc\u06a9\u0633<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/nabfollower.com\/blog\/hidden-capabilities-of-remixjs-that-will-transform-your-approach-to-markdown-blogs-in-2025-4ic5\/#%D9%BE%D8%A7%DB%8C%D8%A7%D9%86\" >\u067e\u0627\u06cc\u0627\u0646<\/a><\/li><\/ul><\/nav><\/div>\n<h2><span class=\"ez-toc-section\" id=\"%D9%85%D9%82%D8%AF%D9%85%D9%87\"><\/span>\n<p>  \u0645\u0642\u062f\u0645\u0647<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u062f\u0631 \u0637\u0648\u0644 15+ \u0633\u0627\u0644 \u062a\u0648\u0633\u0639\u0647 \u0648\u0628 \u060c \u0645\u0646 \u0634\u0627\u0647\u062f \u0627\u0641\u0632\u0627\u06cc\u0634 \u0648 \u0633\u0642\u0648\u0637 \u0686\u0627\u0631\u0686\u0648\u0628 \u0647\u0627 \u060c \u0627\u0632 jQuery \u062a\u0627 \u0632\u0627\u0648\u06cc\u0647 \u060c \u0627\u0632 redux \u062a\u0627 query React \u060c \u0648 \u0627\u06a9\u0646\u0648\u0646 \u0628\u0647 Remix.js \u0628\u0648\u062f\u0647 \u0627\u0645. \u0628\u0627 \u0646\u0632\u062f\u06cc\u06a9 \u0634\u062f\u0646 \u0628\u0647 \u0627\u0648\u0627\u0633\u0637 \u0633\u0627\u0644 2012 \u060c Remix.JS \u0628\u0647 \u06cc\u06a9 \u0686\u0627\u0631\u0686\u0648\u0628 \u0642\u062f\u0631\u062a\u0645\u0646\u062f \u0628\u0631\u0627\u06cc \u0627\u06cc\u062c\u0627\u062f \u0648\u0628\u0644\u0627\u06af \u0647\u0627\u06cc \u0633\u0631\u06cc\u0639 \u060c \u0645\u0642\u06cc\u0627\u0633 \u067e\u0630\u06cc\u0631 \u0648 \u062f\u0648\u0633\u062a\u0627\u0646\u0647 \u0633\u0626\u0648 \u062a\u0628\u062f\u06cc\u0644 \u0634\u062f\u0647 \u0627\u0633\u062a.<\/p>\n<p>\u0627\u0645\u0627 \u0627\u06cc\u0646 \u0645\u0634\u06a9\u0644 \u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u062f: \u0628\u06cc\u0634\u062a\u0631 \u062a\u0648\u0633\u0639\u0647 \u062f\u0647\u0646\u062f\u06af\u0627\u0646 \u0627\u0632 \u0642\u062f\u0631\u062a\u0645\u0646\u062f\u062a\u0631\u06cc\u0646 \u0642\u0627\u0628\u0644\u06cc\u062a \u0647\u0627\u06cc \u0631\u06cc\u0645\u06cc\u06a9\u0633 \u060c \u0628\u0647 \u0648\u06cc\u0698\u0647 \u0647\u0646\u06af\u0627\u0645 \u0633\u0627\u062e\u062a \u0648\u0628\u0644\u0627\u06af \u0647\u0627\u06cc \u0645\u0627\u0631\u06a9 \u062a\u062c\u0627\u0631\u06cc \u060c \u0627\u0632 \u062f\u0633\u062a \u0646\u0645\u06cc \u0631\u0648\u0646\u062f.<\/p>\n<p>\u062f\u0631 \u0627\u06cc\u0646 \u0645\u0642\u0627\u0644\u0647 \u060c \u0645\u0646 \u0627\u0644\u06af\u0648\u0647\u0627\u06cc \u0645\u0639\u0645\u0627\u0631\u06cc \u0648 \u062a\u06a9\u0646\u06cc\u06a9 \u0647\u0627\u06cc \u0645\u0639\u0645\u0627\u0631\u06cc \u0622\u0632\u0645\u0627\u06cc\u0634 \u0634\u062f\u0647 \u0631\u0627 \u06a9\u0647 \u062f\u0631 \u0645\u0633\u062a\u0646\u062f\u0627\u062a \u0631\u0633\u0645\u06cc \u06cc\u0627 \u0622\u0645\u0648\u0632\u0634 \u0647\u0627\u06cc \u0645\u0639\u0645\u0648\u0644\u06cc \u067e\u06cc\u062f\u0627 \u0646\u062e\u0648\u0627\u0647\u06cc\u062f \u06a9\u0631\u062f \u060c \u0628\u0647 \u0627\u0634\u062a\u0631\u0627\u06a9 \u0645\u06cc \u06af\u0630\u0627\u0631\u0645. \u0627\u06cc\u0646 \u0628\u06cc\u0646\u0634 \u0647\u0627 \u0627\u0632 \u0633\u0627\u0644\u0647\u0627 \u062a\u062c\u0631\u0628\u0647 \u0628\u0627 \u0686\u0627\u0631\u0686\u0648\u0628 \u0647\u0627\u06cc \u0645\u062e\u062a\u0644\u0641 JavaScript \u0648 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u06a9\u0627\u0631\u0628\u0631\u062f\u06cc \u0645\u062a\u0639\u062f\u062f \u062a\u0648\u0644\u06cc\u062f\u06cc \u062d\u0627\u0635\u0644 \u0645\u06cc \u0634\u0648\u062f.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Remix_vs_Nextjs_%D8%AF%D8%B1_%D8%B3%D8%A7%D9%84_2025_%DB%8C%DA%A9_%D8%AA%D9%81%D8%A7%D9%88%D8%AA_%D8%A7%D8%B3%D8%A7%D8%B3%DB%8C_%D9%81%D9%84%D8%B3%D9%81%DB%8C\"><\/span>\n<p>  Remix vs Next.js \u062f\u0631 \u0633\u0627\u0644 2025: \u06cc\u06a9 \u062a\u0641\u0627\u0648\u062a \u0627\u0633\u0627\u0633\u06cc \u0641\u0644\u0633\u0641\u06cc<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0627\u06af\u0631 \u0645\u0627\u0646\u0646\u062f \u0627\u06a9\u062b\u0631 \u062a\u0648\u0633\u0639\u0647 \u062f\u0647\u0646\u062f\u06af\u0627\u0646 \u0647\u0633\u062a\u06cc\u062f \u060c \u0627\u062d\u062a\u0645\u0627\u0644\u0627\u064b \u0631\u06cc\u0645\u06cc\u06a9\u0633 \u0631\u0627 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 &#8220;\u0641\u0642\u0637 \u06cc\u06a9 \u0631\u0642\u06cc\u0628 \u0628\u0639\u062f\u06cc \u062f\u06cc\u06af\u0631.&#8221; \u0641\u06a9\u0631 \u0645\u06cc \u06a9\u0646\u06cc\u062f. \u0627\u06cc\u0646 \u062a\u0635\u0648\u0631 \u063a\u0644\u0637 \u0645\u0627\u0646\u0639 \u0627\u0632 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0645\u0632\u0627\u06cc\u0627\u06cc \u0645\u0646\u062d\u0635\u0631 \u0628\u0647 \u0641\u0631\u062f \u0631\u06cc\u0645\u06cc\u06a9\u0633 \u0645\u06cc \u0634\u0648\u062f.<\/p>\n<p>\u062a\u0641\u0627\u0648\u062a \u0627\u0635\u0644\u06cc \u062f\u0631 \u0641\u0644\u0633\u0641\u0647 \u0647\u0627\u06cc \u0627\u0631\u0627\u0626\u0647 \u0622\u0646\u0647\u0627 \u0646\u0647\u0641\u062a\u0647 \u0627\u0633\u062a:<\/p>\n<div class=\"highlight js-code-highlight\" wp_automatic_readability=\"9\">\n<pre class=\"highlight javascript\"><code><span class=\"c1\">\/\/ \u274c Typical Next.js approach<\/span>\n<span class=\"k\">export<\/span> <span class=\"k\">async<\/span> <span class=\"kd\">function<\/span> <span class=\"nf\">getStaticProps<\/span><span class=\"p\">()<\/span> <span class=\"p\">{<\/span>\n  <span class=\"c1\">\/\/ Getting data during build time<\/span>\n  <span class=\"k\">return<\/span> <span class=\"p\">{<\/span> <span class=\"na\">props<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">data<\/span> <span class=\"p\">}<\/span> <span class=\"p\">}<\/span>\n<span class=\"p\">}<\/span>\n\n<span class=\"c1\">\/\/ \u2705 Remix approach<\/span>\n<span class=\"k\">export<\/span> <span class=\"k\">async<\/span> <span class=\"kd\">function<\/span> <span class=\"nf\">loader<\/span><span class=\"p\">({<\/span> <span class=\"nx\">request<\/span> <span class=\"p\">})<\/span> <span class=\"p\">{<\/span>\n  <span class=\"c1\">\/\/ Data is loaded on the server for each request<\/span>\n  <span class=\"k\">return<\/span> <span class=\"nf\">json<\/span><span class=\"p\">(<\/span><span class=\"nx\">data<\/span><span class=\"p\">);<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0631\u06cc\u0645\u06cc\u06a9\u0633 \u0635\u0641\u062d\u0627\u062a \u0627\u0633\u062a\u0627\u062a\u06cc\u06a9 \u0645\u0627\u0646\u0646\u062f Next.js \u0627\u06cc\u062c\u0627\u062f \u0646\u0645\u06cc \u06a9\u0646\u062f &#8211; \u0627\u0632 \u0645\u06a9\u0627\u0646\u06cc\u0633\u0645 \u0647\u0627\u06cc \u0630\u062e\u06cc\u0631\u0647 \u0633\u0627\u0632\u06cc \u0627\u0633\u062a\u0627\u0646\u062f\u0627\u0631\u062f HTTP \u0628\u0631\u0627\u06cc \u062f\u0633\u062a\u06cc\u0627\u0628\u06cc \u0628\u0647 \u0639\u0645\u0644\u06a9\u0631\u062f \u0645\u0634\u0627\u0628\u0647 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u062f. \u0627\u06cc\u0646 \u062a\u0641\u0627\u0648\u062a \u0645\u0645\u06a9\u0646 \u0627\u0633\u062a \u0638\u0631\u06cc\u0641 \u0628\u0647 \u0646\u0638\u0631 \u0628\u0631\u0633\u062f \u060c \u0627\u0645\u0627 \u0645\u0646\u062c\u0631 \u0628\u0647 \u0686\u0646\u062f\u06cc\u0646 \u0645\u0632\u06cc\u062a \u06a9\u0644\u06cc\u062f\u06cc \u0645\u06cc \u0634\u0648\u062f:<\/p>\n<ul>\n<li>\u0631\u0646\u062f\u0631 \u0633\u0645\u062a \u0633\u0631\u0648\u0631 \u0648\u0627\u0642\u0639\u06cc \u0628\u0627 \u062c\u0631\u06cc\u0627\u0646 \u062f\u0627\u062f\u0647<\/li>\n<li>\u0627\u0633\u062a\u0642\u0631\u0627\u0631 \u067e\u0644\u062a\u0641\u0631\u0645-\u0622\u06af\u0646\u0648\u0633\u062a\u06cc\u06a9 (\u0628\u0647 Vercel \u06af\u0631\u0647 \u062e\u0648\u0631\u062f\u0647 \u0646\u06cc\u0633\u062a)<\/li>\n<li>\u067e\u06cc\u0634\u0631\u0641\u062a \u067e\u06cc\u0634\u0631\u0648 \u0628\u0647 \u0637\u0648\u0631 \u067e\u06cc\u0634 \u0641\u0631\u0636<\/li>\n<li>\u062f\u0633\u062a \u0632\u062f\u0646 \u0628\u0647 \u0641\u0631\u0645 \u0628\u0647\u062a\u0631 \u0628\u062f\u0648\u0646 \u06a9\u062a\u0627\u0628\u062e\u0627\u0646\u0647 \u0647\u0627\u06cc \u0627\u0636\u0627\u0641\u06cc<\/li>\n<\/ul>\n<p>\u062f\u0631 \u06cc\u06a9 \u067e\u0631\u0648\u0698\u0647 \u0627\u062e\u06cc\u0631 \u060c \u062a\u063a\u06cc\u06cc\u0631 \u0627\u0632 Next.JS \u0628\u0647 \u0631\u06cc\u0645\u06cc\u06a9\u0633 \u0632\u0645\u0627\u0646 \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u0635\u0641\u062d\u0647 \u0631\u0627 35 \u066a \u062f\u0631 \u0627\u062a\u0635\u0627\u0644\u0627\u062a \u0622\u0647\u0633\u062a\u0647 \u06a9\u0627\u0647\u0634 \u062f\u0627\u062f\u0647 \u0648 \u067e\u0627\u06cc\u0647 \u06a9\u062f \u0645\u0627 \u0631\u0627 \u0628\u0647 \u0637\u0631\u0632 \u0686\u0634\u0645\u06af\u06cc\u0631\u06cc \u0633\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u062f.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"%D8%A7%D9%84%DA%AF%D9%88%DB%8C_%D9%85%D8%B9%D9%85%D8%A7%D8%B1%DB%8C_%D9%85%D8%AE%D9%81%DB%8C_%D9%85%D8%B9%D9%85%D8%A7%D8%B1%DB%8C_%D8%B4%D8%B4_%D8%B6%D9%84%D8%B9%DB%8C\"><\/span>\n<p>  \u0627\u0644\u06af\u0648\u06cc \u0645\u0639\u0645\u0627\u0631\u06cc \u0645\u062e\u0641\u06cc: \u0645\u0639\u0645\u0627\u0631\u06cc \u0634\u0634 \u0636\u0644\u0639\u06cc<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u0686\u06cc\u0632\u06cc \u0627\u0633\u062a \u06a9\u0647 \u062f\u0631 \u0627\u06a9\u062b\u0631 \u0622\u0645\u0648\u0632\u0634 \u0647\u0627\u06cc \u0631\u06cc\u0645\u06cc\u06a9\u0633 \u067e\u06cc\u062f\u0627 \u0646\u0645\u06cc \u06a9\u0646\u06cc\u062f: \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0645\u0639\u0645\u0627\u0631\u06cc \u0634\u0634 \u0636\u0644\u0639\u06cc (\u0647\u0645\u0686\u0646\u06cc\u0646 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u062f\u0631\u06af\u0627\u0647 \u0648 \u0622\u062f\u0627\u067e\u062a\u0648\u0631\u0647\u0627 \u0646\u06cc\u0632 \u0634\u0646\u0627\u062e\u062a\u0647 \u0645\u06cc \u0634\u0648\u062f) \u062f\u0631 \u0648\u0628\u0644\u0627\u06af \u062e\u0648\u062f.<\/p>\n<p>\u0628\u06cc\u0634\u062a\u0631 \u062a\u0648\u0633\u0639\u0647 \u062f\u0647\u0646\u062f\u06af\u0627\u0646 \u0648\u0628\u0644\u0627\u06af \u0647\u0627\u06cc \u0631\u06cc\u0645\u06cc\u06a9\u0633 \u062e\u0648\u062f \u0631\u0627 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u067e\u0631\u0648\u0646\u062f\u0647 \u0647\u0627\u06cc \u0645\u0633\u06cc\u0631 \u06cc\u06a9\u067e\u0627\u0631\u0686\u0647 \u0633\u0627\u062e\u062a\u0627\u0631 \u0645\u06cc \u062f\u0647\u0646\u062f \u06a9\u0647 \u0647\u0645\u0647 \u0686\u06cc\u0632 \u0631\u0627 \u0627\u0632 \u062f\u0631\u062e\u0648\u0627\u0633\u062a HTTP \u06af\u0631\u0641\u062a\u0647 \u062a\u0627 \u062f\u0627\u062f\u0647 \u0647\u0627\u06cc \u0648\u0627\u06a9\u0634\u06cc \u062f\u0627\u062f\u0647 \u062a\u0627 \u0627\u0631\u0627\u0626\u0647 UI \u0627\u062f\u0627\u0631\u0647 \u0645\u06cc \u06a9\u0646\u0646\u062f. \u0627\u06cc\u0646 \u0631\u0648\u06cc\u06a9\u0631\u062f \u0628\u0631\u0627\u06cc \u0648\u0628\u0644\u0627\u06af \u0647\u0627\u06cc \u0633\u0627\u062f\u0647 \u06a9\u0627\u0631 \u0645\u06cc \u06a9\u0646\u062f \u0627\u0645\u0627 \u0628\u0627 \u0631\u0634\u062f \u0648\u0628\u0644\u0627\u06af \u0634\u0645\u0627 \u0628\u0647 \u0633\u0631\u0639\u062a \u063a\u06cc\u0631\u0642\u0627\u0628\u0644 \u062a\u062d\u0645\u0644 \u0645\u06cc \u0634\u0648\u062f.<\/p>\n<p>\u062f\u0631 \u0639\u0648\u0636 \u060c \u0648\u0628\u0644\u0627\u06af \u062e\u0648\u062f \u0631\u0627 \u0628\u0647 \u0633\u0647 \u0644\u0627\u06cc\u0647 \u0645\u062c\u0632\u0627 \u062c\u062f\u0627 \u06a9\u0646\u06cc\u062f:<\/p>\n<div class=\"highlight js-code-highlight\" wp_automatic_readability=\"13\">\n<pre class=\"highlight javascript\"><code><span class=\"c1\">\/\/ app\/routes\/blog.$slug.tsx<\/span>\n<span class=\"k\">export<\/span> <span class=\"k\">async<\/span> <span class=\"kd\">function<\/span> <span class=\"nf\">loader<\/span><span class=\"p\">({<\/span> <span class=\"nx\">params<\/span> <span class=\"p\">})<\/span> <span class=\"p\">{<\/span>\n  <span class=\"c1\">\/\/ Loader as a simple adapter that calls a service<\/span>\n  <span class=\"k\">return<\/span> <span class=\"nf\">json<\/span><span class=\"p\">(<\/span><span class=\"k\">await<\/span> <span class=\"nf\">getBlogPostService<\/span><span class=\"p\">(<\/span><span class=\"nx\">params<\/span><span class=\"p\">.<\/span><span class=\"nx\">slug<\/span><span class=\"p\">));<\/span>\n<span class=\"p\">}<\/span>\n\n<span class=\"c1\">\/\/ app\/services\/blog.server.ts<\/span>\n<span class=\"k\">export<\/span> <span class=\"k\">async<\/span> <span class=\"kd\">function<\/span> <span class=\"nf\">getBlogPostService<\/span><span class=\"p\">(<\/span><span class=\"nx\">slug<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n  <span class=\"c1\">\/\/ Business logic separated from Remix-specific code<\/span>\n  <span class=\"kd\">const<\/span> <span class=\"nx\">post<\/span> <span class=\"o\">=<\/span> <span class=\"k\">await<\/span> <span class=\"nx\">blogRepository<\/span><span class=\"p\">.<\/span><span class=\"nf\">getBySlug<\/span><span class=\"p\">(<\/span><span class=\"nx\">slug<\/span><span class=\"p\">);<\/span>\n  <span class=\"k\">return<\/span> <span class=\"nf\">processPostForDisplay<\/span><span class=\"p\">(<\/span><span class=\"nx\">post<\/span><span class=\"p\">);<\/span>\n<span class=\"p\">}<\/span>\n\n<span class=\"c1\">\/\/ app\/repositories\/blog.server.ts<\/span>\n<span class=\"k\">export<\/span> <span class=\"k\">async<\/span> <span class=\"kd\">function<\/span> <span class=\"nf\">getBySlug<\/span><span class=\"p\">(<\/span><span class=\"nx\">slug<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n  <span class=\"c1\">\/\/ Data layer abstracted from business logic<\/span>\n  <span class=\"c1\">\/\/ Can work with file system, DB, CMS, etc.<\/span>\n  <span class=\"k\">return<\/span> <span class=\"c1\">\/\/ ...<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0627\u06cc\u0646 \u062c\u062f\u0627\u06cc\u06cc \u0645\u0632\u0627\u06cc\u0627\u06cc \u0645\u062e\u062a\u0644\u0641\u06cc \u0631\u0627 \u0627\u0631\u0627\u0626\u0647 \u0645\u06cc \u062f\u0647\u062f:<\/p>\n<ul>\n<li>\u0634\u0645\u0627 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0645\u0646\u0627\u0628\u0639 \u062f\u0627\u062f\u0647 \u0631\u0627 \u0628\u062f\u0648\u0646 \u062a\u063a\u06cc\u06cc\u0631 \u0645\u0646\u0637\u0642 \u06a9\u0633\u0628 \u0648 \u06a9\u0627\u0631 \u062a\u063a\u06cc\u06cc\u0631 \u062f\u0647\u06cc\u062f<\/li>\n<li>\u0622\u0632\u0645\u0627\u06cc\u0634 \u0648\u0627\u062d\u062f \u0633\u0627\u062f\u0647 \u0645\u06cc \u0634\u0648\u062f<\/li>\n<li>\u062f\u0633\u062a\u06af\u06cc\u0631\u0646\u062f\u06af\u0627\u0646 \u0645\u0633\u06cc\u0631 \u0646\u0627\u0632\u06a9 \u0648 \u0645\u062a\u0645\u0631\u06a9\u0632 \u0647\u0633\u062a\u0646\u062f<\/li>\n<li>\u0627\u0639\u0636\u0627\u06cc \u0645\u062e\u062a\u0644\u0641 \u062a\u06cc\u0645 \u0645\u06cc \u062a\u0648\u0627\u0646\u0646\u062f \u0631\u0648\u06cc \u0644\u0627\u06cc\u0647 \u0647\u0627\u06cc \u0645\u062e\u062a\u0644\u0641 \u06a9\u0627\u0631 \u06a9\u0646\u0646\u062f<\/li>\n<\/ul>\n<p>\u0628\u0631\u0627\u06cc \u0628\u0647\u0628\u0648\u062f \u0628\u06cc\u0634\u062a\u0631 \u0633\u0627\u0632\u0645\u0627\u0646 \u06a9\u062f \u060c \u0627\u0632 \u067e\u0648\u0634\u0647 \u0647\u0627\u06cc \u0648\u06cc\u0698\u06af\u06cc \u0628\u0647 \u062c\u0627\u06cc \u067e\u0648\u0634\u0647 \u0647\u0627\u06cc \u0645\u0633\u06cc\u0631 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f:<\/p>\n<div class=\"highlight js-code-highlight\" wp_automatic_readability=\"9\">\n<pre class=\"highlight plaintext\"><code>app\/\n\u251c\u2500\u2500 routes\/\n\u2502   \u2514\u2500\u2500 blog.$slug.tsx  # The route itself\n\u251c\u2500\u2500 features\/\n\u2502   \u2514\u2500\u2500 blog\/\n\u2502       \u251c\u2500\u2500 components\/ # Blog components\n\u2502       \u251c\u2500\u2500 services\/   # Services\n\u2502       \u2514\u2500\u2500 utils\/      # Utilities\n\u2514\u2500\u2500 shared\/             # Shared code\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0627\u06cc\u0646 \u0633\u0627\u062e\u062a\u0627\u0631 \u06a9\u062f \u0631\u0627 \u0628\u0627 \u0647\u0645 \u0645\u0631\u062a\u0628\u0637 \u0645\u06cc \u06a9\u0646\u062f \u060c \u0628\u0627\u0639\u062b \u06a9\u0627\u0647\u0634 \u0628\u0627\u0631 \u0634\u0646\u0627\u062e\u062a\u06cc \u0648 \u0628\u0647\u0628\u0648\u062f \u0642\u0627\u0628\u0644\u06cc\u062a \u062d\u0641\u0638 \u0645\u06cc \u0634\u0648\u062f.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"%D8%B1%D9%88%DB%8C%DA%A9%D8%B1%D8%AF_%D8%B0%D8%AE%DB%8C%D8%B1%D9%87_%D8%B3%D8%A7%D8%B2%DB%8C_%D9%85%D8%AD%D8%AA%D9%88%D8%A7%DB%8C_%D8%AA%D8%B1%DA%A9%DB%8C%D8%A8%DB%8C\"><\/span>\n<p>  \u0631\u0648\u06cc\u06a9\u0631\u062f \u0630\u062e\u06cc\u0631\u0647 \u0633\u0627\u0632\u06cc \u0645\u062d\u062a\u0648\u0627\u06cc \u062a\u0631\u06a9\u06cc\u0628\u06cc<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0648\u0642\u062a\u06cc \u0635\u062d\u0628\u062a \u0627\u0632 \u0630\u062e\u06cc\u0631\u0647 \u0645\u062d\u062a\u0648\u0627\u06cc Markdown \u0645\u06cc \u0634\u0648\u062f \u060c \u0628\u0647 \u0637\u0648\u0631 \u0645\u0639\u0645\u0648\u0644 \u0686\u0647\u0627\u0631 \u06af\u0632\u06cc\u0646\u0647 \u062f\u0627\u0631\u06cc\u062f:<\/p>\n<ol>\n<li>\u0633\u06cc\u0633\u062a\u0645 \u067e\u0631\u0648\u0646\u062f\u0647<\/li>\n<li>\u0645\u062c\u0645\u0648\u0639\u0647 \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647<\/li>\n<li>CMS \u0633\u0646\u062a\u06cc<\/li>\n<li>CMS \u0628\u062f\u0648\u0646 \u0633\u0631<\/li>\n<\/ol>\n<p>\u0628\u06cc\u0634\u062a\u0631 \u0622\u0645\u0648\u0632\u0634 \u0647\u0627 \u0641\u0642\u0637 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u06cc\u06a9\u06cc \u0627\u0632 \u0627\u06cc\u0646 \u0631\u0648\u06cc\u06a9\u0631\u062f\u0647\u0627 \u062a\u0648\u0635\u06cc\u0647 \u0645\u06cc \u06a9\u0646\u0646\u062f. \u0627\u0645\u0627 \u0628\u0639\u062f \u0627\u0632 \u0633\u0627\u0644\u0647\u0627 \u0648\u0628\u0644\u0627\u06af \u062a\u0648\u0644\u06cc\u062f \u060c \u0641\u0647\u0645\u06cc\u062f\u0645 \u06a9\u0647 <strong>\u0631\u0648\u06cc\u06a9\u0631\u062f \u062a\u0631\u06a9\u06cc\u0628\u06cc<\/strong> \u0628\u0647\u062a\u0631\u06cc\u0646 \u0647\u0627 \u0631\u0627 \u0627\u0632 \u0647\u0645\u0647 \u062c\u0647\u0627\u0646 \u0641\u0631\u0627\u0647\u0645 \u0645\u06cc \u06a9\u0646\u062f.<\/p>\n<p>\u0627\u06cc\u0646 \u0631\u0648\u06cc\u06a9\u0631\u062f\u06cc \u0627\u0633\u062a \u06a9\u0647 \u0645\u0646 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0631\u062f\u0645:<\/p>\n<div class=\"highlight js-code-highlight\" wp_automatic_readability=\"13\">\n<pre class=\"highlight javascript\"><code><span class=\"c1\">\/\/ Hybrid content storage architecture<\/span>\n\n<span class=\"c1\">\/\/ 1. Store markdown files in Git repository (for versioning)<\/span>\n<span class=\"c1\">\/\/ 2. Store metadata and indexes in PostgreSQL (for searching)<\/span>\n<span class=\"c1\">\/\/ 3. Use a headless CMS for content management (for editors)<\/span>\n<span class=\"c1\">\/\/ 4. Cache processed content at the edge (for performance)<\/span>\n\n<span class=\"k\">export<\/span> <span class=\"k\">async<\/span> <span class=\"kd\">function<\/span> <span class=\"nf\">loader<\/span><span class=\"p\">({<\/span> <span class=\"nx\">params<\/span> <span class=\"p\">})<\/span> <span class=\"p\">{<\/span>\n  <span class=\"c1\">\/\/ First check the cache<\/span>\n  <span class=\"kd\">const<\/span> <span class=\"nx\">cachedPost<\/span> <span class=\"o\">=<\/span> <span class=\"k\">await<\/span> <span class=\"nx\">edge<\/span><span class=\"p\">.<\/span><span class=\"nf\">getCache<\/span><span class=\"p\">(<\/span><span class=\"s2\">`post:<\/span><span class=\"p\">${<\/span><span class=\"nx\">params<\/span><span class=\"p\">.<\/span><span class=\"nx\">slug<\/span><span class=\"p\">}<\/span><span class=\"s2\">`<\/span><span class=\"p\">);<\/span>\n  <span class=\"k\">if <\/span><span class=\"p\">(<\/span><span class=\"nx\">cachedPost<\/span><span class=\"p\">)<\/span> <span class=\"k\">return<\/span> <span class=\"nf\">json<\/span><span class=\"p\">(<\/span><span class=\"nx\">cachedPost<\/span><span class=\"p\">);<\/span>\n\n  <span class=\"c1\">\/\/ Get metadata from database<\/span>\n  <span class=\"kd\">const<\/span> <span class=\"nx\">metadata<\/span> <span class=\"o\">=<\/span> <span class=\"k\">await<\/span> <span class=\"nx\">db<\/span><span class=\"p\">.<\/span><span class=\"nf\">getPostMetadata<\/span><span class=\"p\">(<\/span><span class=\"nx\">params<\/span><span class=\"p\">.<\/span><span class=\"nx\">slug<\/span><span class=\"p\">);<\/span>\n\n  <span class=\"c1\">\/\/ Get content from Git<\/span>\n  <span class=\"kd\">const<\/span> <span class=\"nx\">content<\/span> <span class=\"o\">=<\/span> <span class=\"k\">await<\/span> <span class=\"nx\">git<\/span><span class=\"p\">.<\/span><span class=\"nf\">getContent<\/span><span class=\"p\">(<\/span><span class=\"nx\">metadata<\/span><span class=\"p\">.<\/span><span class=\"nx\">filepath<\/span><span class=\"p\">);<\/span>\n\n  <span class=\"c1\">\/\/ Process markdown and cache result<\/span>\n  <span class=\"kd\">const<\/span> <span class=\"nx\">processedContent<\/span> <span class=\"o\">=<\/span> <span class=\"k\">await<\/span> <span class=\"nx\">mdx<\/span><span class=\"p\">.<\/span><span class=\"nf\">process<\/span><span class=\"p\">(<\/span><span class=\"nx\">content<\/span><span class=\"p\">);<\/span>\n  <span class=\"k\">await<\/span> <span class=\"nx\">edge<\/span><span class=\"p\">.<\/span><span class=\"nf\">setCache<\/span><span class=\"p\">(<\/span><span class=\"s2\">`post:<\/span><span class=\"p\">${<\/span><span class=\"nx\">params<\/span><span class=\"p\">.<\/span><span class=\"nx\">slug<\/span><span class=\"p\">}<\/span><span class=\"s2\">`<\/span><span class=\"p\">,<\/span> <span class=\"p\">{<\/span> \n    <span class=\"nx\">metadata<\/span><span class=\"p\">,<\/span> \n    <span class=\"na\">content<\/span><span class=\"p\">:<\/span> <span class=\"nx\">processedContent<\/span> \n  <span class=\"p\">});<\/span>\n\n  <span class=\"k\">return<\/span> <span class=\"nf\">json<\/span><span class=\"p\">({<\/span> <span class=\"nx\">metadata<\/span><span class=\"p\">,<\/span> <span class=\"na\">content<\/span><span class=\"p\">:<\/span> <span class=\"nx\">processedContent<\/span> <span class=\"p\">});<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0627\u06cc\u0646 \u0631\u0648\u06cc\u06a9\u0631\u062f \u0627\u0631\u0627\u0626\u0647 \u0645\u06cc \u062f\u0647\u062f:<\/p>\n<ul>\n<li>\u06a9\u0646\u062a\u0631\u0644 \u0646\u0633\u062e\u0647 \u0627\u0632 \u0637\u0631\u06cc\u0642 git<\/li>\n<li>\u062c\u0633\u062a\u062c\u0648\u06cc \u0633\u0631\u06cc\u0639 \u0648 \u0641\u06cc\u0644\u062a\u0631 \u0627\u0632 \u0637\u0631\u06cc\u0642 PostgreSQL<\/li>\n<li>\u0631\u0627\u0628\u0637 \u0648\u06cc\u0631\u0627\u06cc\u0634 \u06a9\u0627\u0631\u0628\u0631 \u067e\u0633\u0646\u062f \u0627\u0632 \u0637\u0631\u06cc\u0642 CMS \u0628\u062f\u0648\u0646 \u0633\u0631<\/li>\n<li>\u062a\u062d\u0648\u06cc\u0644 \u0631\u0639\u062f \u0648 \u0628\u0631\u0642 \u0627\u0632 \u0637\u0631\u06cc\u0642 \u062d\u0627\u0641\u0638\u0647 \u067e\u0646\u0647\u0627\u0646 \u0644\u0628\u0647<\/li>\n<\/ul>\n<p>\u0645\u0646 \u0627\u06cc\u0646 \u0627\u0644\u06af\u0648\u06cc \u0631\u0627 \u062f\u0631 \u0686\u0646\u062f\u06cc\u0646 \u0648\u0628\u0644\u0627\u06af \u062a\u0648\u0644\u06cc\u062f\u06cc \u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u06a9\u0631\u062f\u0647 \u0627\u0645 \u060c \u0648 \u0636\u0645\u0646 \u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc \u0627\u0632 \u062c\u0633\u062a\u062c\u0648\u06cc \u0645\u062a\u0646 \u06a9\u0627\u0645\u0644 \u062f\u0631 \u0647\u0632\u0627\u0631\u0627\u0646 \u0645\u0642\u0627\u0644\u0647 \u060c \u0628\u0647 \u0632\u0645\u0627\u0646 \u0628\u0627\u0631\u06af\u06cc\u0631\u06cc \u0632\u06cc\u0631 500ms \u0631\u0633\u06cc\u062f\u0647 \u0627\u0645.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"%D8%A8%D8%A7%D8%B2_%DA%A9%D8%B1%D8%AF%D9%86_%D9%BE%D8%AA%D8%A7%D9%86%D8%B3%DB%8C%D9%84_%DA%A9%D8%A7%D9%85%D9%84_MDX\"><\/span>\n<p>  \u0628\u0627\u0632 \u06a9\u0631\u062f\u0646 \u067e\u062a\u0627\u0646\u0633\u06cc\u0644 \u06a9\u0627\u0645\u0644 MDX<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0628\u06cc\u0634\u062a\u0631 \u062a\u0648\u0633\u0639\u0647 \u062f\u0647\u0646\u062f\u06af\u0627\u0646 \u0628\u0627 MDX (Markdown \u0628\u0627 JSX) \u0641\u0642\u0637 &#8220;Markdown Enhanced&#8221; \u0631\u0641\u062a\u0627\u0631 \u0645\u06cc \u06a9\u0646\u0646\u062f. \u0627\u06cc\u0646 \u0628\u0647 \u0634\u062f\u062a \u06a9\u0627\u0631\u06cc \u0631\u0627 \u06a9\u0647 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0628\u0627 \u0648\u0628\u0644\u0627\u06af \u062e\u0648\u062f \u0627\u0646\u062c\u0627\u0645 \u062f\u0647\u06cc\u062f \u0645\u062d\u062f\u0648\u062f \u0645\u06cc \u06a9\u0646\u062f.<\/p>\n<p>MDX \u062f\u0631 \u0648\u0627\u0642\u0639 \u06cc\u06a9 \u0633\u06cc\u0633\u062a\u0645 \u0645\u0624\u0644\u0641\u0647 \u062a\u0645\u0627\u0645 \u0639\u06cc\u0627\u0631 \u0627\u0633\u062a \u06a9\u0647 \u0628\u0647 \u0634\u0645\u0627 \u0627\u0645\u06a9\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f \u062a\u062c\u0631\u0628\u06cc\u0627\u062a \u062a\u0639\u0627\u0645\u0644\u06cc \u0631\u0627 \u062f\u0631\u0633\u062a \u062f\u0631 \u0645\u062d\u062a\u0648\u0627\u06cc \u062e\u0648\u062f \u0628\u0633\u0627\u0632\u06cc\u062f.<\/p>\n<p>\u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u0646\u062d\u0648\u0647 \u062a\u0646\u0638\u06cc\u0645 \u06cc\u06a9 \u0633\u06cc\u0633\u062a\u0645 \u0645\u0624\u0644\u0641\u0647 \u0633\u0641\u0627\u0631\u0634\u06cc \u062f\u0631 \u0648\u0628\u0644\u0627\u06af \u0631\u06cc\u0645\u06cc\u06a9\u0633 \u062e\u0648\u062f \u0622\u0648\u0631\u062f\u0647 \u0634\u062f\u0647 \u0627\u0633\u062a:<\/p>\n<div class=\"highlight js-code-highlight\" wp_automatic_readability=\"13\">\n<pre class=\"highlight jsx\"><code><span class=\"c1\">\/\/ app\/components\/BlogComponents.tsx<\/span>\n<span class=\"k\">export<\/span> <span class=\"kd\">const<\/span> <span class=\"nx\">CodeSandbox<\/span> <span class=\"o\">=<\/span> <span class=\"p\">({<\/span> <span class=\"nx\">id<\/span><span class=\"p\">,<\/span> <span class=\"nx\">height<\/span> <span class=\"o\">=<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">500px<\/span><span class=\"dl\">\"<\/span> <span class=\"p\">})<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">(<\/span>\n  <span class=\"p\">&lt;<\/span><span class=\"nt\">iframe<\/span>\n    <span class=\"na\">src<\/span><span class=\"p\">=<\/span><span class=\"si\">{<\/span><span class=\"s2\">`https:\/\/codesandbox.io\/embed\/<\/span><span class=\"p\">${<\/span><span class=\"nx\">id<\/span><span class=\"p\">}<\/span><span class=\"s2\">`<\/span><span class=\"si\">}<\/span>\n    <span class=\"na\">className<\/span><span class=\"p\">=<\/span><span class=\"s\">\"w-full rounded-md shadow-lg\"<\/span>\n    <span class=\"na\">style<\/span><span class=\"p\">=<\/span><span class=\"si\">{<\/span><span class=\"p\">{<\/span> <span class=\"nx\">height<\/span> <span class=\"p\">}<\/span><span class=\"si\">}<\/span>\n    <span class=\"na\">allow<\/span><span class=\"p\">=<\/span><span class=\"s\">\"accelerometer; camera; encrypted-media; geolocation; microphone\"<\/span>\n    <span class=\"na\">title<\/span><span class=\"p\">=<\/span><span class=\"s\">\"Code example\"<\/span>\n  <span class=\"p\">&gt;<\/span><span class=\"nt\">iframe<\/span><span class=\"p\">&gt;<\/span>\n<span class=\"p\">);<\/span>\n\n<span class=\"c1\">\/\/ app\/routes\/blog._index.tsx<\/span>\n<span class=\"k\">import<\/span> <span class=\"o\">*<\/span> <span class=\"k\">as<\/span> <span class=\"nx\">React<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">react<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\n<span class=\"k\">import<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">MDXProvider<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">@mdx-js\/react<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\n<span class=\"k\">import<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">Outlet<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">@remix-run\/react<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\n<span class=\"k\">import<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">CodeSandbox<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">~\/components\/BlogComponents<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\n\n<span class=\"kd\">const<\/span> <span class=\"nx\">components<\/span> <span class=\"o\">=<\/span> <span class=\"p\">{<\/span>\n  <span class=\"c1\">\/\/ Replace standard HTML elements<\/span>\n  <span class=\"na\">h1<\/span><span class=\"p\">:<\/span> <span class=\"nx\">props<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">&lt;<\/span><span class=\"nt\">h1<\/span> <span class=\"na\">className<\/span><span class=\"p\">=<\/span><span class=\"s\">\"text-3xl font-bold mb-4\"<\/span> <span class=\"si\">{<\/span><span class=\"p\">...<\/span><span class=\"nx\">props<\/span><span class=\"si\">}<\/span> <span class=\"p\">\/&gt;,<\/span>\n  <span class=\"c1\">\/\/ Add custom components<\/span>\n  <span class=\"nx\">CodeSandbox<\/span><span class=\"p\">,<\/span>\n<span class=\"p\">};<\/span>\n\n<span class=\"k\">export<\/span> <span class=\"k\">default<\/span> <span class=\"kd\">function<\/span> <span class=\"nf\">BlogLayout<\/span><span class=\"p\">()<\/span> <span class=\"p\">{<\/span>\n  <span class=\"k\">return <\/span><span class=\"p\">(<\/span>\n    <span class=\"p\">&lt;<\/span><span class=\"nc\">MDXProvider<\/span> <span class=\"na\">components<\/span><span class=\"p\">=<\/span><span class=\"si\">{<\/span><span class=\"nx\">components<\/span><span class=\"si\">}<\/span><span class=\"p\">&gt;<\/span>\n      <span class=\"p\">&lt;<\/span><span class=\"nt\">div<\/span> <span class=\"na\">className<\/span><span class=\"p\">=<\/span><span class=\"s\">\"blog-container max-w-3xl mx-auto\"<\/span><span class=\"p\">&gt;<\/span>\n        <span class=\"p\">&lt;<\/span><span class=\"nc\">Outlet<\/span> <span class=\"p\">\/&gt;<\/span>\n      <span class=\"p\"\/><span class=\"nt\">div<\/span><span class=\"p\">&gt;<\/span>\n    <span class=\"p\"\/><span class=\"nc\">MDXProvider<\/span><span class=\"p\">&gt;<\/span>\n  <span class=\"p\">);<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0627\u06a9\u0646\u0648\u0646 \u062f\u0631 \u067e\u0631\u0648\u0646\u062f\u0647 \u0647\u0627\u06cc .mdx \u062e\u0648\u062f \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0627\u0632 \u0627\u06cc\u0646 \u0645\u0624\u0644\u0641\u0647 \u0647\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f:<\/p>\n<div class=\"highlight js-code-highlight\" wp_automatic_readability=\"8\">\n<pre class=\"highlight plaintext\"><code>---\ntitle: \"Working with React Hooks\"\ndate: \"2025-05-10\"\n---\n\n# {attributes.title}\n\nHere's a live example of the code we're discussing:\n\n<codesandbox id=\"react-hooks-demo-2025\"\/>\n\nThe key advantage of this approach is...\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0634\u0645\u0627 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0628\u0627 \u0627\u062a\u0635\u0627\u0644 MDX \u0628\u0627 \u0645\u0646\u0627\u0628\u0639 \u062f\u0627\u062f\u0647 \u062e\u0627\u0631\u062c\u06cc \u060c \u0627\u06cc\u0646 \u0645\u0633\u0626\u0644\u0647 \u0631\u0627 \u062d\u062a\u06cc \u0628\u06cc\u0634\u062a\u0631 \u06a9\u0646\u06cc\u062f:<\/p>\n<div class=\"highlight js-code-highlight\" wp_automatic_readability=\"8\">\n<pre class=\"highlight jsx\"><code><span class=\"c1\">\/\/ In your MDX file:<\/span>\n<span class=\"k\">export<\/span> <span class=\"kd\">const<\/span> <span class=\"nx\">metadata<\/span> <span class=\"o\">=<\/span> <span class=\"p\">{<\/span>\n  <span class=\"na\">datasetId<\/span><span class=\"p\">:<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">monthly-active-users-2025<\/span><span class=\"dl\">'<\/span>\n<span class=\"p\">};<\/span>\n\n<span class=\"err\">#<\/span> <span class=\"nx\">User<\/span> <span class=\"nx\">Growth<\/span> <span class=\"nx\">Analysis<\/span>\n\n<span class=\"o\">&lt;<\/span><span class=\"nx\">DynamicChart<\/span> <span class=\"nx\">datasetId<\/span><span class=\"o\">=<\/span><span class=\"p\">{<\/span><span class=\"nx\">metadata<\/span><span class=\"p\">.<\/span><span class=\"nx\">datasetId<\/span><span class=\"p\">}<\/span> <span class=\"sr\">\/<\/span><span class=\"err\">&gt;\n<\/span><\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0627\u06cc\u0646 \u062a\u06a9\u0646\u06cc\u06a9 \u0628\u0647 \u0634\u0645\u0627 \u0627\u0645\u06a9\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f \u0627\u0633\u0646\u0627\u062f &#8220;\u0632\u0646\u062f\u0647&#8221; \u0631\u0627 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f \u06a9\u0647 \u0636\u0645\u0646 \u062d\u0641\u0638 \u0633\u0627\u062f\u06af\u06cc \u0646\u0648\u06cc\u0633\u0646\u062f\u0647 Markdown \u060c \u062f\u0627\u062f\u0647 \u0647\u0627\u06cc \u0632\u0645\u0627\u0646 \u0648\u0627\u0642\u0639\u06cc \u0631\u0627 \u0628\u0647 \u062e\u0648\u062f \u062c\u0644\u0628 \u0645\u06cc \u06a9\u0646\u0646\u062f.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"%D8%A7%D8%B3%D8%AA%D8%B1%D8%A7%D8%AA%DA%98%DB%8C_%D8%B0%D8%AE%DB%8C%D8%B1%D9%87_%D8%B3%D9%87_%D9%84%D8%A7%DB%8C%D9%87_%D8%A8%D8%B1%D8%A7%DB%8C_%D8%B9%D9%85%D9%84%DA%A9%D8%B1%D8%AF_%D8%B5%D8%A7%D8%B9%D9%82%D9%87\"><\/span>\n<p>  \u0627\u0633\u062a\u0631\u0627\u062a\u0698\u06cc \u0630\u062e\u06cc\u0631\u0647 \u0633\u0647 \u0644\u0627\u06cc\u0647 \u0628\u0631\u0627\u06cc \u0639\u0645\u0644\u06a9\u0631\u062f \u0635\u0627\u0639\u0642\u0647<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0628\u06cc\u0634\u062a\u0631 \u0648\u0628\u0644\u0627\u06af \u0647\u0627 \u062f\u0631 \u0635\u0648\u0631\u062a \u0648\u062c\u0648\u062f \u060c \u062d\u0627\u0641\u0638\u0647 \u067e\u0646\u0647\u0627\u0646 \u0627\u0633\u0627\u0633\u06cc \u0631\u0627 \u0627\u062c\u0631\u0627 \u0645\u06cc \u06a9\u0646\u0646\u062f. \u0628\u0631\u0627\u06cc \u0639\u0645\u0644\u06a9\u0631\u062f \u0648\u0627\u0642\u0639\u0627\u064b \u0627\u0633\u062a\u062b\u0646\u0627\u06cc\u06cc \u060c \u06cc\u06a9 \u0627\u0633\u062a\u0631\u0627\u062a\u0698\u06cc \u0630\u062e\u06cc\u0631\u0647 \u0633\u0647 \u0644\u0627\u06cc\u0647 \u0631\u0627 \u0627\u062c\u0631\u0627 \u06a9\u0646\u06cc\u062f:<\/p>\n<div class=\"highlight js-code-highlight\" wp_automatic_readability=\"16\">\n<pre class=\"highlight javascript\"><code><span class=\"c1\">\/\/ 1. HTTP caching via headers<\/span>\n<span class=\"k\">export<\/span> <span class=\"kd\">function<\/span> <span class=\"nf\">headers<\/span><span class=\"p\">()<\/span> <span class=\"p\">{<\/span>\n  <span class=\"k\">return<\/span> <span class=\"p\">{<\/span>\n    <span class=\"dl\">\"<\/span><span class=\"s2\">Cache-Control<\/span><span class=\"dl\">\"<\/span><span class=\"p\">:<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">public, max-age=300, s-maxage=3600, stale-while-revalidate=86400<\/span><span class=\"dl\">\"<\/span><span class=\"p\">,<\/span>\n  <span class=\"p\">};<\/span>\n<span class=\"p\">}<\/span>\n\n<span class=\"c1\">\/\/ 2. In-memory server caching<\/span>\n<span class=\"kd\">let<\/span> <span class=\"nx\">cache<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"nc\">Map<\/span><span class=\"p\">();<\/span>\n\n<span class=\"k\">export<\/span> <span class=\"k\">async<\/span> <span class=\"kd\">function<\/span> <span class=\"nf\">loader<\/span><span class=\"p\">({<\/span> <span class=\"nx\">params<\/span><span class=\"p\">,<\/span> <span class=\"nx\">request<\/span> <span class=\"p\">})<\/span> <span class=\"p\">{<\/span>\n  <span class=\"kd\">const<\/span> <span class=\"nx\">slug<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">params<\/span><span class=\"p\">.<\/span><span class=\"nx\">slug<\/span><span class=\"p\">;<\/span>\n  <span class=\"kd\">const<\/span> <span class=\"nx\">cacheKey<\/span> <span class=\"o\">=<\/span> <span class=\"s2\">`post:<\/span><span class=\"p\">${<\/span><span class=\"nx\">slug<\/span><span class=\"p\">}<\/span><span class=\"s2\">`<\/span><span class=\"p\">;<\/span>\n\n  <span class=\"c1\">\/\/ Check server memory cache<\/span>\n  <span class=\"k\">if <\/span><span class=\"p\">(<\/span><span class=\"nx\">cache<\/span><span class=\"p\">.<\/span><span class=\"nf\">has<\/span><span class=\"p\">(<\/span><span class=\"nx\">cacheKey<\/span><span class=\"p\">))<\/span> <span class=\"p\">{<\/span>\n    <span class=\"k\">return<\/span> <span class=\"nf\">json<\/span><span class=\"p\">(<\/span><span class=\"nx\">cache<\/span><span class=\"p\">.<\/span><span class=\"nf\">get<\/span><span class=\"p\">(<\/span><span class=\"nx\">cacheKey<\/span><span class=\"p\">));<\/span>\n  <span class=\"p\">}<\/span>\n\n  <span class=\"c1\">\/\/ Fetch and process data<\/span>\n  <span class=\"kd\">const<\/span> <span class=\"nx\">post<\/span> <span class=\"o\">=<\/span> <span class=\"k\">await<\/span> <span class=\"nf\">getPost<\/span><span class=\"p\">(<\/span><span class=\"nx\">slug<\/span><span class=\"p\">);<\/span>\n\n  <span class=\"c1\">\/\/ Store in server memory cache<\/span>\n  <span class=\"nx\">cache<\/span><span class=\"p\">.<\/span><span class=\"nf\">set<\/span><span class=\"p\">(<\/span><span class=\"nx\">cacheKey<\/span><span class=\"p\">,<\/span> <span class=\"nx\">post<\/span><span class=\"p\">);<\/span>\n\n  <span class=\"k\">return<\/span> <span class=\"nf\">json<\/span><span class=\"p\">(<\/span><span class=\"nx\">post<\/span><span class=\"p\">);<\/span>\n<span class=\"p\">}<\/span>\n\n<span class=\"c1\">\/\/ 3. Client-side prefetching<\/span>\n<span class=\"kd\">function<\/span> <span class=\"nf\">BlogIndex<\/span><span class=\"p\">()<\/span> <span class=\"p\">{<\/span>\n  <span class=\"kd\">const<\/span> <span class=\"nx\">fetcher<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">useFetcher<\/span><span class=\"p\">();<\/span>\n\n  <span class=\"c1\">\/\/ Prefetch related posts on hover<\/span>\n  <span class=\"kd\">function<\/span> <span class=\"nf\">handleMouseEnter<\/span><span class=\"p\">(<\/span><span class=\"nx\">slug<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n    <span class=\"nx\">fetcher<\/span><span class=\"p\">.<\/span><span class=\"nf\">load<\/span><span class=\"p\">(<\/span><span class=\"s2\">`\/blog\/<\/span><span class=\"p\">${<\/span><span class=\"nx\">slug<\/span><span class=\"p\">}<\/span><span class=\"s2\">`<\/span><span class=\"p\">);<\/span>\n  <span class=\"p\">}<\/span>\n\n  <span class=\"k\">return <\/span><span class=\"p\">(<\/span>\n    <span class=\"o\">&lt;<\/span><span class=\"nx\">ul<\/span><span class=\"o\">&gt;<\/span>\n      <span class=\"p\">{<\/span><span class=\"nx\">posts<\/span><span class=\"p\">.<\/span><span class=\"nf\">map<\/span><span class=\"p\">(<\/span><span class=\"nx\">post<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">(<\/span>\n        <span class=\"o\">&lt;<\/span><span class=\"nx\">li<\/span> \n          <span class=\"nx\">key<\/span><span class=\"o\">=<\/span><span class=\"p\">{<\/span><span class=\"nx\">post<\/span><span class=\"p\">.<\/span><span class=\"nx\">slug<\/span><span class=\"p\">}<\/span>\n          <span class=\"nx\">onMouseEnter<\/span><span class=\"o\">=<\/span><span class=\"p\">{()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nf\">handleMouseEnter<\/span><span class=\"p\">(<\/span><span class=\"nx\">post<\/span><span class=\"p\">.<\/span><span class=\"nx\">slug<\/span><span class=\"p\">)}<\/span>\n        <span class=\"o\">&gt;<\/span>\n          <span class=\"o\">&lt;<\/span><span class=\"nx\">Link<\/span> <span class=\"nx\">to<\/span><span class=\"o\">=<\/span><span class=\"p\">{<\/span><span class=\"s2\">`\/blog\/<\/span><span class=\"p\">${<\/span><span class=\"nx\">post<\/span><span class=\"p\">.<\/span><span class=\"nx\">slug<\/span><span class=\"p\">}<\/span><span class=\"s2\">`<\/span><span class=\"p\">}<\/span><span class=\"o\">&gt;<\/span><span class=\"p\">{<\/span><span class=\"nx\">post<\/span><span class=\"p\">.<\/span><span class=\"nx\">title<\/span><span class=\"p\">}<\/span><span class=\"o\">&lt;<\/span><span class=\"sr\">\/Link<\/span><span class=\"err\">&gt;\n<\/span>        <span class=\"o\">&lt;<\/span><span class=\"sr\">\/li<\/span><span class=\"err\">&gt;\n<\/span>      <span class=\"p\">))}<\/span>\n    <span class=\"o\">&lt;<\/span><span class=\"sr\">\/ul<\/span><span class=\"err\">&gt;\n<\/span>  <span class=\"p\">);<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0627\u06cc\u0646 \u0631\u0648\u06cc\u06a9\u0631\u062f \u0686\u0646\u062f \u0644\u0627\u06cc\u0647 \u062a\u0636\u0645\u06cc\u0646 \u0645\u06cc \u06a9\u0646\u062f:<\/p>\n<ol>\n<li>\u062a\u06a9\u0631\u0627\u0631 \u0628\u0627\u0632\u062f\u06cc\u062f \u06a9\u0646\u0646\u062f\u06af\u0627\u0646 \u0627\u0632 \u0645\u0631\u0648\u0631\u06af\u0631 \u062e\u0648\u062f \u0645\u062d\u062a\u0648\u0627\u06cc \u0630\u062e\u06cc\u0631\u0647 \u0634\u062f\u0647 \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u06cc \u06a9\u0646\u0646\u062f<\/li>\n<li>\u0630\u062e\u06cc\u0631\u0647 CDN \u0628\u0631\u0627\u06cc \u062a\u0648\u0632\u06cc\u0639 \u062c\u0647\u0627\u0646\u06cc<\/li>\n<li>\u062d\u0627\u0641\u0638\u0647 \u067e\u0646\u0647\u0627\u0646 \u062d\u0627\u0641\u0638\u0647 \u0633\u0631\u0648\u0631 \u0628\u0631\u0627\u06cc \u062a\u0648\u0644\u06cc\u062f \u0633\u0631\u06cc\u0639<\/li>\n<li>\u067e\u06cc\u0634\u06af\u06cc\u0631\u06cc \u0628\u0631\u0627\u06cc \u0646\u0627\u0648\u0628\u0631\u06cc \u0641\u0648\u0631\u06cc<\/li>\n<\/ol>\n<p>\u0628\u0631\u0627\u06cc \u0634\u0646\u0627\u0633\u0627\u06cc\u06cc \u062a\u0646\u06af\u0646\u0627\u0647\u0627\u06cc \u0639\u0645\u0644\u06a9\u0631\u062f \u060c \u0627\u0632 API \u0632\u0645\u0627\u0646 \u0628\u0646\u062f\u06cc \u0633\u0631\u0648\u0631 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f:<\/p>\n<div class=\"highlight js-code-highlight\" wp_automatic_readability=\"12\">\n<pre class=\"highlight javascript\"><code><span class=\"k\">export<\/span> <span class=\"k\">async<\/span> <span class=\"kd\">function<\/span> <span class=\"nf\">loader<\/span><span class=\"p\">({<\/span> <span class=\"nx\">request<\/span> <span class=\"p\">})<\/span> <span class=\"p\">{<\/span>\n  <span class=\"kd\">const<\/span> <span class=\"nx\">start<\/span> <span class=\"o\">=<\/span> <span class=\"nb\">Date<\/span><span class=\"p\">.<\/span><span class=\"nf\">now<\/span><span class=\"p\">();<\/span>\n\n  <span class=\"c1\">\/\/ Get data<\/span>\n  <span class=\"kd\">const<\/span> <span class=\"nx\">posts<\/span> <span class=\"o\">=<\/span> <span class=\"k\">await<\/span> <span class=\"nf\">getPosts<\/span><span class=\"p\">();<\/span>\n  <span class=\"kd\">const<\/span> <span class=\"nx\">dbTime<\/span> <span class=\"o\">=<\/span> <span class=\"nb\">Date<\/span><span class=\"p\">.<\/span><span class=\"nf\">now<\/span><span class=\"p\">()<\/span> <span class=\"o\">-<\/span> <span class=\"nx\">start<\/span><span class=\"p\">;<\/span>\n\n  <span class=\"c1\">\/\/ Process markdown<\/span>\n  <span class=\"kd\">const<\/span> <span class=\"nx\">startProcessing<\/span> <span class=\"o\">=<\/span> <span class=\"nb\">Date<\/span><span class=\"p\">.<\/span><span class=\"nf\">now<\/span><span class=\"p\">();<\/span>\n  <span class=\"kd\">const<\/span> <span class=\"nx\">processedPosts<\/span> <span class=\"o\">=<\/span> <span class=\"k\">await<\/span> <span class=\"nb\">Promise<\/span><span class=\"p\">.<\/span><span class=\"nf\">all<\/span><span class=\"p\">(<\/span><span class=\"nx\">posts<\/span><span class=\"p\">.<\/span><span class=\"nf\">map<\/span><span class=\"p\">(<\/span><span class=\"nx\">processMarkdown<\/span><span class=\"p\">));<\/span>\n  <span class=\"kd\">const<\/span> <span class=\"nx\">processingTime<\/span> <span class=\"o\">=<\/span> <span class=\"nb\">Date<\/span><span class=\"p\">.<\/span><span class=\"nf\">now<\/span><span class=\"p\">()<\/span> <span class=\"o\">-<\/span> <span class=\"nx\">startProcessing<\/span><span class=\"p\">;<\/span>\n\n  <span class=\"k\">return<\/span> <span class=\"nf\">json<\/span><span class=\"p\">(<\/span><span class=\"nx\">processedPosts<\/span><span class=\"p\">,<\/span> <span class=\"p\">{<\/span>\n    <span class=\"na\">headers<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\n      <span class=\"dl\">\"<\/span><span class=\"s2\">Server-Timing<\/span><span class=\"dl\">\"<\/span><span class=\"p\">:<\/span> <span class=\"s2\">`db;dur=<\/span><span class=\"p\">${<\/span><span class=\"nx\">dbTime<\/span><span class=\"p\">}<\/span><span class=\"s2\">, markdown;dur=<\/span><span class=\"p\">${<\/span><span class=\"nx\">processingTime<\/span><span class=\"p\">}<\/span><span class=\"s2\">`<\/span>\n    <span class=\"p\">}<\/span>\n  <span class=\"p\">});<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0627\u06cc\u0646 \u062a\u06a9\u0646\u06cc\u06a9 \u0628\u0647 \u0634\u0645\u0627 \u06a9\u0645\u06a9 \u0645\u06cc \u06a9\u0646\u062f \u062a\u0627 \u062f\u0642\u06cc\u0642\u0627\u064b \u062f\u0631 \u0645\u0648\u0627\u0631\u062f\u06cc \u06a9\u0647 \u0645\u0634\u06a9\u0644\u0627\u062a \u0639\u0645\u0644\u06a9\u0631\u062f \u0631\u062e \u0645\u06cc \u062f\u0647\u062f \u060c \u0645\u0634\u062e\u0635 \u06a9\u0646\u06cc\u062f \u0648 \u062a\u0644\u0627\u0634 \u0647\u0627\u06cc \u0628\u0647\u06cc\u0646\u0647 \u0633\u0627\u0632\u06cc \u062e\u0648\u062f \u0631\u0627 \u0628\u0631 \u0627\u06cc\u0646 \u0627\u0633\u0627\u0633 \u0645\u062a\u0645\u0631\u06a9\u0632 \u06a9\u0646\u06cc\u062f.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"%D8%A8%D9%87%DB%8C%D9%86%D9%87_%D8%B3%D8%A7%D8%B2%DB%8C_%D8%B3%D8%A6%D9%88_%D8%A8%DB%8C%D8%B4%D8%AA%D8%B1_%D8%AA%D9%88%D8%B3%D8%B9%D9%87_%D8%AF%D9%87%D9%86%D8%AF%DA%AF%D8%A7%D9%86_%D8%A7%D8%B2_%D8%AF%D8%B3%D8%AA_%D9%85%DB%8C_%D8%AF%D9%87%D9%86%D8%AF\"><\/span>\n<p>  \u0628\u0647\u06cc\u0646\u0647 \u0633\u0627\u0632\u06cc \u0633\u0626\u0648 \u0628\u06cc\u0634\u062a\u0631 \u062a\u0648\u0633\u0639\u0647 \u062f\u0647\u0646\u062f\u06af\u0627\u0646 \u0627\u0632 \u062f\u0633\u062a \u0645\u06cc \u062f\u0647\u0646\u062f<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0628\u0631\u0627\u06cc \u06cc\u06a9 \u0648\u0628\u0644\u0627\u06af \u0641\u0646\u06cc \u060c \u0633\u0626\u0648 \u0641\u0642\u0637 \u0645\u0631\u0628\u0648\u0637 \u0628\u0647 \u0628\u0631\u0686\u0633\u0628 \u0647\u0627\u06cc \u0627\u0633\u0627\u0633\u06cc \u0645\u062a\u0627 \u0646\u06cc\u0633\u062a. \u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u0631\u0648\u06cc\u06a9\u0631\u062f \u062c\u0627\u0645\u0639\u06cc \u06a9\u0647 \u0645\u0646 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u0645 \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u062f:<\/p>\n<div class=\"highlight js-code-highlight\" wp_automatic_readability=\"46\">\n<pre class=\"highlight jsx\"><code><span class=\"c1\">\/\/ app\/routes\/blog.$slug.tsx<\/span>\n<span class=\"k\">export<\/span> <span class=\"kd\">const<\/span> <span class=\"nx\">meta<\/span> <span class=\"o\">=<\/span> <span class=\"p\">({<\/span> <span class=\"nx\">data<\/span> <span class=\"p\">})<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\n  <span class=\"k\">if <\/span><span class=\"p\">(<\/span><span class=\"o\">!<\/span><span class=\"nx\">data<\/span><span class=\"p\">?.<\/span><span class=\"nx\">post<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n    <span class=\"k\">return<\/span> <span class=\"p\">[<\/span>\n      <span class=\"p\">{<\/span> <span class=\"na\">title<\/span><span class=\"p\">:<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">Article Not Found<\/span><span class=\"dl\">\"<\/span> <span class=\"p\">},<\/span>\n      <span class=\"p\">{<\/span> <span class=\"na\">description<\/span><span class=\"p\">:<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">Sorry, the article does not exist<\/span><span class=\"dl\">\"<\/span> <span class=\"p\">}<\/span>\n    <span class=\"p\">];<\/span>\n  <span class=\"p\">}<\/span>\n\n  <span class=\"kd\">const<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">post<\/span> <span class=\"p\">}<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">data<\/span><span class=\"p\">;<\/span>\n\n  <span class=\"k\">return<\/span> <span class=\"p\">[<\/span>\n    <span class=\"p\">{<\/span> <span class=\"na\">title<\/span><span class=\"p\">:<\/span> <span class=\"s2\">`<\/span><span class=\"p\">${<\/span><span class=\"nx\">post<\/span><span class=\"p\">.<\/span><span class=\"nx\">title<\/span><span class=\"p\">}<\/span><span class=\"s2\"> | My Dev Blog`<\/span> <span class=\"p\">},<\/span>\n    <span class=\"p\">{<\/span> <span class=\"na\">description<\/span><span class=\"p\">:<\/span> <span class=\"nx\">post<\/span><span class=\"p\">.<\/span><span class=\"nx\">excerpt<\/span> <span class=\"p\">},<\/span>\n\n    <span class=\"c1\">\/\/ OpenGraph for social media<\/span>\n    <span class=\"p\">{<\/span> <span class=\"na\">property<\/span><span class=\"p\">:<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">og:title<\/span><span class=\"dl\">\"<\/span><span class=\"p\">,<\/span> <span class=\"na\">content<\/span><span class=\"p\">:<\/span> <span class=\"nx\">post<\/span><span class=\"p\">.<\/span><span class=\"nx\">title<\/span> <span class=\"p\">},<\/span>\n    <span class=\"p\">{<\/span> <span class=\"na\">property<\/span><span class=\"p\">:<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">og:description<\/span><span class=\"dl\">\"<\/span><span class=\"p\">,<\/span> <span class=\"na\">content<\/span><span class=\"p\">:<\/span> <span class=\"nx\">post<\/span><span class=\"p\">.<\/span><span class=\"nx\">excerpt<\/span> <span class=\"p\">},<\/span>\n    <span class=\"p\">{<\/span> <span class=\"na\">property<\/span><span class=\"p\">:<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">og:image<\/span><span class=\"dl\">\"<\/span><span class=\"p\">,<\/span> <span class=\"na\">content<\/span><span class=\"p\">:<\/span> <span class=\"nx\">post<\/span><span class=\"p\">.<\/span><span class=\"nx\">featuredImage<\/span> <span class=\"p\">},<\/span>\n    <span class=\"p\">{<\/span> <span class=\"na\">property<\/span><span class=\"p\">:<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">og:type<\/span><span class=\"dl\">\"<\/span><span class=\"p\">,<\/span> <span class=\"na\">content<\/span><span class=\"p\">:<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">article<\/span><span class=\"dl\">\"<\/span> <span class=\"p\">},<\/span>\n    <span class=\"p\">{<\/span> <span class=\"na\">property<\/span><span class=\"p\">:<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">og:url<\/span><span class=\"dl\">\"<\/span><span class=\"p\">,<\/span> <span class=\"na\">content<\/span><span class=\"p\">:<\/span> <span class=\"s2\">`https:\/\/myblog.com\/blog\/<\/span><span class=\"p\">${<\/span><span class=\"nx\">post<\/span><span class=\"p\">.<\/span><span class=\"nx\">slug<\/span><span class=\"p\">}<\/span><span class=\"s2\">`<\/span> <span class=\"p\">},<\/span>\n    <span class=\"p\">{<\/span> <span class=\"na\">property<\/span><span class=\"p\">:<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">article:published_time<\/span><span class=\"dl\">\"<\/span><span class=\"p\">,<\/span> <span class=\"na\">content<\/span><span class=\"p\">:<\/span> <span class=\"nx\">post<\/span><span class=\"p\">.<\/span><span class=\"nx\">publishedAt<\/span> <span class=\"p\">},<\/span>\n\n    <span class=\"c1\">\/\/ Twitter card<\/span>\n    <span class=\"p\">{<\/span> <span class=\"na\">name<\/span><span class=\"p\">:<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">twitter:card<\/span><span class=\"dl\">\"<\/span><span class=\"p\">,<\/span> <span class=\"na\">content<\/span><span class=\"p\">:<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">summary_large_image<\/span><span class=\"dl\">\"<\/span> <span class=\"p\">},<\/span>\n    <span class=\"p\">{<\/span> <span class=\"na\">name<\/span><span class=\"p\">:<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">twitter:title<\/span><span class=\"dl\">\"<\/span><span class=\"p\">,<\/span> <span class=\"na\">content<\/span><span class=\"p\">:<\/span> <span class=\"nx\">post<\/span><span class=\"p\">.<\/span><span class=\"nx\">title<\/span> <span class=\"p\">},<\/span>\n    <span class=\"p\">{<\/span> <span class=\"na\">name<\/span><span class=\"p\">:<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">twitter:description<\/span><span class=\"dl\">\"<\/span><span class=\"p\">,<\/span> <span class=\"na\">content<\/span><span class=\"p\">:<\/span> <span class=\"nx\">post<\/span><span class=\"p\">.<\/span><span class=\"nx\">excerpt<\/span> <span class=\"p\">},<\/span>\n    <span class=\"p\">{<\/span> <span class=\"na\">name<\/span><span class=\"p\">:<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">twitter:image<\/span><span class=\"dl\">\"<\/span><span class=\"p\">,<\/span> <span class=\"na\">content<\/span><span class=\"p\">:<\/span> <span class=\"nx\">post<\/span><span class=\"p\">.<\/span><span class=\"nx\">featuredImage<\/span> <span class=\"p\">},<\/span>\n\n    <span class=\"c1\">\/\/ Canonical URL<\/span>\n    <span class=\"p\">{<\/span> <span class=\"na\">tagName<\/span><span class=\"p\">:<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">link<\/span><span class=\"dl\">\"<\/span><span class=\"p\">,<\/span> <span class=\"na\">rel<\/span><span class=\"p\">:<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">canonical<\/span><span class=\"dl\">\"<\/span><span class=\"p\">,<\/span> <span class=\"na\">href<\/span><span class=\"p\">:<\/span> <span class=\"s2\">`https:\/\/myblog.com\/blog\/<\/span><span class=\"p\">${<\/span><span class=\"nx\">post<\/span><span class=\"p\">.<\/span><span class=\"nx\">slug<\/span><span class=\"p\">}<\/span><span class=\"s2\">`<\/span> <span class=\"p\">},<\/span>\n\n    <span class=\"c1\">\/\/ Structured data for rich results<\/span>\n    <span class=\"p\">{<\/span>\n      <span class=\"na\">tagName<\/span><span class=\"p\">:<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">script<\/span><span class=\"dl\">\"<\/span><span class=\"p\">,<\/span>\n      <span class=\"dl\">\"<\/span><span class=\"s2\">type<\/span><span class=\"dl\">\"<\/span><span class=\"p\">:<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">application\/ld+json<\/span><span class=\"dl\">\"<\/span><span class=\"p\">,<\/span>\n      <span class=\"na\">children<\/span><span class=\"p\">:<\/span> <span class=\"nx\">JSON<\/span><span class=\"p\">.<\/span><span class=\"nf\">stringify<\/span><span class=\"p\">({<\/span>\n        <span class=\"dl\">\"<\/span><span class=\"s2\">@context<\/span><span class=\"dl\">\"<\/span><span class=\"p\">:<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">https:\/\/schema.org<\/span><span class=\"dl\">\"<\/span><span class=\"p\">,<\/span>\n        <span class=\"dl\">\"<\/span><span class=\"s2\">@type<\/span><span class=\"dl\">\"<\/span><span class=\"p\">:<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">BlogPosting<\/span><span class=\"dl\">\"<\/span><span class=\"p\">,<\/span>\n        <span class=\"dl\">\"<\/span><span class=\"s2\">headline<\/span><span class=\"dl\">\"<\/span><span class=\"p\">:<\/span> <span class=\"nx\">post<\/span><span class=\"p\">.<\/span><span class=\"nx\">title<\/span><span class=\"p\">,<\/span>\n        <span class=\"dl\">\"<\/span><span class=\"s2\">image<\/span><span class=\"dl\">\"<\/span><span class=\"p\">:<\/span> <span class=\"nx\">post<\/span><span class=\"p\">.<\/span><span class=\"nx\">featuredImage<\/span><span class=\"p\">,<\/span>\n        <span class=\"dl\">\"<\/span><span class=\"s2\">datePublished<\/span><span class=\"dl\">\"<\/span><span class=\"p\">:<\/span> <span class=\"nx\">post<\/span><span class=\"p\">.<\/span><span class=\"nx\">publishedAt<\/span><span class=\"p\">,<\/span>\n        <span class=\"dl\">\"<\/span><span class=\"s2\">dateModified<\/span><span class=\"dl\">\"<\/span><span class=\"p\">:<\/span> <span class=\"nx\">post<\/span><span class=\"p\">.<\/span><span class=\"nx\">updatedAt<\/span><span class=\"p\">,<\/span>\n        <span class=\"dl\">\"<\/span><span class=\"s2\">author<\/span><span class=\"dl\">\"<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\n          <span class=\"dl\">\"<\/span><span class=\"s2\">@type<\/span><span class=\"dl\">\"<\/span><span class=\"p\">:<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">Person<\/span><span class=\"dl\">\"<\/span><span class=\"p\">,<\/span>\n          <span class=\"dl\">\"<\/span><span class=\"s2\">name<\/span><span class=\"dl\">\"<\/span><span class=\"p\">:<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">Your Name<\/span><span class=\"dl\">\"<\/span>\n        <span class=\"p\">}<\/span>\n      <span class=\"p\">})<\/span>\n    <span class=\"p\">}<\/span>\n  <span class=\"p\">];<\/span>\n<span class=\"p\">};<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0627\u062c\u0631\u0627\u06cc \u06cc\u06a9 \u0646\u0642\u0634\u0647 \u0633\u0627\u06cc\u062a \u067e\u0648\u06cc\u0627 \u0631\u0627 \u0646\u06cc\u0632 \u0641\u0631\u0627\u0645\u0648\u0634 \u0646\u06a9\u0646\u06cc\u062f:<\/p>\n<div class=\"highlight js-code-highlight\" wp_automatic_readability=\"14\">\n<pre class=\"highlight jsx\"><code><span class=\"c1\">\/\/ app\/routes\/sitemap[.]xml.tsx<\/span>\n<span class=\"k\">export<\/span> <span class=\"kd\">const<\/span> <span class=\"nx\">loader<\/span> <span class=\"o\">=<\/span> <span class=\"k\">async <\/span><span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\n  <span class=\"kd\">const<\/span> <span class=\"nx\">posts<\/span> <span class=\"o\">=<\/span> <span class=\"k\">await<\/span> <span class=\"nf\">getAllPosts<\/span><span class=\"p\">();<\/span>\n\n  <span class=\"kd\">const<\/span> <span class=\"nx\">sitemap<\/span> <span class=\"o\">=<\/span> <span class=\"s2\">`\n    <?xml version=\"1.0\" encoding=\"UTF-8\"????>\n    <urlset xmlns=\"http:\/\/www.sitemaps.org\/schemas\/sitemap\/0.9\">\n      <url>\n        <loc>https:\/\/myblog.com<\/loc>\n        <lastmod\/><\/url><\/urlset><\/span><span class=\"p\">${<\/span><span class=\"k\">new<\/span> <span class=\"nc\">Date<\/span><span class=\"p\">().<\/span><span class=\"nf\">toISOString<\/span><span class=\"p\">()}<\/span><span class=\"s2\">\n        <priority>1.0<\/priority>\n      \n\n      <\/span><span class=\"p\">${<\/span><span class=\"nx\">posts<\/span><span class=\"p\">.<\/span><span class=\"nf\">map<\/span><span class=\"p\">(<\/span><span class=\"nx\">post<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"s2\">`\n        <url>\n          <loc>https:\/\/myblog.com\/blog\/<\/loc><\/url><\/span><span class=\"p\">${<\/span><span class=\"nx\">post<\/span><span class=\"p\">.<\/span><span class=\"nx\">slug<\/span><span class=\"p\">}<\/span><span class=\"s2\">\n          <lastmod\/><\/span><span class=\"p\">${<\/span><span class=\"k\">new<\/span> <span class=\"nc\">Date<\/span><span class=\"p\">(<\/span><span class=\"nx\">post<\/span><span class=\"p\">.<\/span><span class=\"nx\">updatedAt<\/span><span class=\"p\">).<\/span><span class=\"nf\">toISOString<\/span><span class=\"p\">()}<\/span><span class=\"s2\">\n          <priority>0.8<\/priority>\n        \n      `<\/span><span class=\"p\">).<\/span><span class=\"nf\">join<\/span><span class=\"p\">(<\/span><span class=\"dl\">''<\/span><span class=\"p\">)}<\/span><span class=\"s2\">\n    \n  `<\/span><span class=\"p\">;<\/span>\n\n  <span class=\"k\">return<\/span> <span class=\"k\">new<\/span> <span class=\"nc\">Response<\/span><span class=\"p\">(<\/span><span class=\"nx\">sitemap<\/span><span class=\"p\">,<\/span> <span class=\"p\">{<\/span>\n    <span class=\"na\">status<\/span><span class=\"p\">:<\/span> <span class=\"mi\">200<\/span><span class=\"p\">,<\/span>\n    <span class=\"na\">headers<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\n      <span class=\"dl\">\"<\/span><span class=\"s2\">Content-Type<\/span><span class=\"dl\">\"<\/span><span class=\"p\">:<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">application\/xml<\/span><span class=\"dl\">\"<\/span><span class=\"p\">,<\/span>\n      <span class=\"dl\">\"<\/span><span class=\"s2\">Cache-Control<\/span><span class=\"dl\">\"<\/span><span class=\"p\">:<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">public, max-age=3600<\/span><span class=\"dl\">\"<\/span>\n    <span class=\"p\">}<\/span>\n  <span class=\"p\">});<\/span>\n<span class=\"p\">};<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0627\u06cc\u0646 \u0631\u0648\u06cc\u06a9\u0631\u062f \u062c\u0627\u0645\u0639 \u0628\u0627\u0639\u062b \u0645\u06cc \u0634\u0648\u062f \u0645\u0648\u062a\u0648\u0631\u0647\u0627\u06cc \u062c\u0633\u062a\u062c\u0648 \u0628\u0647 \u0637\u0648\u0631 \u06a9\u0627\u0645\u0644 \u0645\u062d\u062a\u0648\u0627\u06cc \u0634\u0645\u0627 \u0631\u0627 \u062f\u0631\u06a9 \u06a9\u0631\u062f\u0647 \u0648 \u0622\u0646 \u0631\u0627 \u0628\u0647 \u062f\u0631\u0633\u062a\u06cc \u062f\u0631 \u0646\u062a\u0627\u06cc\u062c \u062c\u0633\u062a\u062c\u0648 \u0648 \u0633\u0647\u0627\u0645 \u0631\u0633\u0627\u0646\u0647 \u0647\u0627\u06cc \u0627\u062c\u062a\u0645\u0627\u0639\u06cc \u0628\u0647 \u0646\u0645\u0627\u06cc\u0634 \u0628\u06af\u0630\u0627\u0631\u0646\u062f.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"%D8%B1%D9%88%D9%86%D8%AF%D9%87%D8%A7%DB%8C_%D8%A2%DB%8C%D9%86%D8%AF%D9%87_%D8%A7%D8%AF%D8%BA%D8%A7%D9%85_%D9%87%D9%88%D8%B4_%D9%85%D8%B5%D9%86%D9%88%D8%B9%DB%8C_%D8%A8%D8%A7_%D8%B1%DB%8C%D9%85%DB%8C%DA%A9%D8%B3\"><\/span>\n<p>  \u0631\u0648\u0646\u062f\u0647\u0627\u06cc \u0622\u06cc\u0646\u062f\u0647: \u0627\u062f\u063a\u0627\u0645 \u0647\u0648\u0634 \u0645\u0635\u0646\u0648\u0639\u06cc \u0628\u0627 \u0631\u06cc\u0645\u06cc\u06a9\u0633<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0628\u0627 \u0646\u06af\u0627\u0647\u06cc \u0628\u0647 \u0627\u0648\u0627\u062e\u0631 \u0633\u0627\u0644 2025 \u0648 \u0628\u0639\u062f \u0627\u0632 \u0622\u0646 \u060c \u0627\u062f\u063a\u0627\u0645 \u0647\u0648\u0634 \u0645\u0635\u0646\u0648\u0639\u06cc \u0628\u0627 \u0648\u0628\u0644\u0627\u06af \u0647\u0627\u06cc \u0631\u06cc\u0645\u06cc\u06a9\u0633 \u0628\u0647 \u0637\u0648\u0631 \u0641\u0632\u0627\u06cc\u0646\u062f\u0647 \u0627\u06cc \u0627\u0647\u0645\u06cc\u062a \u067e\u06cc\u062f\u0627 \u0645\u06cc \u06a9\u0646\u062f. \u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u0627\u0644\u06af\u0648\u06cc\u06cc \u0627\u0633\u062a \u06a9\u0647 \u0645\u0646 \u062f\u0631 \u062d\u0627\u0644 \u062d\u0627\u0636\u0631 \u0628\u0631\u0627\u06cc \u067e\u062e\u0634 \u067e\u0627\u0633\u062e \u0647\u0627\u06cc \u0647\u0648\u0634 \u0645\u0635\u0646\u0648\u0639\u06cc \u0627\u062c\u0631\u0627 \u0645\u06cc \u06a9\u0646\u0645:<\/p>\n<div class=\"highlight js-code-highlight\" wp_automatic_readability=\"14\">\n<pre class=\"highlight javascript\"><code><span class=\"c1\">\/\/ app\/routes\/api.ai-assistant.tsx<\/span>\n<span class=\"k\">import<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">eventStream<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">remix-utils<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\n<span class=\"k\">import<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">OpenAI<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">openai<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\n\n<span class=\"k\">export<\/span> <span class=\"k\">async<\/span> <span class=\"kd\">function<\/span> <span class=\"nf\">loader<\/span><span class=\"p\">({<\/span> <span class=\"nx\">request<\/span> <span class=\"p\">})<\/span> <span class=\"p\">{<\/span>\n  <span class=\"kd\">const<\/span> <span class=\"nx\">openai<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"nc\">OpenAI<\/span><span class=\"p\">({<\/span> <span class=\"na\">apiKey<\/span><span class=\"p\">:<\/span> <span class=\"nx\">process<\/span><span class=\"p\">.<\/span><span class=\"nx\">env<\/span><span class=\"p\">.<\/span><span class=\"nx\">OPENAI_API_KEY<\/span> <span class=\"p\">});<\/span>\n  <span class=\"kd\">const<\/span> <span class=\"nx\">url<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"nc\">URL<\/span><span class=\"p\">(<\/span><span class=\"nx\">request<\/span><span class=\"p\">.<\/span><span class=\"nx\">url<\/span><span class=\"p\">);<\/span>\n  <span class=\"kd\">const<\/span> <span class=\"nx\">prompt<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">url<\/span><span class=\"p\">.<\/span><span class=\"nx\">searchParams<\/span><span class=\"p\">.<\/span><span class=\"nf\">get<\/span><span class=\"p\">(<\/span><span class=\"dl\">\"<\/span><span class=\"s2\">prompt<\/span><span class=\"dl\">\"<\/span><span class=\"p\">);<\/span>\n\n  <span class=\"k\">return<\/span> <span class=\"nf\">eventStream<\/span><span class=\"p\">(<\/span><span class=\"nx\">request<\/span><span class=\"p\">.<\/span><span class=\"nx\">signal<\/span><span class=\"p\">,<\/span> <span class=\"kd\">function<\/span> <span class=\"nf\">setup<\/span><span class=\"p\">(<\/span><span class=\"nx\">send<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n    <span class=\"kd\">const<\/span> <span class=\"nx\">stream<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">openai<\/span><span class=\"p\">.<\/span><span class=\"nx\">chat<\/span><span class=\"p\">.<\/span><span class=\"nx\">completions<\/span><span class=\"p\">.<\/span><span class=\"nf\">create<\/span><span class=\"p\">({<\/span>\n      <span class=\"na\">model<\/span><span class=\"p\">:<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">gpt-4-turbo<\/span><span class=\"dl\">\"<\/span><span class=\"p\">,<\/span>\n      <span class=\"na\">messages<\/span><span class=\"p\">:<\/span> <span class=\"p\">[{<\/span> <span class=\"na\">role<\/span><span class=\"p\">:<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">user<\/span><span class=\"dl\">\"<\/span><span class=\"p\">,<\/span> <span class=\"na\">content<\/span><span class=\"p\">:<\/span> <span class=\"nx\">prompt<\/span> <span class=\"p\">}],<\/span>\n      <span class=\"na\">stream<\/span><span class=\"p\">:<\/span> <span class=\"kc\">true<\/span>\n    <span class=\"p\">});<\/span>\n\n    <span class=\"p\">(<\/span><span class=\"k\">async <\/span><span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\n      <span class=\"k\">for<\/span> <span class=\"k\">await <\/span><span class=\"p\">(<\/span><span class=\"kd\">const<\/span> <span class=\"nx\">part<\/span> <span class=\"k\">of<\/span> <span class=\"nx\">stream<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n        <span class=\"nf\">send<\/span><span class=\"p\">({<\/span> <span class=\"na\">data<\/span><span class=\"p\">:<\/span> <span class=\"nx\">part<\/span><span class=\"p\">.<\/span><span class=\"nx\">choices<\/span><span class=\"p\">[<\/span><span class=\"mi\">0<\/span><span class=\"p\">]?.<\/span><span class=\"nx\">delta<\/span><span class=\"p\">?.<\/span><span class=\"nx\">content<\/span> <span class=\"o\">||<\/span> <span class=\"dl\">\"\"<\/span> <span class=\"p\">});<\/span>\n      <span class=\"p\">}<\/span>\n    <span class=\"p\">})();<\/span>\n  <span class=\"p\">});<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0633\u067e\u0633 \u062f\u0631 \u0645\u0624\u0644\u0641\u0647 React \u062e\u0648\u062f:<\/p>\n<div class=\"highlight js-code-highlight\" wp_automatic_readability=\"12\">\n<pre class=\"highlight jsx\"><code><span class=\"kd\">function<\/span> <span class=\"nf\">AIAssistant<\/span><span class=\"p\">()<\/span> <span class=\"p\">{<\/span>\n  <span class=\"kd\">const<\/span> <span class=\"p\">[<\/span><span class=\"nx\">prompt<\/span><span class=\"p\">,<\/span> <span class=\"nx\">setPrompt<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">useState<\/span><span class=\"p\">(<\/span><span class=\"dl\">\"\"<\/span><span class=\"p\">);<\/span>\n  <span class=\"kd\">const<\/span> <span class=\"p\">[<\/span><span class=\"nx\">response<\/span><span class=\"p\">,<\/span> <span class=\"nx\">setResponse<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">useState<\/span><span class=\"p\">(<\/span><span class=\"dl\">\"\"<\/span><span class=\"p\">);<\/span>\n\n  <span class=\"k\">async<\/span> <span class=\"kd\">function<\/span> <span class=\"nf\">handleSubmit<\/span><span class=\"p\">(<\/span><span class=\"nx\">e<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n    <span class=\"nx\">e<\/span><span class=\"p\">.<\/span><span class=\"nf\">preventDefault<\/span><span class=\"p\">();<\/span>\n    <span class=\"nf\">setResponse<\/span><span class=\"p\">(<\/span><span class=\"dl\">\"\"<\/span><span class=\"p\">);<\/span>\n\n    <span class=\"kd\">const<\/span> <span class=\"nx\">eventSource<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"nc\">EventSource<\/span><span class=\"p\">(<\/span><span class=\"s2\">`\/api\/ai-assistant?prompt=<\/span><span class=\"p\">${<\/span><span class=\"nf\">encodeURIComponent<\/span><span class=\"p\">(<\/span><span class=\"nx\">prompt<\/span><span class=\"p\">)}<\/span><span class=\"s2\">`<\/span><span class=\"p\">);<\/span>\n\n    <span class=\"nx\">eventSource<\/span><span class=\"p\">.<\/span><span class=\"nx\">onmessage<\/span> <span class=\"o\">=<\/span> <span class=\"p\">(<\/span><span class=\"nx\">event<\/span><span class=\"p\">)<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\n      <span class=\"nf\">setResponse<\/span><span class=\"p\">(<\/span><span class=\"nx\">prev<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nx\">prev<\/span> <span class=\"o\">+<\/span> <span class=\"nx\">event<\/span><span class=\"p\">.<\/span><span class=\"nx\">data<\/span><span class=\"p\">);<\/span>\n    <span class=\"p\">};<\/span>\n\n    <span class=\"nx\">eventSource<\/span><span class=\"p\">.<\/span><span class=\"nx\">onerror<\/span> <span class=\"o\">=<\/span> <span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\n      <span class=\"nx\">eventSource<\/span><span class=\"p\">.<\/span><span class=\"nf\">close<\/span><span class=\"p\">();<\/span>\n    <span class=\"p\">};<\/span>\n  <span class=\"p\">}<\/span>\n\n  <span class=\"k\">return <\/span><span class=\"p\">(<\/span>\n    <span class=\"p\">&lt;<\/span><span class=\"nt\">div<\/span><span class=\"p\">&gt;<\/span>\n      <span class=\"p\">&lt;<\/span><span class=\"nt\">form<\/span> <span class=\"na\">onSubmit<\/span><span class=\"p\">=<\/span><span class=\"si\">{<\/span><span class=\"nx\">handleSubmit<\/span><span class=\"si\">}<\/span><span class=\"p\">&gt;<\/span>\n        <span class=\"p\">&lt;<\/span><span class=\"nt\">input<\/span> \n          <span class=\"na\">value<\/span><span class=\"p\">=<\/span><span class=\"si\">{<\/span><span class=\"nx\">prompt<\/span><span class=\"si\">}<\/span> \n          <span class=\"na\">onChange<\/span><span class=\"p\">=<\/span><span class=\"si\">{<\/span><span class=\"nx\">e<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nf\">setPrompt<\/span><span class=\"p\">(<\/span><span class=\"nx\">e<\/span><span class=\"p\">.<\/span><span class=\"nx\">target<\/span><span class=\"p\">.<\/span><span class=\"nx\">value<\/span><span class=\"p\">)<\/span><span class=\"si\">}<\/span> \n          <span class=\"na\">placeholder<\/span><span class=\"p\">=<\/span><span class=\"s\">\"Ask a question...\"<\/span>\n        <span class=\"p\">\/&gt;<\/span>\n        <span class=\"p\">&lt;<\/span><span class=\"nt\">button<\/span> <span class=\"na\">type<\/span><span class=\"p\">=<\/span><span class=\"s\">\"submit\"<\/span><span class=\"p\">&gt;<\/span>Send<span class=\"p\"\/><span class=\"nt\">button<\/span><span class=\"p\">&gt;<\/span>\n      <span class=\"p\"\/><span class=\"nt\">form<\/span><span class=\"p\">&gt;<\/span>\n\n      <span class=\"p\">&lt;<\/span><span class=\"nt\">div<\/span> <span class=\"na\">className<\/span><span class=\"p\">=<\/span><span class=\"s\">\"response\"<\/span><span class=\"p\">&gt;<\/span>\n        <span class=\"si\">{<\/span><span class=\"nx\">response<\/span> <span class=\"o\">||<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">AI response will appear here...<\/span><span class=\"dl\">\"<\/span><span class=\"si\">}<\/span>\n      <span class=\"p\"\/><span class=\"nt\">div<\/span><span class=\"p\">&gt;<\/span>\n    <span class=\"p\"\/><span class=\"nt\">div<\/span><span class=\"p\">&gt;<\/span>\n  <span class=\"p\">);<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0627\u06cc\u0646 \u0627\u062f\u063a\u0627\u0645 \u0648\u06cc\u0698\u06af\u06cc \u0647\u0627\u06cc AI \u062a\u0639\u0627\u0645\u0644\u06cc \u0631\u0627 \u062f\u0631\u0633\u062a \u062f\u0631 \u0648\u0628\u0644\u0627\u06af \u0634\u0645\u0627 \u0627\u0645\u06a9\u0627\u0646 \u067e\u0630\u06cc\u0631 \u0645\u06cc \u06a9\u0646\u062f \u060c \u0645\u0627\u0646\u0646\u062f:<\/p>\n<ul>\n<li>\u062e\u0644\u0627\u0635\u0647 \u0645\u0642\u0627\u0644\u0647<\/li>\n<li>\u062a\u0648\u0636\u06cc\u062d \u06a9\u062f<\/li>\n<li>\u067e\u06cc\u0634\u0646\u0647\u0627\u062f \u0645\u062d\u062a\u0648\u0627\u06cc \u0645\u0631\u062a\u0628\u0637<\/li>\n<li>\u0633\u0648\u0627\u0644\u0627\u062a \u0648 \u067e\u0627\u0633\u062e \u0647\u0627\u06cc \u062e\u0648\u0627\u0646\u0646\u062f\u0647<\/li>\n<\/ul>\n<h2><span class=\"ez-toc-section\" id=\"%D9%BE%D8%A7%DB%8C%D8%A7%D9%86\"><\/span>\n<p>  \u067e\u0627\u06cc\u0627\u0646<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Remix.JS \u0628\u0647 \u06cc\u06a9 \u0686\u0627\u0631\u0686\u0648\u0628 \u0642\u062f\u0631\u062a\u0645\u0646\u062f \u0628\u0631\u0627\u06cc \u0633\u0627\u062e\u062a\u0646 \u0648\u0628\u0644\u0627\u06af \u0647\u0627\u06cc \u0645\u062f\u0631\u0646 \u062a\u0628\u062f\u06cc\u0644 \u0634\u062f\u0647 \u0627\u0633\u062a \u060c \u0627\u0645\u0627 \u0628\u06cc\u0634\u062a\u0631 \u062a\u0648\u0633\u0639\u0647 \u062f\u0647\u0646\u062f\u06af\u0627\u0646 \u0641\u0642\u0637 \u0633\u0637\u062d \u0642\u0627\u0628\u0644\u06cc\u062a \u0647\u0627\u06cc \u0622\u0646 \u0631\u0627 \u062e\u0631\u0627\u0634\u06cc\u062f\u0647 \u0627\u0646\u062f. \u0628\u0627 \u0627\u062c\u0631\u0627\u06cc \u0627\u0644\u06af\u0648\u0647\u0627\u06cc \u0645\u0639\u0645\u0627\u0631\u06cc \u060c \u0627\u0633\u062a\u0631\u0627\u062a\u0698\u06cc \u0647\u0627\u06cc \u0630\u062e\u06cc\u0631\u0647 \u0633\u0627\u0632\u06cc \u0645\u062d\u062a\u0648\u0627 \u060c \u062a\u06a9\u0646\u06cc\u06a9 \u0647\u0627\u06cc MDX \u060c \u0630\u062e\u06cc\u0631\u0647 \u0633\u0627\u0632\u06cc \u0628\u0647\u06cc\u0646\u0647 \u0633\u0627\u0632\u06cc \u0648 \u0631\u0648\u06cc\u06a9\u0631\u062f\u0647\u0627\u06cc \u0633\u0626\u0648 \u06a9\u0647 \u0645\u0646 \u0628\u06cc\u0627\u0646 \u06a9\u0631\u062f\u0645 \u060c \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0648\u0628\u0644\u0627\u06af \u0647\u0627\u06cc\u06cc \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f \u06a9\u0647 \u0646\u0647 \u062a\u0646\u0647\u0627 \u0631\u0639\u062f \u0648 \u0628\u0631\u0642 \u0633\u0631\u06cc\u0639 \u0628\u0644\u06a9\u0647 \u0642\u0627\u0628\u0644 \u062d\u0641\u0638 \u0648 \u0645\u0642\u06cc\u0627\u0633 \u067e\u0630\u06cc\u0631 \u0647\u0633\u062a\u0646\u062f.<\/p>\n<p>\u063a\u0630\u0627\u06cc \u0627\u0635\u0644\u06cc:<\/p>\n<ol>\n<li>\u0628\u0631\u0627\u06cc \u062c\u062f\u0627 \u06a9\u0631\u062f\u0646 \u0646\u06af\u0631\u0627\u0646\u06cc \u0647\u0627 \u0627\u0632 \u0645\u0639\u0645\u0627\u0631\u06cc \u0634\u0634 \u0636\u0644\u0639\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f<\/li>\n<li>\u06cc\u06a9 \u0633\u06cc\u0633\u062a\u0645 \u0630\u062e\u06cc\u0631\u0647 \u0633\u0627\u0632\u06cc \u0645\u062d\u062a\u0648\u0627\u06cc \u062a\u0631\u06a9\u06cc\u0628\u06cc \u0631\u0627 \u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u06a9\u0646\u06cc\u062f<\/li>\n<li>\u0627\u0647\u0631\u0645 MDX \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u06cc\u06a9 \u0633\u06cc\u0633\u062a\u0645 \u06a9\u0627\u0645\u067e\u0648\u0646\u0646\u062a \u060c \u0646\u0647 \u0641\u0642\u0637 Markdown<\/li>\n<li>\u0628\u0631\u0627\u06cc \u0639\u0645\u0644\u06a9\u0631\u062f \u0628\u0647\u06cc\u0646\u0647 \u0627\u0632 \u062d\u0627\u0641\u0638\u0647 \u067e\u0646\u0647\u0627\u0646 \u0686\u0646\u062f \u0644\u0627\u06cc\u0647 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f<\/li>\n<li>SEO \u062c\u0627\u0645\u0639 \u0631\u0627 \u0628\u0627 \u062f\u0627\u062f\u0647 \u0647\u0627\u06cc \u0633\u0627\u062e\u062a \u06cc\u0627\u0641\u062a\u0647 \u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u06a9\u0646\u06cc\u062f<\/li>\n<\/ol>\n<p>\u0628\u0647 \u06cc\u0627\u062f \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u062f \u060c \u0647\u06cc\u0686 \u0631\u0627\u0647 \u062d\u0644 \u06cc\u06a9 \u0627\u0646\u062f\u0627\u0632\u0647 \u0627\u06cc \u0648\u062c\u0648\u062f \u0646\u062f\u0627\u0631\u062f. \u062a\u062e\u0635\u0635 \u0648\u0627\u0642\u0639\u06cc \u062f\u0631 \u062f\u0631\u06a9 \u0627\u06cc\u0646 \u0627\u0633\u062a \u06a9\u0647 \u0686\u0647 \u0645\u0648\u0642\u0639 \u0648 \u0686\u06af\u0648\u0646\u0647 \u0645\u06cc \u062a\u0648\u0627\u0646 \u0627\u06cc\u0646 \u0627\u0644\u06af\u0648\u0647\u0627\u06cc \u0631\u0627 \u0628\u0627 \u0646\u06cc\u0627\u0632\u0647\u0627\u06cc \u062e\u0627\u0635 \u062e\u0648\u062f \u062a\u0637\u0628\u06cc\u0642 \u062f\u0627\u062f.<\/p>\n<p>\u062a\u062c\u0631\u0628\u0647 \u0634\u0645\u0627 \u0628\u0627 Remix.js \u0686\u06cc\u0633\u062a\u061f \u0622\u06cc\u0627 \u062f\u0631 \u067e\u0631\u0648\u0698\u0647 \u0647\u0627\u06cc \u062e\u0648\u062f \u0647\u06cc\u0686 \u06cc\u06a9 \u0627\u0632 \u0627\u06cc\u0646 \u0627\u0644\u06af\u0648\u0647\u0627\u06cc \u0631\u0627 \u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u06a9\u0631\u062f\u0647 \u0627\u06cc\u062f\u061f \u0645\u0646 \u062f\u0648\u0633\u062a \u062f\u0627\u0631\u0645 \u0627\u0641\u06a9\u0627\u0631 \u0648 \u0633\u0648\u0627\u0644\u0627\u062a \u0634\u0645\u0627 \u0631\u0627 \u062f\u0631 \u0646\u0638\u0631\u0627\u062a \u0632\u06cc\u0631 \u0628\u0634\u0646\u0648\u0645!<\/p>\n<\/p><\/div>\n","protected":false},"excerpt":{"rendered":"<p>\u0645\u0642\u062f\u0645\u0647 \u062f\u0631 \u0637\u0648\u0644 15+ \u0633\u0627\u0644 \u062a\u0648\u0633\u0639\u0647 \u0648\u0628 \u060c \u0645\u0646 \u0634\u0627\u0647\u062f \u0627\u0641\u0632\u0627\u06cc\u0634 \u0648 \u0633\u0642\u0648\u0637 \u0686\u0627\u0631\u0686\u0648\u0628 \u0647\u0627 \u060c \u0627\u0632 jQuery \u062a\u0627 \u0632\u0627\u0648\u06cc\u0647 \u060c \u0627\u0632 redux \u062a\u0627 query React \u060c \u0648 \u0627\u06a9\u0646\u0648\u0646 \u0628\u0647 Remix.js \u0628\u0648\u062f\u0647 \u0627\u0645. \u0628\u0627 \u0646\u0632\u062f\u06cc\u06a9 \u0634\u062f\u0646 \u0628\u0647 \u0627\u0648\u0627\u0633\u0637 \u0633\u0627\u0644 2012 \u060c Remix.JS \u0628\u0647 \u06cc\u06a9 \u0686\u0627\u0631\u0686\u0648\u0628 \u0642\u062f\u0631\u062a\u0645\u0646\u062f \u0628\u0631\u0627\u06cc \u0627\u06cc\u062c\u0627\u062f \u0648\u0628\u0644\u0627\u06af \u0647\u0627\u06cc \u0633\u0631\u06cc\u0639 \u060c \u0645\u0642\u06cc\u0627\u0633 \u067e\u0630\u06cc\u0631 \u0648 &hellip;<\/p>\n","protected":false},"author":2,"featured_media":109419,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"fifu_image_url":"","fifu_image_alt":"","footnotes":""},"categories":[339],"tags":[],"class_list":["post-109418","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dev"],"_links":{"self":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts\/109418","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/comments?post=109418"}],"version-history":[{"count":0,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts\/109418\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/media\/109419"}],"wp:attachment":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/media?parent=109418"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/categories?post=109418"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/tags?post=109418"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}