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.io 2024-09-13T10:13:38.331Z daily 0.7
-https://kloudlite.io/about-us 2024-09-13T10:13:38.334Z daily 0.7
-https://kloudlite.io/blog 2024-09-13T10:13:38.334Z daily 0.7
-https://kloudlite.io/blog/collaborative-development 2024-09-13T10:13:38.334Z daily 0.7
-https://kloudlite.io/blog/containerisation-reviving-legacy-apps-for-developers 2024-09-13T10:13:38.334Z daily 0.7
-https://kloudlite.io/blog/demystifying-7-common-misconceptions-about-containers 2024-09-13T10:13:38.334Z daily 0.7
-https://kloudlite.io/blog/development-workflow 2024-09-13T10:13:38.334Z daily 0.7
-https://kloudlite.io/blog/distributed-environment-as-a-service 2024-09-13T10:13:38.334Z daily 0.7
-https://kloudlite.io/blog/environments-workspaces 2024-09-13T10:13:38.335Z daily 0.7
-https://kloudlite.io/blog/remote-local-environments 2024-09-13T10:13:38.335Z daily 0.7
-https://kloudlite.io/blog/role-of-open-source-in-modern-software-development 2024-09-13T10:13:38.335Z daily 0.7
-https://kloudlite.io/blog/the-evolution-of-development-workflows-an-introduction-to-deaas 2024-09-13T10:13:38.335Z daily 0.7
-https://kloudlite.io/contact-us 2024-09-13T10:13:38.335Z daily 0.7
-https://kloudlite.io/docs 2024-09-13T10:13:38.335Z daily 0.7
-https://kloudlite.io/docs/app-intercept 2024-09-13T10:13:38.335Z daily 0.7
-https://kloudlite.io/docs/apps 2024-09-13T10:13:38.335Z daily 0.7
-https://kloudlite.io/docs/basic-concepts 2024-09-13T10:13:38.335Z daily 0.7
-https://kloudlite.io/docs/basic-concepts/development-loop 2024-09-13T10:13:38.335Z daily 0.7
-https://kloudlite.io/docs/basic-concepts/environments 2024-09-13T10:13:38.335Z daily 0.7
-https://kloudlite.io/docs/basic-concepts/remote-local 2024-09-13T10:13:38.335Z daily 0.7
-https://kloudlite.io/docs/basic-concepts/workspaces 2024-09-13T10:13:38.335Z daily 0.7
-https://kloudlite.io/docs/configs-secrets 2024-09-13T10:13:38.335Z daily 0.7
-https://kloudlite.io/docs/contributing 2024-09-13T10:13:38.335Z daily 0.7
-https://kloudlite.io/docs/contributing/code-of-conduct 2024-09-13T10:13:38.335Z daily 0.7
-https://kloudlite.io/docs/contributing/documentation 2024-09-13T10:13:38.335Z daily 0.7
-https://kloudlite.io/docs/contributing/feature-stages 2024-09-13T10:13:38.335Z daily 0.7
-https://kloudlite.io/docs/contributing/frontend 2024-09-13T10:13:38.335Z daily 0.7
-https://kloudlite.io/docs/contributing/security 2024-09-13T10:13:38.335Z daily 0.7
-https://kloudlite.io/docs/environments 2024-09-13T10:13:38.335Z daily 0.7
-https://kloudlite.io/docs/faq 2024-09-13T10:13:38.335Z daily 0.7
-https://kloudlite.io/docs/faq/ai-ml-workflows 2024-09-13T10:13:38.335Z daily 0.7
-https://kloudlite.io/docs/faq/feature-capabilities 2024-09-13T10:13:38.335Z daily 0.7
-https://kloudlite.io/docs/faq/general-questions 2024-09-13T10:13:38.335Z daily 0.7
-https://kloudlite.io/docs/faq/plans-pricing 2024-09-13T10:13:38.335Z daily 0.7
-https://kloudlite.io/docs/faq/setup-configuration 2024-09-13T10:13:38.335Z daily 0.7
-https://kloudlite.io/docs/faq/troubleshooting-support 2024-09-13T10:13:38.335Z daily 0.7
-https://kloudlite.io/docs/getting-started 2024-09-13T10:13:38.335Z daily 0.7
-https://kloudlite.io/docs/global-vpn 2024-09-13T10:13:38.335Z daily 0.7
-https://kloudlite.io/docs/ide-integrations 2024-09-13T10:13:38.335Z daily 0.7
-https://kloudlite.io/docs/ide-integrations/intellij 2024-09-13T10:13:38.335Z daily 0.7
-https://kloudlite.io/docs/ide-integrations/ssh-access 2024-09-13T10:13:38.335Z daily 0.7
-https://kloudlite.io/docs/ide-integrations/vscode 2024-09-13T10:13:38.335Z daily 0.7
-https://kloudlite.io/docs/infrastructure 2024-09-13T10:13:38.335Z daily 0.7
-https://kloudlite.io/docs/integrated-resources 2024-09-13T10:13:38.335Z daily 0.7
-https://kloudlite.io/docs/integrated-services 2024-09-13T10:13:38.335Z daily 0.7
-https://kloudlite.io/docs/setup-connect 2024-09-13T10:13:38.335Z daily 0.7
-https://kloudlite.io/docs/uninstall 2024-09-13T10:13:38.335Z daily 0.7
-https://kloudlite.io/docs/workspace-management 2024-09-13T10:13:38.335Z daily 0.7
-https://kloudlite.io/legal/cancellation-refund-policy 2024-09-13T10:13:38.335Z daily 0.7
-https://kloudlite.io/legal/privacy-policy 2024-09-13T10:13:38.335Z daily 0.7
-https://kloudlite.io/legal/terms-of-services 2024-09-13T10:13:38.335Z daily 0.7
-https://kloudlite.io/pricing 2024-09-13T10:13:38.335Z daily 0.7
-https://kloudlite.io/privacy-policy 2024-09-13T10:13:38.335Z daily 0.7
-https://kloudlite.io/terms-of-services 2024-09-13T10:13:38.335Z daily 0.7
+https://kloudlite.io 2024-09-19T04:05:53.534Z daily 0.7
+https://kloudlite.io/about-us 2024-09-19T04:05:53.534Z daily 0.7
+https://kloudlite.io/blog 2024-09-19T04:05:53.534Z daily 0.7
+https://kloudlite.io/blog/collaborative-development 2024-09-19T04:05:53.534Z daily 0.7
+https://kloudlite.io/blog/containerisation-reviving-legacy-apps-for-developers 2024-09-19T04:05:53.534Z daily 0.7
+https://kloudlite.io/blog/demystifying-7-common-misconceptions-about-containers 2024-09-19T04:05:53.534Z daily 0.7
+https://kloudlite.io/blog/development-workflow 2024-09-19T04:05:53.534Z daily 0.7
+https://kloudlite.io/blog/distributed-environment-as-a-service 2024-09-19T04:05:53.534Z daily 0.7
+https://kloudlite.io/blog/environments-workspaces 2024-09-19T04:05:53.534Z daily 0.7
+https://kloudlite.io/blog/remote-local-environments 2024-09-19T04:05:53.534Z daily 0.7
+https://kloudlite.io/blog/role-of-open-source-in-modern-software-development 2024-09-19T04:05:53.535Z daily 0.7
+https://kloudlite.io/blog/the-evolution-of-development-workflows-an-introduction-to-deaas 2024-09-19T04:05:53.535Z daily 0.7
+https://kloudlite.io/contact-us 2024-09-19T04:05:53.535Z daily 0.7
+https://kloudlite.io/docs 2024-09-19T04:05:53.535Z daily 0.7
+https://kloudlite.io/docs/app-intercept 2024-09-19T04:05:53.535Z daily 0.7
+https://kloudlite.io/docs/apps 2024-09-19T04:05:53.535Z daily 0.7
+https://kloudlite.io/docs/basic-concepts 2024-09-19T04:05:53.535Z daily 0.7
+https://kloudlite.io/docs/basic-concepts/development-loop 2024-09-19T04:05:53.535Z daily 0.7
+https://kloudlite.io/docs/basic-concepts/environments 2024-09-19T04:05:53.535Z daily 0.7
+https://kloudlite.io/docs/basic-concepts/remote-local 2024-09-19T04:05:53.535Z daily 0.7
+https://kloudlite.io/docs/basic-concepts/workspaces 2024-09-19T04:05:53.535Z daily 0.7
+https://kloudlite.io/docs/configs-secrets 2024-09-19T04:05:53.535Z daily 0.7
+https://kloudlite.io/docs/contributing 2024-09-19T04:05:53.535Z daily 0.7
+https://kloudlite.io/docs/contributing/code-of-conduct 2024-09-19T04:05:53.535Z daily 0.7
+https://kloudlite.io/docs/contributing/documentation 2024-09-19T04:05:53.535Z daily 0.7
+https://kloudlite.io/docs/contributing/feature-stages 2024-09-19T04:05:53.535Z daily 0.7
+https://kloudlite.io/docs/contributing/frontend 2024-09-19T04:05:53.535Z daily 0.7
+https://kloudlite.io/docs/contributing/security 2024-09-19T04:05:53.535Z daily 0.7
+https://kloudlite.io/docs/environments 2024-09-19T04:05:53.535Z daily 0.7
+https://kloudlite.io/docs/faq 2024-09-19T04:05:53.535Z daily 0.7
+https://kloudlite.io/docs/faq/feature-capabilities 2024-09-19T04:05:53.535Z daily 0.7
+https://kloudlite.io/docs/faq/general-questions 2024-09-19T04:05:53.535Z daily 0.7
+https://kloudlite.io/docs/faq/onboarding 2024-09-19T04:05:53.535Z daily 0.7
+https://kloudlite.io/docs/faq/plans-pricing 2024-09-19T04:05:53.535Z daily 0.7
+https://kloudlite.io/docs/faq/setup-configuration 2024-09-19T04:05:53.535Z daily 0.7
+https://kloudlite.io/docs/faq/troubleshooting-support 2024-09-19T04:05:53.535Z daily 0.7
+https://kloudlite.io/docs/getting-started 2024-09-19T04:05:53.535Z daily 0.7
+https://kloudlite.io/docs/global-vpn 2024-09-19T04:05:53.535Z daily 0.7
+https://kloudlite.io/docs/ide-integrations 2024-09-19T04:05:53.535Z daily 0.7
+https://kloudlite.io/docs/ide-integrations/intellij 2024-09-19T04:05:53.535Z daily 0.7
+https://kloudlite.io/docs/ide-integrations/ssh-access 2024-09-19T04:05:53.535Z daily 0.7
+https://kloudlite.io/docs/ide-integrations/vscode 2024-09-19T04:05:53.535Z daily 0.7
+https://kloudlite.io/docs/infrastructure 2024-09-19T04:05:53.535Z daily 0.7
+https://kloudlite.io/docs/integrated-resources 2024-09-19T04:05:53.535Z daily 0.7
+https://kloudlite.io/docs/integrated-services 2024-09-19T04:05:53.535Z daily 0.7
+https://kloudlite.io/docs/setup-connect 2024-09-19T04:05:53.535Z daily 0.7
+https://kloudlite.io/docs/uninstall 2024-09-19T04:05:53.535Z daily 0.7
+https://kloudlite.io/docs/workspace-management 2024-09-19T04:05:53.535Z daily 0.7
+https://kloudlite.io/legal/cancellation-refund-policy 2024-09-19T04:05:53.535Z daily 0.7
+https://kloudlite.io/legal/privacy-policy 2024-09-19T04:05:53.535Z daily 0.7
+https://kloudlite.io/legal/terms-of-services 2024-09-19T04:05:53.535Z daily 0.7
+https://kloudlite.io/pricing 2024-09-19T04:05:53.535Z daily 0.7
+https://kloudlite.io/privacy-policy 2024-09-19T04:05:53.535Z daily 0.7
+https://kloudlite.io/terms-of-services 2024-09-19T04:05:53.535Z daily 0.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 && (
-
- Continue with Github
-
- }
- prefix={ }
- linkComponent={Link}
- toLabel="href"
- to={oathProviders.githubLoginUrl}
- className="!wb-w-full md:wb-w-auto"
- size="lg"
- />
- )}
- {oathProviders?.gitlabLoginUrl && (
-
- Continue with Gitlab
-
- }
- prefix={ }
- linkComponent={Link}
- toLabel="href"
- to={oathProviders.gitlabLoginUrl}
- className="!wb-w-full md:wb-w-auto"
- size="lg"
- />
- )}
- {oathProviders?.googleLoginUrl && (
-
- Continue with Google
-
- }
- prefix={ }
- linkComponent={Link}
- toLabel="href"
- to={oathProviders.googleLoginUrl}
- className="!wb-w-full md:wb-w-auto"
- size="lg"
- />
- )}
-
- )}
-
- {hasProvider ? (
-
- ) : null}
-
Continue with email
- }
- prefix={ }
- linkComponent={Link}
- toLabel="href"
- to={signupUrl}
- className="!wb-w-full md:wb-w-auto"
- size="lg"
- />
-
-
- By continuing, you agree Kloudlite's
-
- Terms of Service
-
- and
-
- Privacy Policy.
-
-
+
+
+ {hasProvider && (
+
+ {oathProviders?.githubLoginUrl && (
+ Continue with Github
+ }
+ prefix={ }
+ linkComponent={Link}
+ toLabel="href"
+ to={oathProviders.githubLoginUrl}
+ className="!wb-w-full md:wb-w-auto"
+ size="lg"
+ />
+ )}
+ {oathProviders?.gitlabLoginUrl && (
+ Continue with Gitlab
+ }
+ prefix={ }
+ linkComponent={Link}
+ toLabel="href"
+ to={oathProviders.gitlabLoginUrl}
+ className="!wb-w-full md:wb-w-auto"
+ size="lg"
+ />
+ )}
+ {oathProviders?.googleLoginUrl && (
+ Continue with Google
+ }
+ prefix={ }
+ linkComponent={Link}
+ toLabel="href"
+ to={oathProviders.googleLoginUrl}
+ className="!wb-w-full md:wb-w-auto"
+ size="lg"
+ />
+ )}
-
-
- {show === 'signup' ? (
- <>Already have an account? >
- ) : (
- <>New to Kloudlite? >
- )}
-
+ {hasProvider ? (
+
+ ) : null}
+ Continue with email
}
- >
- {show === 'signup' ? 'Sign in' : 'Sign up'}
-
+ prefix={
}
+ linkComponent={Link}
+ toLabel="href"
+ to={show === 'signup' ? signupUrl : signinUrl}
+ className="!wb-w-full md:wb-w-auto"
+ size="lg"
+ />
+
+
+ By continuing, you agree Kloudlite's
+
+ Terms of Service
+
+ and
+
+ Privacy Policy.
+
+
- )}
+
+ {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;