diff --git a/src/apps/devdoc/.env.development b/src/apps/devdoc/.env.development index bcb2d6567..9f5035336 100644 --- a/src/apps/devdoc/.env.development +++ b/src/apps/devdoc/.env.development @@ -1,3 +1,4 @@ APP_ENV=development AUTH_URL=https://auth.dev.kloudlite.io CONSOLE_URL=https://console.dev.kloudlite.io +CONTACT_URL=https://marketing-api.dev.kloudlite.io/website/contact-us diff --git a/src/apps/devdoc/.env.production b/src/apps/devdoc/.env.production index a3f026f78..0a4a05549 100644 --- a/src/apps/devdoc/.env.production +++ b/src/apps/devdoc/.env.production @@ -1,3 +1,4 @@ APP_ENV=production AUTH_URL=https://auth.kloudlite.io CONSOLE_URL=https://console.kloudlite.io +CONTACT_URL=https://marketing-api.dev.kloudlite.io/website/contact-us diff --git a/src/apps/devdoc/next.config.mjs b/src/apps/devdoc/next.config.mjs index 6ce87d9bf..2cf89bdd7 100644 --- a/src/apps/devdoc/next.config.mjs +++ b/src/apps/devdoc/next.config.mjs @@ -26,6 +26,7 @@ export default withNextra({ APP_ENV: process.env.APP_ENV, AUTH_URL: process.env.AUTH_URL, CONSOLE_URL: process.env.CONSOLE_URL, + CONTACT_URL: process.env.CONTACT_URL, }, images: { unoptimized: true, diff --git a/src/apps/devdoc/public/sitemap.xml b/src/apps/devdoc/public/sitemap.xml index f092db2c1..483e696d3 100644 --- a/src/apps/devdoc/public/sitemap.xml +++ b/src/apps/devdoc/public/sitemap.xml @@ -1,57 +1,57 @@ -https://kloudlite.io2024-09-13T10:13:38.331Zdaily0.7 -https://kloudlite.io/about-us2024-09-13T10:13:38.334Zdaily0.7 -https://kloudlite.io/blog2024-09-13T10:13:38.334Zdaily0.7 -https://kloudlite.io/blog/collaborative-development2024-09-13T10:13:38.334Zdaily0.7 -https://kloudlite.io/blog/containerisation-reviving-legacy-apps-for-developers2024-09-13T10:13:38.334Zdaily0.7 -https://kloudlite.io/blog/demystifying-7-common-misconceptions-about-containers2024-09-13T10:13:38.334Zdaily0.7 -https://kloudlite.io/blog/development-workflow2024-09-13T10:13:38.334Zdaily0.7 -https://kloudlite.io/blog/distributed-environment-as-a-service2024-09-13T10:13:38.334Zdaily0.7 -https://kloudlite.io/blog/environments-workspaces2024-09-13T10:13:38.335Zdaily0.7 -https://kloudlite.io/blog/remote-local-environments2024-09-13T10:13:38.335Zdaily0.7 -https://kloudlite.io/blog/role-of-open-source-in-modern-software-development2024-09-13T10:13:38.335Zdaily0.7 -https://kloudlite.io/blog/the-evolution-of-development-workflows-an-introduction-to-deaas2024-09-13T10:13:38.335Zdaily0.7 -https://kloudlite.io/contact-us2024-09-13T10:13:38.335Zdaily0.7 -https://kloudlite.io/docs2024-09-13T10:13:38.335Zdaily0.7 -https://kloudlite.io/docs/app-intercept2024-09-13T10:13:38.335Zdaily0.7 -https://kloudlite.io/docs/apps2024-09-13T10:13:38.335Zdaily0.7 -https://kloudlite.io/docs/basic-concepts2024-09-13T10:13:38.335Zdaily0.7 -https://kloudlite.io/docs/basic-concepts/development-loop2024-09-13T10:13:38.335Zdaily0.7 -https://kloudlite.io/docs/basic-concepts/environments2024-09-13T10:13:38.335Zdaily0.7 -https://kloudlite.io/docs/basic-concepts/remote-local2024-09-13T10:13:38.335Zdaily0.7 -https://kloudlite.io/docs/basic-concepts/workspaces2024-09-13T10:13:38.335Zdaily0.7 -https://kloudlite.io/docs/configs-secrets2024-09-13T10:13:38.335Zdaily0.7 -https://kloudlite.io/docs/contributing2024-09-13T10:13:38.335Zdaily0.7 -https://kloudlite.io/docs/contributing/code-of-conduct2024-09-13T10:13:38.335Zdaily0.7 -https://kloudlite.io/docs/contributing/documentation2024-09-13T10:13:38.335Zdaily0.7 -https://kloudlite.io/docs/contributing/feature-stages2024-09-13T10:13:38.335Zdaily0.7 -https://kloudlite.io/docs/contributing/frontend2024-09-13T10:13:38.335Zdaily0.7 -https://kloudlite.io/docs/contributing/security2024-09-13T10:13:38.335Zdaily0.7 -https://kloudlite.io/docs/environments2024-09-13T10:13:38.335Zdaily0.7 -https://kloudlite.io/docs/faq2024-09-13T10:13:38.335Zdaily0.7 -https://kloudlite.io/docs/faq/ai-ml-workflows2024-09-13T10:13:38.335Zdaily0.7 -https://kloudlite.io/docs/faq/feature-capabilities2024-09-13T10:13:38.335Zdaily0.7 -https://kloudlite.io/docs/faq/general-questions2024-09-13T10:13:38.335Zdaily0.7 -https://kloudlite.io/docs/faq/plans-pricing2024-09-13T10:13:38.335Zdaily0.7 -https://kloudlite.io/docs/faq/setup-configuration2024-09-13T10:13:38.335Zdaily0.7 -https://kloudlite.io/docs/faq/troubleshooting-support2024-09-13T10:13:38.335Zdaily0.7 -https://kloudlite.io/docs/getting-started2024-09-13T10:13:38.335Zdaily0.7 -https://kloudlite.io/docs/global-vpn2024-09-13T10:13:38.335Zdaily0.7 -https://kloudlite.io/docs/ide-integrations2024-09-13T10:13:38.335Zdaily0.7 -https://kloudlite.io/docs/ide-integrations/intellij2024-09-13T10:13:38.335Zdaily0.7 -https://kloudlite.io/docs/ide-integrations/ssh-access2024-09-13T10:13:38.335Zdaily0.7 -https://kloudlite.io/docs/ide-integrations/vscode2024-09-13T10:13:38.335Zdaily0.7 -https://kloudlite.io/docs/infrastructure2024-09-13T10:13:38.335Zdaily0.7 -https://kloudlite.io/docs/integrated-resources2024-09-13T10:13:38.335Zdaily0.7 -https://kloudlite.io/docs/integrated-services2024-09-13T10:13:38.335Zdaily0.7 -https://kloudlite.io/docs/setup-connect2024-09-13T10:13:38.335Zdaily0.7 -https://kloudlite.io/docs/uninstall2024-09-13T10:13:38.335Zdaily0.7 -https://kloudlite.io/docs/workspace-management2024-09-13T10:13:38.335Zdaily0.7 -https://kloudlite.io/legal/cancellation-refund-policy2024-09-13T10:13:38.335Zdaily0.7 -https://kloudlite.io/legal/privacy-policy2024-09-13T10:13:38.335Zdaily0.7 -https://kloudlite.io/legal/terms-of-services2024-09-13T10:13:38.335Zdaily0.7 -https://kloudlite.io/pricing2024-09-13T10:13:38.335Zdaily0.7 -https://kloudlite.io/privacy-policy2024-09-13T10:13:38.335Zdaily0.7 -https://kloudlite.io/terms-of-services2024-09-13T10:13:38.335Zdaily0.7 +https://kloudlite.io2024-09-19T04:05:53.534Zdaily0.7 +https://kloudlite.io/about-us2024-09-19T04:05:53.534Zdaily0.7 +https://kloudlite.io/blog2024-09-19T04:05:53.534Zdaily0.7 +https://kloudlite.io/blog/collaborative-development2024-09-19T04:05:53.534Zdaily0.7 +https://kloudlite.io/blog/containerisation-reviving-legacy-apps-for-developers2024-09-19T04:05:53.534Zdaily0.7 +https://kloudlite.io/blog/demystifying-7-common-misconceptions-about-containers2024-09-19T04:05:53.534Zdaily0.7 +https://kloudlite.io/blog/development-workflow2024-09-19T04:05:53.534Zdaily0.7 +https://kloudlite.io/blog/distributed-environment-as-a-service2024-09-19T04:05:53.534Zdaily0.7 +https://kloudlite.io/blog/environments-workspaces2024-09-19T04:05:53.534Zdaily0.7 +https://kloudlite.io/blog/remote-local-environments2024-09-19T04:05:53.534Zdaily0.7 +https://kloudlite.io/blog/role-of-open-source-in-modern-software-development2024-09-19T04:05:53.535Zdaily0.7 +https://kloudlite.io/blog/the-evolution-of-development-workflows-an-introduction-to-deaas2024-09-19T04:05:53.535Zdaily0.7 +https://kloudlite.io/contact-us2024-09-19T04:05:53.535Zdaily0.7 +https://kloudlite.io/docs2024-09-19T04:05:53.535Zdaily0.7 +https://kloudlite.io/docs/app-intercept2024-09-19T04:05:53.535Zdaily0.7 +https://kloudlite.io/docs/apps2024-09-19T04:05:53.535Zdaily0.7 +https://kloudlite.io/docs/basic-concepts2024-09-19T04:05:53.535Zdaily0.7 +https://kloudlite.io/docs/basic-concepts/development-loop2024-09-19T04:05:53.535Zdaily0.7 +https://kloudlite.io/docs/basic-concepts/environments2024-09-19T04:05:53.535Zdaily0.7 +https://kloudlite.io/docs/basic-concepts/remote-local2024-09-19T04:05:53.535Zdaily0.7 +https://kloudlite.io/docs/basic-concepts/workspaces2024-09-19T04:05:53.535Zdaily0.7 +https://kloudlite.io/docs/configs-secrets2024-09-19T04:05:53.535Zdaily0.7 +https://kloudlite.io/docs/contributing2024-09-19T04:05:53.535Zdaily0.7 +https://kloudlite.io/docs/contributing/code-of-conduct2024-09-19T04:05:53.535Zdaily0.7 +https://kloudlite.io/docs/contributing/documentation2024-09-19T04:05:53.535Zdaily0.7 +https://kloudlite.io/docs/contributing/feature-stages2024-09-19T04:05:53.535Zdaily0.7 +https://kloudlite.io/docs/contributing/frontend2024-09-19T04:05:53.535Zdaily0.7 +https://kloudlite.io/docs/contributing/security2024-09-19T04:05:53.535Zdaily0.7 +https://kloudlite.io/docs/environments2024-09-19T04:05:53.535Zdaily0.7 +https://kloudlite.io/docs/faq2024-09-19T04:05:53.535Zdaily0.7 +https://kloudlite.io/docs/faq/feature-capabilities2024-09-19T04:05:53.535Zdaily0.7 +https://kloudlite.io/docs/faq/general-questions2024-09-19T04:05:53.535Zdaily0.7 +https://kloudlite.io/docs/faq/onboarding2024-09-19T04:05:53.535Zdaily0.7 +https://kloudlite.io/docs/faq/plans-pricing2024-09-19T04:05:53.535Zdaily0.7 +https://kloudlite.io/docs/faq/setup-configuration2024-09-19T04:05:53.535Zdaily0.7 +https://kloudlite.io/docs/faq/troubleshooting-support2024-09-19T04:05:53.535Zdaily0.7 +https://kloudlite.io/docs/getting-started2024-09-19T04:05:53.535Zdaily0.7 +https://kloudlite.io/docs/global-vpn2024-09-19T04:05:53.535Zdaily0.7 +https://kloudlite.io/docs/ide-integrations2024-09-19T04:05:53.535Zdaily0.7 +https://kloudlite.io/docs/ide-integrations/intellij2024-09-19T04:05:53.535Zdaily0.7 +https://kloudlite.io/docs/ide-integrations/ssh-access2024-09-19T04:05:53.535Zdaily0.7 +https://kloudlite.io/docs/ide-integrations/vscode2024-09-19T04:05:53.535Zdaily0.7 +https://kloudlite.io/docs/infrastructure2024-09-19T04:05:53.535Zdaily0.7 +https://kloudlite.io/docs/integrated-resources2024-09-19T04:05:53.535Zdaily0.7 +https://kloudlite.io/docs/integrated-services2024-09-19T04:05:53.535Zdaily0.7 +https://kloudlite.io/docs/setup-connect2024-09-19T04:05:53.535Zdaily0.7 +https://kloudlite.io/docs/uninstall2024-09-19T04:05:53.535Zdaily0.7 +https://kloudlite.io/docs/workspace-management2024-09-19T04:05:53.535Zdaily0.7 +https://kloudlite.io/legal/cancellation-refund-policy2024-09-19T04:05:53.535Zdaily0.7 +https://kloudlite.io/legal/privacy-policy2024-09-19T04:05:53.535Zdaily0.7 +https://kloudlite.io/legal/terms-of-services2024-09-19T04:05:53.535Zdaily0.7 +https://kloudlite.io/pricing2024-09-19T04:05:53.535Zdaily0.7 +https://kloudlite.io/privacy-policy2024-09-19T04:05:53.535Zdaily0.7 +https://kloudlite.io/terms-of-services2024-09-19T04:05:53.535Zdaily0.7 \ No newline at end of file diff --git a/src/apps/devdoc/web/components/join-provider-dialog.tsx b/src/apps/devdoc/web/components/join-provider-dialog.tsx index 16fedace3..82d0624cc 100644 --- a/src/apps/devdoc/web/components/join-provider-dialog.tsx +++ b/src/apps/devdoc/web/components/join-provider-dialog.tsx @@ -18,6 +18,7 @@ import { authUrl, consoleUrl } from '../utils/config'; import { cn } from '../utils/commons'; import OptionList from 'kl-design-system/atoms/option-list'; import Profile from 'kl-design-system/molecule/profile'; +import { ArrowRight } from '../icons/icons'; const ProfileMenu = ({ user }: { user: IConfig['user'] }) => { if (!user) { @@ -81,20 +82,24 @@ const UserComponent = ({ ); } - if (isInHeader && user) { - return ( -
- -
- ); - } if (user) { return ( -
+
Access console + ) : ( + 'Access console' + ) + } + variant="outline" + suffix={} block size={size} linkComponent={Link} @@ -158,6 +163,7 @@ const JoinProvidersDialog = ({ const { config } = useConfig(); const { oathProviders } = config; const signupUrl = `${authUrl}/signup?mode=email`; + const signinUrl = `${authUrl}/login?mode=email`; const { setState } = useMenu(); @@ -202,147 +208,119 @@ const JoinProvidersDialog = ({ - {userApproved ? ( -
- - 🔥 Amazing curated Open-Source remote local envs - - - You've been added to our waitlist! - - - Do you have an invite code? -
- - Click here - {' '} - to access. -
-
- ) : ( -
-
-
- - {show === 'signup' - ? 'Create your Kloudlite.io account' - : 'Sign in to Kloudlite.io'} - -
- {show === 'signup' - ? 'Get started for free. No credit card required.' - : 'Start integrating local coding with remote power'} -
+
+
+
+ + {show === 'signup' + ? 'Create your Kloudlite.io account' + : 'Sign in to Kloudlite.io'} + +
+ {show === 'signup' + ? 'Get started for free. No credit card required.' + : 'Start integrating local coding with remote power'}
-
- {hasProvider && ( -
- {oathProviders?.githubLoginUrl && ( -
- )} -
- {hasProvider ? ( - - ) : null} -
+
+ {hasProvider && ( +
+ {oathProviders?.githubLoginUrl && ( +
-
-
- {show === 'signup' ? ( - <>Already have an account?  - ) : ( - <>New to Kloudlite?  - )} - + {hasProvider ? ( + + ) : null} +
- )} +
+ {show === 'signup' ? ( + <>Already have an account?  + ) : ( + <>New to Kloudlite?  + )} + + {show === 'signup' ? 'Sign in' : 'Sign up'} + +
+
diff --git a/src/apps/devdoc/web/utils/config.tsx b/src/apps/devdoc/web/utils/config.tsx index 1658d6dc7..3b9ad2117 100644 --- a/src/apps/devdoc/web/utils/config.tsx +++ b/src/apps/devdoc/web/utils/config.tsx @@ -17,6 +17,7 @@ export const siteDesc = 'Kloudlite is a remote-local development environment platform designed to streamline the workflow for developers working on distributed applications. By integrating both local and remote environments through Kubernetes, Kloudlite ensures a seamless, productive, and more connected development experience.'; export const basePath = 'https://kloudlite.io'; export const authUrl = `${process.env.AUTH_URL}` || 'https://auth.kloudlite.io'; +export const contactUrl = `${process.env.CONTACT_URL}`; export const consoleUrl = `${process.env.CONSOLE_URL}` || 'https://console.kloudlite.io'; export const gitUrl = 'https://github.com/kloudlite/kloudlite'; diff --git a/src/apps/devdoc/web/utils/g-recaptcha.tsx b/src/apps/devdoc/web/utils/g-recaptcha.tsx new file mode 100644 index 000000000..1f103e014 --- /dev/null +++ b/src/apps/devdoc/web/utils/g-recaptcha.tsx @@ -0,0 +1,53 @@ +declare global { + interface Window { + grecaptcha: { + enterprise: { + ready: (callback: Promise) => void; + execute: ( + sitekey: string, + action: { + action: string; + }, + ) => void; + }; + }; + } +} + +export const onReady = (callback: Promise) => { + if ( + !window.grecaptcha || + !window.grecaptcha.enterprise || + !window.grecaptcha.enterprise.ready + ) { + console.warn('window.grecaptcha.enterprise.ready is not defined.'); + return; + } + const ready = window.grecaptcha.enterprise.ready; + ready(callback); +}; + +export const execute = ( + sitekey: string, + action: { + action: string; + }, +) => { + if ( + !window.grecaptcha || + !window.grecaptcha.enterprise || + !window.grecaptcha.enterprise.ready + ) { + console.warn('window.grecaptcha.enterprises.ready is not defined.'); + return; + } + const exec = window.grecaptcha.enterprise.execute; + exec(sitekey, action); +}; + +const grecaptcha = { + onReady, + execute, +}; + +export default grecaptcha;