{"id":102080,"date":"2025-03-18T15:23:47","date_gmt":"2025-03-18T11:53:47","guid":{"rendered":"https:\/\/nabfollower.com\/blog\/build-a-production-ready-saas-application-44nb\/"},"modified":"2025-03-18T15:23:47","modified_gmt":"2025-03-18T11:53:47","slug":"build-a-production-ready-saas-application-44nb","status":"publish","type":"post","link":"https:\/\/nabfollower.com\/blog\/build-a-production-ready-saas-application-44nb\/","title":{"rendered":"\u06cc\u06a9 \u0628\u0631\u0646\u0627\u0645\u0647 SaaS \u0622\u0645\u0627\u062f\u0647 \u062a\u0648\u0644\u06cc\u062f \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f"},"content":{"rendered":"<div data-article-id=\"2340047\" id=\"article-body\">\n<p><strong>\u0628\u0647 \u0641\u06a9\u0631 \u0633\u0627\u062e\u062a\u0646 \u06cc\u06a9 \u0628\u0631\u0646\u0627\u0645\u0647 SaaS \u0647\u0633\u062a\u06cc\u062f\u061f \u0627\u06cc\u0646 \u0627\u0644\u06af\u0648\u06cc \u0627\u0633\u062a\u0627\u0631\u062a \u0628\u0647 \u0634\u0645\u0627 \u06a9\u0645\u06a9 \u0645\u06cc \u06a9\u0646\u062f \u062a\u0627 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 Encore.ts \u0648 Next.js. \u06cc\u06a9 \u0628\u0631\u0646\u0627\u0645\u0647 \u0622\u0645\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u0645\u0642\u06cc\u0627\u0633 \u067e\u0630\u06cc\u0631 \u0648 \u062a\u0648\u0644\u06cc\u062f\u06cc \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f.<\/strong><\/p>\n<p>\u0627\u0632 Clerk \u0628\u0631\u0627\u06cc \u062a\u0623\u06cc\u06cc\u062f \u0627\u0639\u062a\u0628\u0627\u0631 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u062f \u060c \u0628\u0631\u0627\u06cc \u067e\u0631\u062f\u0627\u062e\u062a \u0647\u0627 \u06cc\u06a9\u067e\u0627\u0631\u0686\u0647 \u0633\u0627\u0632\u06cc \u0646\u0648\u0627\u0631 \u0627\u0633\u062a \u0648 \u0627\u0632 Tailwind \u0648 Shadcn\/UI \u0628\u0631\u0627\u06cc \u06cc\u06a9 \u0638\u0627\u0647\u0631 \u0637\u0631\u0627\u062d\u06cc \u0634\u062f\u0647 \u0648 \u0627\u062c\u0632\u0627\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u062f.<\/p>\n<p><strong>\u0646\u0633\u062e\u0647 \u06cc \u0646\u0645\u0627\u06cc\u0634\u06cc:<\/strong> https:\/\/encorets-saas-starter.vercel.app<\/p>\n<p><\/p>\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_81 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=\"Toggle Table of Content\"><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 ' ><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/nabfollower.com\/blog\/build-a-production-ready-saas-application-44nb\/#%D9%88%DB%8C%DA%98%DA%AF%DB%8C\" >\u0648\u06cc\u0698\u06af\u06cc<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/nabfollower.com\/blog\/build-a-production-ready-saas-application-44nb\/#%D9%BE%D8%B4%D8%AA%D9%87_%D9%81%D9%86%DB%8C\" >\u067e\u0634\u062a\u0647 \u0641\u0646\u06cc<\/a><\/li><\/ul><\/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\/build-a-production-ready-saas-application-44nb\/#%D8%B4%D8%B1%D9%88%D8%B9\" >\u0634\u0631\u0648\u0639<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/nabfollower.com\/blog\/build-a-production-ready-saas-application-44nb\/#Encore_%D8%B1%D8%A7_%D9%86%D8%B5%D8%A8_%DB%8C%D8%A7_%D8%A8%D9%87_%D8%B1%D9%88%D8%B2_%DA%A9%D9%86%DB%8C%D8%AF\" >Encore \u0631\u0627 \u0646\u0635\u0628 \u06cc\u0627 \u0628\u0647 \u0631\u0648\u0632 \u06a9\u0646\u06cc\u062f<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/nabfollower.com\/blog\/build-a-production-ready-saas-application-44nb\/#%D8%A7%DB%8C%D8%AC%D8%A7%D8%AF_%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87\" >\u0627\u06cc\u062c\u0627\u062f \u0628\u0631\u0646\u0627\u0645\u0647<\/a><\/li><\/ul><\/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\/build-a-production-ready-saas-application-44nb\/#%D8%AA%D9%86%D8%B8%DB%8C%D9%85_%D9%85%D9%86%D8%B4%DB%8C\" >\u062a\u0646\u0638\u06cc\u0645 \u0645\u0646\u0634\u06cc<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/nabfollower.com\/blog\/build-a-production-ready-saas-application-44nb\/#%D8%A7%D8%B3%D8%B1%D8%A7%D8%B1\" >\u0627\u0633\u0631\u0627\u0631<\/a><\/li><\/ul><\/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\/build-a-production-ready-saas-application-44nb\/#%D8%B1%D8%A7%D9%87_%D8%A7%D9%86%D8%AF%D8%A7%D8%B2%DB%8C_%D8%B1%D8%A7%D9%87_%D8%B1%D8%A7%D9%87\" >\u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc \u0631\u0627\u0647 \u0631\u0627\u0647<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/nabfollower.com\/blog\/build-a-production-ready-saas-application-44nb\/#%D8%A7%D8%B3%D8%B1%D8%A7%D8%B1-2\" >\u0627\u0633\u0631\u0627\u0631<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/nabfollower.com\/blog\/build-a-production-ready-saas-application-44nb\/#%D9%BE%D8%B1%D8%AF%D8%A7%D8%AE%D8%AA_%D9%87%D8%A7%DB%8C_%D8%A2%D8%B2%D9%85%D8%A7%DB%8C%D8%B4%DB%8C\" >\u067e\u0631\u062f\u0627\u062e\u062a \u0647\u0627\u06cc \u0622\u0632\u0645\u0627\u06cc\u0634\u06cc<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/nabfollower.com\/blog\/build-a-production-ready-saas-application-44nb\/#%D9%85%D8%AA%D8%BA%DB%8C%D8%B1%D9%87%D8%A7%DB%8C_%D9%85%D8%AD%DB%8C%D8%B7_Vercel\" >\u0645\u062a\u063a\u06cc\u0631\u0647\u0627\u06cc \u0645\u062d\u06cc\u0637 Vercel<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/nabfollower.com\/blog\/build-a-production-ready-saas-application-44nb\/#%D8%AF%D8%B1_%D9%85%D8%AD%D9%84%DB%8C_%D8%A7%D8%AC%D8%B1%D8%A7_%DA%A9%D9%86%DB%8C%D8%AF\" >\u062f\u0631 \u0645\u062d\u0644\u06cc \u0627\u062c\u0631\u0627 \u06a9\u0646\u06cc\u062f<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-13\" href=\"https:\/\/nabfollower.com\/blog\/build-a-production-ready-saas-application-44nb\/#%D8%A7%DB%8C%D8%AC%D8%A7%D8%AF_%D9%85%D8%B4%D8%AA%D8%B1%DB%8C_%D8%AF%D8%B1%D8%AE%D9%88%D8%A7%D8%B3%D8%AA\" >\u0627\u06cc\u062c\u0627\u062f \u0645\u0634\u062a\u0631\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-14\" href=\"https:\/\/nabfollower.com\/blog\/build-a-production-ready-saas-application-44nb\/#%D8%A7%D8%B9%D8%B2%D8%A7%D9%85\" >\u0627\u0639\u0632\u0627\u0645<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-15\" href=\"https:\/\/nabfollower.com\/blog\/build-a-production-ready-saas-application-44nb\/#%D9%85%D8%AD%D8%A7%D8%B5%D8%B1%D9%87_%DA%A9%D8%B1%D8%AF%D9%86\" >\u0645\u062d\u0627\u0635\u0631\u0647 \u06a9\u0631\u062f\u0646<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-16\" href=\"https:\/\/nabfollower.com\/blog\/build-a-production-ready-saas-application-44nb\/#Nextjs_%D8%AF%D8%B1_Vercel\" >Next.js \u062f\u0631 Vercel<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-17\" href=\"https:\/\/nabfollower.com\/blog\/build-a-production-ready-saas-application-44nb\/#%D9%BE%DB%8C%DA%A9%D8%B1%D8%A8%D9%86%D8%AF%DB%8C_Frontend_Cors\" >\u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc Frontend &#038; Cors<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-18\" href=\"https:\/\/nabfollower.com\/blog\/build-a-production-ready-saas-application-44nb\/#%D9%BE%DB%8C%DA%86%DB%8C%D8%AF%D9%86\" >\u067e\u06cc\u0686\u06cc\u062f\u0646<\/a><\/li><\/ul><\/nav><\/div>\n<h3><span class=\"ez-toc-section\" id=\"%D9%88%DB%8C%DA%98%DA%AF%DB%8C\"><\/span>\n<p>  \u0648\u06cc\u0698\u06af\u06cc<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<ul>\n<li>\u0635\u0641\u062d\u0647 \u0641\u0631\u0648\u062f \u0628\u0627\u0632\u0627\u0631\u06cc\u0627\u0628\u06cc (\/)<\/li>\n<li>\u0635\u0641\u062d\u0647 \u0642\u06cc\u0645\u062a \u06af\u0630\u0627\u0631\u06cc (\/\u0642\u06cc\u0645\u062a \u06af\u0630\u0627\u0631\u06cc) \u06a9\u0647 \u0628\u0647 \u067e\u0631\u062f\u0627\u062e\u062a \u0631\u0627\u0647 \u0631\u0627\u0647 \u0645\u062a\u0635\u0644 \u0645\u06cc \u0634\u0648\u062f<\/li>\n<li>\u0635\u0641\u062d\u0627\u062a \u062f\u0627\u0634\u0628\u0648\u0631\u062f \u0628\u0627 (\/\u062f\u0627\u0634\u0628\u0648\u0631\u062f)<\/li>\n<li>\u0645\u062f\u06cc\u0631\u06cc\u062a \u0627\u0634\u062a\u0631\u0627\u06a9 (\/\u062f\u0627\u0634\u0628\u0648\u0631\u062f\/\u0627\u0634\u062a\u0631\u0627\u06a9)<\/li>\n<\/ul>\n<h3><span class=\"ez-toc-section\" id=\"%D9%BE%D8%B4%D8%AA%D9%87_%D9%81%D9%86%DB%8C\"><\/span>\n<p>  \u067e\u0634\u062a\u0647 \u0641\u0646\u06cc<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<h2><span class=\"ez-toc-section\" id=\"%D8%B4%D8%B1%D9%88%D8%B9\"><\/span>\n<p>  \u0634\u0631\u0648\u0639<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<h3><span class=\"ez-toc-section\" id=\"Encore_%D8%B1%D8%A7_%D9%86%D8%B5%D8%A8_%DB%8C%D8%A7_%D8%A8%D9%87_%D8%B1%D9%88%D8%B2_%DA%A9%D9%86%DB%8C%D8%AF\"><\/span>\n<p>  Encore \u0631\u0627 \u0646\u0635\u0628 \u06cc\u0627 \u0628\u0647 \u0631\u0648\u0632 \u06a9\u0646\u06cc\u062f<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0646\u0635\u0628 Encore:<\/p>\n<ul>\n<li>\n<strong>MACOS:<\/strong> <code>brew install encoredev\/tap\/encore<\/code>\n<\/li>\n<li>\n<strong>\u0644\u06cc\u0646\u0648\u06a9\u0633:<\/strong> <code>curl -L https:\/\/encore.dev\/install.sh | bash<\/code>\n<\/li>\n<li>\n<strong>WINDOWS:<\/strong> <code>iwr https:\/\/encore.dev\/install.ps1 | iex<\/code>\n<\/li>\n<\/ul>\n<p><strong>\u06cc\u0627\u062f\u062f\u0627\u0634\u062a<\/strong>: \u0627\u06cc\u0646 \u0627\u0633\u062a\u0627\u0631\u062a \u0628\u0647 Encore v1.46.9+\u0646\u06cc\u0627\u0632 \u062f\u0627\u0631\u062f \u060c \u0627\u06af\u0631 \u0646\u0633\u062e\u0647 \u0642\u062f\u06cc\u0645\u06cc \u062a\u0631\u06cc \u0646\u0635\u0628 \u06a9\u0631\u062f\u0647 \u0627\u06cc\u062f \u060c \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0628\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc <code>encore version update<\/code>\u0628\u0634\u0631<\/p>\n<h3><span class=\"ez-toc-section\" id=\"%D8%A7%DB%8C%D8%AC%D8%A7%D8%AF_%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87\"><\/span>\n<p>  \u0627\u06cc\u062c\u0627\u062f \u0628\u0631\u0646\u0627\u0645\u0647<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0627\u0632 \u0627\u06cc\u0646 \u0627\u0644\u06af\u0648\u06cc \u06cc\u06a9 \u0628\u0631\u0646\u0627\u0645\u0647 \u0645\u062d\u0644\u06cc \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight shell\"><code>encore app create my-app-name <span class=\"nt\">--example<\/span><span class=\"o\">=<\/span>ts\/saas-starter\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 \u0648\u0627\u0628\u0633\u062a\u06af\u06cc \u0647\u0627\u06cc \u062c\u0644\u0648 \u0631\u0627 \u0646\u0635\u0628 \u06a9\u0646\u06cc\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight shell\"><code><span class=\"nb\">cd <\/span>my-app-name\/frontend\npnpm <span class=\"nb\">install<\/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<h2><span class=\"ez-toc-section\" id=\"%D8%AA%D9%86%D8%B8%DB%8C%D9%85_%D9%85%D9%86%D8%B4%DB%8C\"><\/span>\n<p>  \u062a\u0646\u0638\u06cc\u0645 \u0645\u0646\u0634\u06cc<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0627\u06af\u0631 \u0642\u0628\u0644\u0627\u064b \u0686\u0646\u06cc\u0646 \u0646\u06a9\u0631\u062f\u0647 \u0627\u06cc\u062f \u060c \u06cc\u06a9 \u062d\u0633\u0627\u0628 \u0645\u0646\u0634\u06cc \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f. \u0633\u067e\u0633 \u060c \u062f\u0631 \u062f\u0627\u0634\u0628\u0648\u0631\u062f \u0645\u0646\u0634\u06cc \u060c \u06cc\u06a9 \u0628\u0631\u0646\u0627\u0645\u0647 \u062c\u062f\u06cc\u062f \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f.<\/p>\n<p>\u0627\u0637\u0645\u06cc\u0646\u0627\u0646 \u062d\u0627\u0635\u0644 \u06a9\u0646\u06cc\u062f \u06a9\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u0631\u0627\u06cc \u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc \u0627\u0632 \u0633\u0627\u0632\u0645\u0627\u0646 \u0647\u0627 \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u0634\u062f\u0647 \u0627\u0633\u062a \u060c \u06a9\u0647 \u0645\u06cc \u062a\u0648\u0627\u0646\u0646\u062f \u062f\u0631 \u0622\u0646 \u0641\u0639\u0627\u0644 \u0634\u0648\u0646\u062f <strong>\u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u0645\u062f\u06cc\u0631\u06cc\u062a \u0633\u0627\u0632\u0645\u0627\u0646<\/strong> \u0635\u0641\u062d\u0647<\/p>\n<h3><span class=\"ez-toc-section\" id=\"%D8%A7%D8%B3%D8%B1%D8%A7%D8%B1\"><\/span>\n<p>  \u0627\u0633\u0631\u0627\u0631<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0627\u06af\u0631 \u0645\u06cc\u0632\u0628\u0627\u0646 \u0628\u0631\u0646\u0627\u0645\u0647 \u062e\u0648\u062f \u062f\u0631 Vercel \u0647\u0633\u062a\u06cc\u062f (\u0628\u0647 \u062f\u0633\u062a\u0648\u0631\u0627\u0644\u0639\u0645\u0644 \u0647\u0627\u06cc \u0627\u0633\u062a\u0642\u0631\u0627\u0631 \u0628\u06cc\u0634\u062a\u0631 \u0645\u0631\u0627\u062c\u0639\u0647 \u06a9\u0646\u06cc\u062f) \u060c \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0628\u0631\u0646\u0627\u0645\u0647 \u0645\u0646\u0634\u06cc \u062e\u0648\u062f \u0631\u0627 \u0628\u0627 \u067e\u0631\u0648\u0698\u0647 Vercel \u062e\u0648\u062f \u062f\u0631 \u0632\u06cc\u0631 \u0648\u0635\u0644 \u06a9\u0646\u06cc\u062f <strong>\u0627\u062f\u063a\u0627\u0645<\/strong> \u062f\u0631 \u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u067e\u0631\u0648\u0698\u0647 \u062f\u0631 Vercel.<br \/>\u0641\u0631\u0627\u0645\u0648\u0634 \u0646\u06a9\u0646\u06cc\u062f \u06a9\u0647 \u0627\u062c\u0631\u0627 \u06a9\u0646\u06cc\u062f <code>vercel env pull<\/code> \u067e\u0633 \u0627\u0632 \u0622\u0646<\/p>\n<p>\u062f\u0631 \u063a\u06cc\u0631 \u0627\u06cc\u0646 \u0635\u0648\u0631\u062a \u060c \u0628\u0647 <em>\u06a9\u0644\u06cc\u062f\u0647\u0627\u06cc API<\/em> \u0635\u0641\u062d\u0647 \u0628\u0631\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0634\u0645\u0627 &#8220;\u06a9\u0644\u06cc\u062f \u0642\u0627\u0628\u0644 \u0686\u0627\u067e&#8221; \u0648 \u06cc\u06a9\u06cc \u0627\u0632 &#8220;\u06a9\u0644\u06cc\u062f\u0647\u0627\u06cc \u0645\u062e\u0641\u06cc&#8221; \u0631\u0627 \u06a9\u067e\u06cc \u06a9\u0646\u06cc\u062f. \u0628\u0647 \u067e\u0631\u0648\u0698\u0647 \u062c\u0644\u0648\u06cc \u062e\u0648\u062f \u060c \u0622\u0646\u0647\u0627 \u0631\u0627 \u0628\u0647 <code>.env.local<\/code> \u0628\u0647 \u0639\u0646\u0648\u0627\u0646<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY={PUBLISHABLE_KEY}\nCLERK_SECRET_KEY={SECRET_KEY}\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>\u0647\u0645\u0686\u0646\u06cc\u0646 \u0628\u0627\u06cc\u062f \u0645\u062a\u063a\u06cc\u0631\u0647\u0627\u06cc \u0645\u062d\u06cc\u0637 \u0632\u06cc\u0631 \u0631\u0627 \u0628\u0647 \u067e\u0631\u0648\u0698\u0647 \u062c\u0644\u0648\u06cc \u062e\u0648\u062f \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>NEXT_PUBLIC_CLERK_SIGN_IN_URL=\"\/sign-in\"\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>\u0628\u0631\u0627\u06cc \u0627\u0636\u0627\u0641\u0647 \u06a9\u0631\u062f\u0646 \u0622\u0646\u0647\u0627 \u0628\u0647 Encore \u060c \u0628\u0647 <em>\u06a9\u0644\u06cc\u062f\u0647\u0627\u06cc API<\/em> \u0635\u0641\u062d\u0647 \u0628\u0631\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0634\u0645\u0627 &#8220;\u06a9\u0644\u06cc\u062f \u0642\u0627\u0628\u0644 \u0686\u0627\u067e&#8221; \u0648 \u06cc\u06a9\u06cc \u0627\u0632 &#8220;\u06a9\u0644\u06cc\u062f\u0647\u0627\u06cc \u0645\u062e\u0641\u06cc&#8221; \u0631\u0627 \u06a9\u067e\u06cc \u06a9\u0646\u06cc\u062f.<\/p>\n<p>\u0627\u0632 \u062a\u0631\u0645\u06cc\u0646\u0627\u0644 \u062e\u0648\u062f (\u062f\u0627\u062e\u0644 \u0641\u0647\u0631\u0633\u062a \u0628\u0631\u0646\u0627\u0645\u0647 Encore \u062e\u0648\u062f) \u060c \u0627\u062c\u0631\u0627 \u06a9\u0646\u06cc\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight shell\"><code><span class=\"nv\">$ <\/span>encore secret <span class=\"nb\">set<\/span> <span class=\"nt\">--prod<\/span> ClerkSecretKey\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>\u0628\u0639\u062f \u060c \u0647\u0645\u06cc\u0646 \u06a9\u0627\u0631 \u0631\u0627 \u0628\u0631\u0627\u06cc \u0631\u0627\u0632 \u062a\u0648\u0633\u0639\u0647 \u0627\u0646\u062c\u0627\u0645 \u062f\u0647\u06cc\u062f. \u0627\u0645\u0646 \u062a\u0631\u06cc\u0646 \u0631\u0627\u0647 \u0627\u06cc\u062c\u0627\u062f \u06cc\u06a9 \u06a9\u0644\u06cc\u062f \u0645\u062e\u0641\u06cc \u062f\u06cc\u06af\u0631 \u0627\u0633\u062a (\u0645\u0646\u0634\u06cc \u0628\u0647 \u0634\u0645\u0627 \u0627\u0645\u06a9\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f \u0686\u0646\u062f\u06cc\u0646 \u0646\u0641\u0631 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u062f).<br \/>\u067e\u0633 \u0627\u0632 \u0631\u0627\u0632 \u0645\u0634\u062a\u0631\u06cc \u0628\u0631\u0627\u06cc \u062a\u0648\u0633\u0639\u0647 \u060c \u0622\u0646 \u0631\u0627 \u0628\u0647 \u0637\u0648\u0631 \u0645\u0634\u0627\u0628\u0647 \u0628\u0627 \u0642\u0628\u0644 \u062a\u0646\u0638\u06cc\u0645 \u06a9\u0646\u06cc\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight shell\"><code><span class=\"nv\">$ <\/span>encore secret <span class=\"nb\">set<\/span> <span class=\"nt\">--dev<\/span> ClerkSecretKey\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<h2><span class=\"ez-toc-section\" id=\"%D8%B1%D8%A7%D9%87_%D8%A7%D9%86%D8%AF%D8%A7%D8%B2%DB%8C_%D8%B1%D8%A7%D9%87_%D8%B1%D8%A7%D9%87\"><\/span>\n<p>  \u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc \u0631\u0627\u0647 \u0631\u0627\u0647<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0627\u06af\u0631 \u0642\u0628\u0644\u0627\u064b \u06cc\u06a9\u06cc \u0627\u0632 \u0622\u0646\u0647\u0627 \u0631\u0627 \u0646\u062f\u0627\u0631\u06cc\u062f \u060c \u06cc\u06a9 \u062d\u0633\u0627\u0628 \u0631\u0627\u0647 \u0631\u0627\u0647 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f. \u0633\u067e\u0633 \u062d\u0633\u0627\u0628 \u062e\u0648\u062f \u0631\u0627 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f \u0648 \u062d\u062a\u0645\u0627\u064b \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u0648 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u0642\u06cc\u0645\u062a \u06af\u0630\u0627\u0631\u06cc \u0631\u0627 \u062a\u0646\u0638\u06cc\u0645 \u06a9\u0646\u06cc\u062f. \u0647\u0645\u0686\u0646\u06cc\u0646 \u0628\u0627\u06cc\u062f \u067e\u0648\u0631\u062a\u0627\u0644 \u0645\u0634\u062a\u0631\u06cc \u0635\u0648\u0631\u062a\u062d\u0633\u0627\u0628 \u0631\u0627 \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u06a9\u0646\u06cc\u062f.<\/p>\n<p>\u0647\u0645\u0686\u0646\u06cc\u0646 \u0628\u0627\u06cc\u062f \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u06cc\u06a9 \u0646\u0642\u0637\u0647 \u067e\u0627\u06cc\u0627\u0646\u06cc Webhook \u062f\u0631 Stripe \u060c \u067e\u0633 \u0632\u0645\u06cc\u0646\u0647 \u062e\u0648\u062f \u0631\u0627 \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u062f \u0648 URL Endpoint \u0631\u0627 \u062a\u0646\u0638\u06cc\u0645 \u06a9\u0646\u06cc\u062f <code>https:\/\/YOUR_DOMAIN\/stripe\/webhook<\/code>\u0628\u0634\u0631<\/p>\n<p>\u062f\u0631 \u062d\u0627\u0644 \u062d\u0627\u0636\u0631 \u060c \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u0642\u06cc\u0645\u062a \u06af\u0630\u0627\u0631\u06cc \u062f\u0631 Frontend\/lib\/plans.ts \u0630\u062e\u06cc\u0631\u0647 \u0645\u06cc \u0634\u0648\u0646\u062f \u060c \u0627\u0645\u0627 \u062f\u0631 \u0635\u0648\u0631\u062a \u062a\u0645\u0627\u06cc\u0644 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0622\u0646\u0647\u0627 \u0631\u0627 \u0627\u0632 Stripe \u0628\u062e\u0648\u0627\u0646\u06cc\u062f \u06cc\u0627 \u0622\u0646\u0647\u0627 \u0631\u0627 \u062f\u0631 \u06cc\u06a9 \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647 \u0630\u062e\u06cc\u0631\u0647 \u06a9\u0646\u06cc\u062f.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"%D8%A7%D8%B3%D8%B1%D8%A7%D8%B1-2\"><\/span>\n<p>  \u0627\u0633\u0631\u0627\u0631<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u062f\u0631 \u062f\u0627\u0634\u0628\u0648\u0631\u062f \u0646\u0648\u0627\u0631 \u060c \u0628\u0647 <em>\u062a\u0648\u0633\u0639\u0647 \u062f\u0647\u0646\u062f\u0647<\/em> \u0635\u0641\u062d\u0647 \u0648 \u0627\u06cc\u062c\u0627\u062f \u06cc\u06a9 \u06a9\u0644\u06cc\u062f \u062c\u062f\u06cc\u062f API. &#8220;\u06a9\u0644\u06cc\u062f \u0645\u062e\u0641\u06cc&#8221; \u0631\u0627 \u06a9\u067e\u06cc \u06a9\u0646\u06cc\u062f.<\/p>\n<p>\u0627\u0632 \u062a\u0631\u0645\u06cc\u0646\u0627\u0644 \u062e\u0648\u062f (\u062f\u0627\u062e\u0644 \u0641\u0647\u0631\u0633\u062a \u0628\u0631\u0646\u0627\u0645\u0647 Encore \u062e\u0648\u062f) \u060c \u0627\u062c\u0631\u0627 \u06a9\u0646\u06cc\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight shell\"><code><span class=\"nv\">$ <\/span>encore secret <span class=\"nb\">set<\/span> <span class=\"nt\">--dev<\/span> StripeSecretKey\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>\u0628\u0631\u0627\u06cc \u0627\u06cc\u0646\u06a9\u0647 \u0628\u062a\u0648\u0627\u0646\u06cc\u062f \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0647\u0627\u06cc \u0648\u0631\u0648\u062f\u06cc \u0648\u0628 \u0631\u0627 \u062a\u0623\u06cc\u06cc\u062f \u06a9\u0646\u06cc\u062f \u060c \u0628\u0627\u06cc\u062f \u0631\u0627\u0632 \u0627\u0645\u0636\u0627 \u0631\u0627 \u0627\u0632 \u0635\u0641\u062d\u0647 Webhook \u062f\u0631 \u062f\u0627\u0634\u0628\u0648\u0631\u062f \u0646\u0648\u0627\u0631 \u06a9\u067e\u06cc \u06a9\u0631\u062f\u0647 \u0648 \u0628\u0627 \u0627\u062c\u0631\u0627\u06cc \u0622\u0646 \u0628\u0647 Encore \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight shell\"><code><span class=\"nv\">$ <\/span>encore secret <span class=\"nb\">set<\/span> <span class=\"nt\">--dev<\/span> StripeWebhookSigningSecret\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>\u0647\u0646\u06af\u0627\u0645\u06cc \u06a9\u0647 \u0645\u06cc \u062e\u0648\u0627\u0647\u06cc\u062f \u0622\u0646 \u0631\u0627 \u0628\u0631\u0627\u06cc \u062a\u0648\u0644\u06cc\u062f \u062a\u0646\u0638\u06cc\u0645 \u06a9\u0646\u06cc\u062f \u060c \u06cc\u06a9 \u06a9\u0644\u06cc\u062f \u0645\u062e\u0641\u06cc \u062c\u062f\u0627\u06af\u0627\u0646\u0647 \u0648 Secret Signing Secret \u0631\u0627 \u0628\u0631\u0627\u06cc \u062a\u0648\u0644\u06cc\u062f \u0648 \u0627\u062c\u0631\u0627\u06cc \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight shell\"><code><span class=\"nv\">$ <\/span>encore secret <span class=\"nb\">set<\/span> <span class=\"nt\">--prod<\/span> StripeSecretKey\n<span class=\"nv\">$ <\/span>encore secret <span class=\"nb\">set<\/span> <span class=\"nt\">--prod<\/span> StripeWebhookSigningSecret\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<h3><span class=\"ez-toc-section\" id=\"%D9%BE%D8%B1%D8%AF%D8%A7%D8%AE%D8%AA_%D9%87%D8%A7%DB%8C_%D8%A2%D8%B2%D9%85%D8%A7%DB%8C%D8%B4%DB%8C\"><\/span>\n<p>  \u067e\u0631\u062f\u0627\u062e\u062a \u0647\u0627\u06cc \u0622\u0632\u0645\u0627\u06cc\u0634\u06cc<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0628\u0631\u0627\u06cc \u0622\u0632\u0645\u0627\u06cc\u0634 \u067e\u0631\u062f\u0627\u062e\u062a \u0647\u0627\u06cc \u0631\u0627\u0647 \u0631\u0627\u0647 \u060c \u0627\u0632 \u062c\u0632\u0626\u06cc\u0627\u062a \u06a9\u0627\u0631\u062a \u062a\u0633\u062a \u0632\u06cc\u0631 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f:<\/p>\n<p>\u0634\u0645\u0627\u0631\u0647 \u06a9\u0627\u0631\u062a: 4242 4242 4242 4242<br \/>\u0627\u0646\u0642\u0636\u0627: \u0647\u0631 \u062a\u0627\u0631\u06cc\u062e \u0622\u06cc\u0646\u062f\u0647<br \/>CVC: \u0647\u0631 \u0634\u0645\u0627\u0631\u0647 3 \u0631\u0642\u0645\u06cc<\/p>\n<h3><span class=\"ez-toc-section\" id=\"%D9%85%D8%AA%D8%BA%DB%8C%D8%B1%D9%87%D8%A7%DB%8C_%D9%85%D8%AD%DB%8C%D8%B7_Vercel\"><\/span>\n<p>  \u0645\u062a\u063a\u06cc\u0631\u0647\u0627\u06cc \u0645\u062d\u06cc\u0637 Vercel<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0645\u062a\u063a\u06cc\u0631\u0647\u0627\u06cc \u0645\u062d\u06cc\u0637\u06cc \u062e\u0627\u0635 Vercel \u0628\u0647 \u0637\u0648\u0631 \u067e\u06cc\u0634 \u0641\u0631\u0636 \u0628\u0647 \u0635\u0648\u0631\u062a \u0645\u062d\u0644\u06cc \u062a\u0646\u0638\u06cc\u0645 \u0646\u0634\u062f\u0647 \u0627\u0646\u062f \u060c \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u0628\u0627\u06cc\u062f \u062e\u0648\u062f\u062a\u0627\u0646 \u0622\u0646\u0647\u0627 \u0631\u0627 \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u062f. \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u0631\u0627 \u0645\u06cc \u062a\u0648\u0627\u0646 \u062f\u0631 \u0635\u0641\u062d\u0647 \u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u067e\u0631\u0648\u0698\u0647 \u062f\u0631 Vercel \u0627\u0646\u062c\u0627\u0645 \u062f\u0627\u062f.<\/p>\n<p>\u0644\u0637\u0641\u0627\u064b \u0645\u062a\u063a\u06cc\u0631\u0647\u0627\u06cc \u0645\u062d\u06cc\u0637 \u0632\u06cc\u0631 \u0631\u0627 \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u062f <strong>\u0628\u0631\u0627\u06cc \u062a\u0648\u0633\u0639\u0647<\/strong>:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>VERCEL_ENV=\"development\"\nNEXT_PUBLIC_VERCEL_ENV=\"development\"\nVERCEL_GIT_PULL_REQUEST_ID=\"\"\nNEXT_PUBLIC_VERCEL_GIT_PULL_REQUEST_ID=\"\"\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<h2><span class=\"ez-toc-section\" id=\"%D8%AF%D8%B1_%D9%85%D8%AD%D9%84%DB%8C_%D8%A7%D8%AC%D8%B1%D8%A7_%DA%A9%D9%86%DB%8C%D8%AF\"><\/span>\n<p>  \u062f\u0631 \u0645\u062d\u0644\u06cc \u0627\u062c\u0631\u0627 \u06a9\u0646\u06cc\u062f<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Backend Encore \u062e\u0648\u062f \u0631\u0627 \u0627\u062c\u0631\u0627 \u06a9\u0646\u06cc\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight shell\"><code><span class=\"nb\">cd <\/span>backend\nencore run\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><strong>\u06cc\u0627\u062f\u062f\u0627\u0634\u062a<\/strong>: \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u0634\u06a9\u0633\u062a \u062e\u0648\u0627\u0647\u062f \u062e\u0648\u0631\u062f \u0645\u06af\u0631 \u0627\u06cc\u0646\u06a9\u0647 \u0627\u0633\u0631\u0627\u0631 \u0646\u0648\u0627\u0631 \u0648 \u0645\u0646\u0634\u06cc \u0631\u0627 \u0645\u0637\u0627\u0628\u0642 \u062f\u0633\u062a\u0648\u0631\u0627\u0644\u0639\u0645\u0644 \u0647\u0627\u06cc \u0641\u0648\u0642 \u062a\u0646\u0638\u06cc\u0645 \u06a9\u0646\u06cc\u062f.<\/p>\n<p>\u062f\u0631 \u06cc\u06a9 \u067e\u0646\u062c\u0631\u0647 \u062a\u0631\u0645\u06cc\u0646\u0627\u0644 \u0645\u062a\u0641\u0627\u0648\u062a \u060c REACT Frontend \u0631\u0627 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 Next.js \u0627\u062c\u0631\u0627 \u06a9\u0646\u06cc\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight shell\"><code><span class=\"nb\">cd <\/span>frontend\npnpm run dev\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<h3><span class=\"ez-toc-section\" id=\"%D8%A7%DB%8C%D8%AC%D8%A7%D8%AF_%D9%85%D8%B4%D8%AA%D8%B1%DB%8C_%D8%AF%D8%B1%D8%AE%D9%88%D8%A7%D8%B3%D8%AA\"><\/span>\n<p>  \u0627\u06cc\u062c\u0627\u062f \u0645\u0634\u062a\u0631\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0628\u0627 \u0628\u0627\u0632\u0633\u0627\u0632\u06cc \u0645\u0634\u062a\u0631\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u060c \u0647\u0631 \u0632\u0645\u0627\u0646 \u06a9\u0647 \u062a\u063a\u06cc\u06cc\u0631 \u062f\u0631 \u06cc\u06a9 \u0646\u0642\u0637\u0647 \u067e\u0627\u06cc\u0627\u0646\u06cc Encore \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f \u060c \u0642\u0631\u0627\u0631\u062f\u0627\u062f \u0628\u06cc\u0646 \u067e\u0633 \u0632\u0645\u06cc\u0646\u0647 \u0648 \u062c\u0628\u0647\u0647 \u0631\u0627 \u062f\u0631 \u0647\u0645\u06af\u0627\u0645 \u0633\u0627\u0632\u06cc \u0646\u06af\u0647 \u062f\u0627\u0631\u06cc\u062f.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight shell\"><code>pnpm run gen <span class=\"c\"># Deployed Encore staging environment<\/span>\n<span class=\"c\"># or<\/span>\npnpm run gen:local <span class=\"c\"># Locally running Encore backend<\/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<h2><span class=\"ez-toc-section\" id=\"%D8%A7%D8%B9%D8%B2%D8%A7%D9%85\"><\/span>\n<p>  \u0627\u0639\u0632\u0627\u0645<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<h3><span class=\"ez-toc-section\" id=\"%D9%85%D8%AD%D8%A7%D8%B5%D8%B1%D9%87_%DA%A9%D8%B1%D8%AF%D9%86\"><\/span>\n<p>  \u0645\u062d\u0627\u0635\u0631\u0647 \u06a9\u0631\u062f\u0646<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u067e\u0633 \u0632\u0645\u06cc\u0646\u0647 \u062e\u0648\u062f \u0631\u0627 \u0628\u0647 \u06cc\u06a9 \u0645\u062d\u06cc\u0637 \u0635\u062d\u0646\u0647 \u062f\u0631 \u0627\u0628\u0631 \u062a\u0648\u0633\u0639\u0647 \u0631\u0627\u06cc\u06af\u0627\u0646 Encore \u0645\u0633\u062a\u0642\u0631 \u06a9\u0646\u06cc\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight shell\"><code>git add <span class=\"nt\">-A<\/span> <span class=\"nb\">.<\/span>\ngit commit <span class=\"nt\">-m<\/span> <span class=\"s1\">'Commit message'<\/span>\ngit push encore\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 \u0628\u0647 \u062f\u0627\u0634\u0628\u0648\u0631\u062f \u0627\u0628\u0631 \u0628\u0631\u0648\u06cc\u062f \u062a\u0627 \u0628\u0631 \u0627\u0633\u062a\u0642\u0631\u0627\u0631 \u062e\u0648\u062f \u0646\u0638\u0627\u0631\u062a \u06a9\u0646\u06cc\u062f \u0648 URL \u062a\u0648\u0644\u06cc\u062f \u062e\u0648\u062f \u0631\u0627 \u067e\u06cc\u062f\u0627 \u06a9\u0646\u06cc\u062f.<\/p>\n<p>\u0627\u0632 \u0622\u0646\u062c\u0627 \u0647\u0645\u0686\u0646\u06cc\u0646 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0645\u0639\u06cc\u0627\u0631\u0647\u0627 \u060c \u0627\u062b\u0631\u06cc \u0631\u0627 \u0628\u0628\u06cc\u0646\u06cc\u062f \u060c \u0628\u0631\u0646\u0627\u0645\u0647 \u062e\u0648\u062f \u0631\u0627 \u0628\u0647 \u06cc\u06a9 repo github \u0645\u062a\u0635\u0644 \u06a9\u0646\u06cc\u062f \u062a\u0627 \u0628\u0647 \u0635\u0648\u0631\u062a \u062e\u0648\u062f\u06a9\u0627\u0631 \u062f\u0631 \u062a\u0639\u0647\u062f\u0627\u062a \u062c\u062f\u06cc\u062f \u0645\u0633\u062a\u0642\u0631 \u0634\u0648\u06cc\u062f \u0648 \u062d\u0633\u0627\u0628 AWS \u06cc\u0627 GCP \u062e\u0648\u062f \u0631\u0627 \u0628\u0631\u0627\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0628\u0631\u0627\u06cc \u0627\u0633\u062a\u0642\u0631\u0627\u0631 \u0648\u0635\u0644 \u06a9\u0646\u06cc\u062f.<\/p>\n<p><strong>\u06a9\u0627\u0631 \u062e\u0648\u0628 \u060c \u067e\u0633 \u0632\u0645\u06cc\u0646\u0647 SaaS \u0634\u0645\u0627 \u0627\u06a9\u0646\u0648\u0646 \u0628\u0647 \u0627\u0628\u0631 \u0645\u0633\u062a\u0642\u0631 \u0634\u062f\u0647 \u0627\u0633\u062a!<\/strong><\/p>\n<h3><span class=\"ez-toc-section\" id=\"Nextjs_%D8%AF%D8%B1_Vercel\"><\/span>\n<p>  Next.js \u062f\u0631 Vercel<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<ol>\n<li>\u06cc\u06a9 repo \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f \u0648 \u067e\u0631\u0648\u0698\u0647 \u0631\u0627 \u0628\u0647 GitHub \u0641\u0634\u0627\u0631 \u062f\u0647\u06cc\u062f.<\/li>\n<li>\u06cc\u06a9 \u067e\u0631\u0648\u0698\u0647 \u062c\u062f\u06cc\u062f \u062f\u0631 Vercel \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f \u0648 \u0622\u0646 \u0631\u0627 \u0628\u0647 repo github \u062e\u0648\u062f \u0646\u0634\u0627\u0646 \u062f\u0647\u06cc\u062f.<\/li>\n<li>\u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u0631\u062f\u0646 <code>frontend<\/code> \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0641\u0647\u0631\u0633\u062a \u0627\u0635\u0644\u06cc \u067e\u0631\u0648\u0698\u0647 Vercel.<\/li>\n<\/ol>\n<h2><span class=\"ez-toc-section\" id=\"%D9%BE%DB%8C%DA%A9%D8%B1%D8%A8%D9%86%D8%AF%DB%8C_Frontend_Cors\"><\/span>\n<p>  \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc Frontend &#038; Cors<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u067e\u0633 \u0632\u0645\u06cc\u0646\u0647 \u0628\u0627\u06cc\u062f \u0628\u062f\u0627\u0646\u062f \u06a9\u0647 \u062c\u0628\u0647\u0647 \u062f\u0631 \u0622\u0646 \u0645\u06cc\u0632\u0628\u0627\u0646\u06cc \u0634\u062f\u0647 \u0627\u0633\u062a \u060c \u062a\u0627 \u0628\u062a\u0648\u0627\u0646\u06cc\u062f URL \u0647\u0627\u06cc \u062a\u063a\u06cc\u06cc\u0631 \u0645\u0633\u06cc\u0631 \u0635\u062d\u06cc\u062d \u0631\u0627 \u0627\u0631\u0627\u0626\u0647 \u062f\u0647\u0646\u062f<br \/>\u0628\u0627\u0632\u06af\u0634\u062a \u0627\u0632 \u0646\u0648\u0627\u0631. \u0647\u0645\u0686\u0646\u06cc\u0646 \u0644\u0627\u0632\u0645 \u0627\u0633\u062a \u06a9\u0647 COR \u0647\u0627 \u0628\u0647 \u062f\u0631\u0633\u062a\u06cc \u06a9\u0627\u0631 \u06a9\u0646\u0646\u062f.<\/p>\n<p>\u0628\u0631\u0627\u06cc \u0631\u0633\u06cc\u062f\u06af\u06cc \u0628\u0647 \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u060c \u0628\u0627\u06cc\u062f \u062f\u0648 \u067e\u0631\u0648\u0646\u062f\u0647 \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u0631\u0627 \u0628\u0647 \u0631\u0648\u0632 \u06a9\u0646\u06cc\u062f.<\/p>\n<p>\u0627\u0628\u062a\u062f\u0627 \u060c \u0628\u0647 \u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u06a9\u0646\u06cc\u062f <code>FRONTEND_URL<\/code> \u062b\u0627\u0628\u062a \u062f\u0631 <code>backend\/config.ts<\/code> \u0628\u0631\u0627\u06cc \u0627\u0634\u0627\u0631\u0647 \u0628\u0647 \u062c\u0627\u06cc\u06cc \u06a9\u0647 \u0645\u06cc\u0632\u0628\u0627\u0646 \u062c\u0644\u0648\u06cc \u0634\u0645\u0627 \u0627\u0633\u062a.<\/p>\n<p>\u062b\u0627\u0646\u06cc\u0627\u064b \u060c \u0627\u06af\u0631 \u0647\u0646\u06af\u0627\u0645 \u062a\u0645\u0627\u0633 \u0628\u0627 API Encore \u0627\u0632 \u062c\u0644\u0648\u06cc \u062e\u0648\u062f \u060c \u0648\u0627\u0631\u062f CORS \u0645\u06cc \u0634\u0648\u06cc\u062f \u060c \u0645\u0645\u06a9\u0646 \u0627\u0633\u062a \u0644\u0627\u0632\u0645 \u0628\u0627\u0634\u062f \u0645\u0634\u062e\u0635 \u06a9\u0646\u06cc\u062f \u06a9\u0647 \u0645\u0646\u0634\u0627\u0621 \u0645\u062c\u0627\u0632 \u0628\u0647 \u062f\u0633\u062a\u0631\u0633\u06cc \u0628\u0647 API \u0634\u0645\u0627 (\u0627\u0632 \u0637\u0631\u06cc\u0642 \u0645\u0631\u0648\u0631\u06af\u0631\u0647\u0627) \u0627\u0633\u062a. \u0634\u0645\u0627 \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u0631\u0627 \u0628\u0627 \u0645\u0634\u062e\u0635 \u06a9\u0631\u062f\u0646 <code>global_cors<\/code> \u06a9\u0644\u06cc\u062f \u062f\u0631 <code>encore.app<\/code> \u067e\u0631\u0648\u0646\u062f\u0647 \u060c \u06a9\u0647 \u0633\u0627\u062e\u062a\u0627\u0631 \u0632\u06cc\u0631 \u0631\u0627 \u062f\u0627\u0631\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight json\"><code><span class=\"nl\">\"global_cors\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span><span class=\"w\">\n  <\/span><span class=\"err\">\/\/<\/span><span class=\"w\"> <\/span><span class=\"err\">allow_origins_without_credentials<\/span><span class=\"w\"> <\/span><span class=\"err\">specifies<\/span><span class=\"w\"> <\/span><span class=\"err\">the<\/span><span class=\"w\"> <\/span><span class=\"err\">allowed<\/span><span class=\"w\"> <\/span><span class=\"err\">origins<\/span><span class=\"w\"> <\/span><span class=\"err\">for<\/span><span class=\"w\"> <\/span><span class=\"err\">requests<\/span><span class=\"w\">\n  <\/span><span class=\"err\">\/\/<\/span><span class=\"w\"> <\/span><span class=\"err\">that<\/span><span class=\"w\"> <\/span><span class=\"err\">don't<\/span><span class=\"w\"> <\/span><span class=\"err\">include<\/span><span class=\"w\"> <\/span><span class=\"err\">credentials.<\/span><span class=\"w\"> <\/span><span class=\"err\">If<\/span><span class=\"w\"> <\/span><span class=\"err\">nil<\/span><span class=\"w\"> <\/span><span class=\"err\">it<\/span><span class=\"w\"> <\/span><span class=\"err\">defaults<\/span><span class=\"w\"> <\/span><span class=\"err\">to<\/span><span class=\"w\"> <\/span><span class=\"err\">allowing<\/span><span class=\"w\"> <\/span><span class=\"err\">all<\/span><span class=\"w\"> <\/span><span class=\"err\">domains<\/span><span class=\"w\">\n  <\/span><span class=\"err\">\/\/<\/span><span class=\"w\"> <\/span><span class=\"err\">(equivalent<\/span><span class=\"w\"> <\/span><span class=\"err\">to<\/span><span class=\"w\"> <\/span><span class=\"p\">[<\/span><span class=\"s2\">\"*\"<\/span><span class=\"p\">]<\/span><span class=\"err\">).<\/span><span class=\"w\">\n  <\/span><span class=\"nl\">\"allow_origins_without_credentials\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"p\">[<\/span><span class=\"w\">\n    <\/span><span class=\"s2\">\"<origin-goes-here>\"<\/origin-goes-here><\/span><span class=\"w\">\n  <\/span><span class=\"p\">],<\/span><span class=\"w\">\n\n  <\/span><span class=\"err\">\/\/<\/span><span class=\"w\"> <\/span><span class=\"err\">allow_origins_with_credentials<\/span><span class=\"w\"> <\/span><span class=\"err\">specifies<\/span><span class=\"w\"> <\/span><span class=\"err\">the<\/span><span class=\"w\"> <\/span><span class=\"err\">allowed<\/span><span class=\"w\"> <\/span><span class=\"err\">origins<\/span><span class=\"w\"> <\/span><span class=\"err\">for<\/span><span class=\"w\"> <\/span><span class=\"err\">requests<\/span><span class=\"w\">\n  <\/span><span class=\"err\">\/\/<\/span><span class=\"w\"> <\/span><span class=\"err\">that<\/span><span class=\"w\"> <\/span><span class=\"err\">include<\/span><span class=\"w\"> <\/span><span class=\"err\">credentials.<\/span><span class=\"w\"> <\/span><span class=\"err\">If<\/span><span class=\"w\"> <\/span><span class=\"err\">a<\/span><span class=\"w\"> <\/span><span class=\"err\">request<\/span><span class=\"w\"> <\/span><span class=\"err\">is<\/span><span class=\"w\"> <\/span><span class=\"err\">made<\/span><span class=\"w\"> <\/span><span class=\"err\">from<\/span><span class=\"w\"> <\/span><span class=\"err\">an<\/span><span class=\"w\"> <\/span><span class=\"err\">Origin<\/span><span class=\"w\"> <\/span><span class=\"err\">in<\/span><span class=\"w\"> <\/span><span class=\"err\">this<\/span><span class=\"w\"> <\/span><span class=\"err\">list<\/span><span class=\"w\">\n  <\/span><span class=\"err\">\/\/<\/span><span class=\"w\"> <\/span><span class=\"err\">Encore<\/span><span class=\"w\"> <\/span><span class=\"err\">responds<\/span><span class=\"w\"> <\/span><span class=\"err\">with<\/span><span class=\"w\"> <\/span><span class=\"err\">Access-Control-Allow-Origin:<\/span><span class=\"w\"> <\/span><span class=\"err\"><origin>.<\/origin><\/span><span class=\"w\">\n  <\/span><span class=\"err\">\/\/<\/span><span class=\"w\">\n  <\/span><span class=\"err\">\/\/<\/span><span class=\"w\"> <\/span><span class=\"err\">The<\/span><span class=\"w\"> <\/span><span class=\"err\">URLs<\/span><span class=\"w\"> <\/span><span class=\"err\">in<\/span><span class=\"w\"> <\/span><span class=\"err\">this<\/span><span class=\"w\"> <\/span><span class=\"err\">list<\/span><span class=\"w\"> <\/span><span class=\"err\">may<\/span><span class=\"w\"> <\/span><span class=\"err\">include<\/span><span class=\"w\"> <\/span><span class=\"err\">wildcards<\/span><span class=\"w\"> <\/span><span class=\"err\">(e.g.<\/span><span class=\"w\"> <\/span><span class=\"s2\">\"https:\/\/*.example.com\"<\/span><span class=\"w\">\n  <\/span><span class=\"err\">\/\/<\/span><span class=\"w\"> <\/span><span class=\"err\">or<\/span><span class=\"w\"> <\/span><span class=\"s2\">\"https:\/\/*-myapp.example.com\"<\/span><span class=\"err\">).<\/span><span class=\"w\">\n  <\/span><span class=\"nl\">\"allow_origins_with_credentials\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"p\">[<\/span><span class=\"w\">\n    <\/span><span class=\"s2\">\"<domain-goes-here>\"<\/domain-goes-here><\/span><span class=\"w\">\n  <\/span><span class=\"p\">]<\/span><span class=\"w\">\n<\/span><span class=\"p\">}<\/span><span class=\"w\">\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>\u0647\u0631 \u062f\u0648\u06cc \u0627\u06cc\u0646 \u067e\u06cc\u0634 \u0641\u0631\u0636 \u0628\u0647 &#8220;https:\/\/encorets-saas-starter.vercel.app&#8221; \u06a9\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u0622\u0632\u0645\u0627\u06cc\u0634\u06cc \u0645\u06cc\u0632\u0628\u0627\u0646 \u0627\u0633\u062a.<\/p>\n<p>\u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0628\u06cc\u0634\u062a\u0631 \u062f\u0631 \u0645\u0648\u0631\u062f \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc CORS \u0631\u0627 \u0645\u06cc \u062a\u0648\u0627\u0646 \u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u06cc\u0627\u0641\u062a: https:\/\/encore.dev\/docs\/ts\/develop\/cors<\/p>\n<h2><span class=\"ez-toc-section\" id=\"%D9%BE%DB%8C%DA%86%DB%8C%D8%AF%D9%86\"><\/span>\n<p>  \u067e\u06cc\u0686\u06cc\u062f\u0646<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0627\u06a9\u0646\u0648\u0646 \u06cc\u06a9 \u0628\u0631\u0646\u0627\u0645\u0647 SaaS \u0645\u0642\u06cc\u0627\u0633 \u067e\u0630\u06cc\u0631 \u0648 \u0622\u0645\u0627\u062f\u0647 \u062a\u0648\u0644\u06cc\u062f \u0648 \u062f\u0631 \u062d\u0627\u0644 \u0627\u062c\u0631\u0627 \u062f\u0627\u0631\u06cc\u062f. \u0627\u06a9\u0646\u0648\u0646 \u0627\u062f\u0627\u0645\u0647 \u062f\u0647\u06cc\u062f \u0648 \u0645\u062d\u0635\u0648\u0644 SaaS \u062e\u0648\u062f \u0631\u0627 \u062a\u0648\u0633\u0639\u0647 \u062f\u0647\u06cc\u062f!<\/p>\n<\/p><\/div>\n","protected":false},"excerpt":{"rendered":"<p>\u0628\u0647 \u0641\u06a9\u0631 \u0633\u0627\u062e\u062a\u0646 \u06cc\u06a9 \u0628\u0631\u0646\u0627\u0645\u0647 SaaS \u0647\u0633\u062a\u06cc\u062f\u061f \u0627\u06cc\u0646 \u0627\u0644\u06af\u0648\u06cc \u0627\u0633\u062a\u0627\u0631\u062a \u0628\u0647 \u0634\u0645\u0627 \u06a9\u0645\u06a9 \u0645\u06cc \u06a9\u0646\u062f \u062a\u0627 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 Encore.ts \u0648 Next.js. \u06cc\u06a9 \u0628\u0631\u0646\u0627\u0645\u0647 \u0622\u0645\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u0645\u0642\u06cc\u0627\u0633 \u067e\u0630\u06cc\u0631 \u0648 \u062a\u0648\u0644\u06cc\u062f\u06cc \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f. \u0627\u0632 Clerk \u0628\u0631\u0627\u06cc \u062a\u0623\u06cc\u06cc\u062f \u0627\u0639\u062a\u0628\u0627\u0631 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u062f \u060c \u0628\u0631\u0627\u06cc \u067e\u0631\u062f\u0627\u062e\u062a \u0647\u0627 \u06cc\u06a9\u067e\u0627\u0631\u0686\u0647 \u0633\u0627\u0632\u06cc \u0646\u0648\u0627\u0631 \u0627\u0633\u062a \u0648 \u0627\u0632 Tailwind \u0648 Shadcn\/UI \u0628\u0631\u0627\u06cc \u06cc\u06a9 &hellip;<\/p>\n","protected":false},"author":2,"featured_media":102081,"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-102080","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\/102080","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=102080"}],"version-history":[{"count":0,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts\/102080\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/media\/102081"}],"wp:attachment":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/media?parent=102080"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/categories?post=102080"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/tags?post=102080"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}