{#if showLogo || style === 'primary'}
-
+
{/if}
diff --git a/src/lib/components/user-area/AuthArea.module.scss b/src/lib/components/user-area/AuthArea.module.scss
new file mode 100644
index 00000000..0e702715
--- /dev/null
+++ b/src/lib/components/user-area/AuthArea.module.scss
@@ -0,0 +1,15 @@
+@import 'lib/styles/mixins.scss';
+
+.btnsWrap {
+ display: flex;
+ align-items: center;
+ gap: 28px;
+
+ > * {
+ position: relative;
+ }
+
+ @include smallMobile {
+ gap: 16px;
+ }
+}
diff --git a/src/lib/components/user-area/AuthArea.svelte b/src/lib/components/user-area/AuthArea.svelte
new file mode 100644
index 00000000..ffbefb58
--- /dev/null
+++ b/src/lib/components/user-area/AuthArea.svelte
@@ -0,0 +1,44 @@
+
+
+
+
+
diff --git a/src/lib/components/user-area/UserArea.svelte b/src/lib/components/user-area/UserArea.svelte
index 4def932a..23bcfc7d 100644
--- a/src/lib/components/user-area/UserArea.svelte
+++ b/src/lib/components/user-area/UserArea.svelte
@@ -2,29 +2,23 @@
import { onMount } from 'svelte';
import { getAppContext } from 'lib/app-context';
import { checkUserAppRole, fetchUserProfile } from 'lib/functions/user-profile.provider';
- import { fetchUserProfileCompletedness, dismissNudgesBasedOnHost } from 'lib/functions/profile-nudges';
+ import { fetchUserProfileCompletedness } from 'lib/functions/profile-nudges';
import { AUTH_USER_ROLE } from 'lib/config/auth';
import { DISABLE_NUDGES } from "lib/config/profile-toasts.config";
import ToolSelector from '../tool-selector/ToolSelector.svelte';
- import Button from '../Button.svelte';
import VerticalSeparator from '../VerticalSeparator.svelte';
import UserAvatar from './UserAvatar.svelte';
import styles from './UserArea.module.scss'
import Completedness from './Completedness.svelte';
- import SigninPopup from './SigninPopup.svelte';
- import { appPubSub } from '../../../main';
+ import AuthArea from './AuthArea.svelte';
const ctx = getAppContext();
// debounce updates to user if user.handle stays the same
let debounce = '';
- let signinPopupVisible = false;
- let signinMethod: 'login'|'signup';
- let signInConfig: {talentURL: string, customerURL: string};
-
$: ({
signOut: onSignOut = () => {},
ready: isReady,
@@ -72,9 +66,6 @@
$: isReady && user?.handle && fetchProfileDetails();
onMount(async () => {
- appPubSub.subscribe('signup', (data) => handleSignin('signup', data))
- appPubSub.subscribe('login', (data) => handleSignin('login', data))
-
if (autoFetchUser !== true) {
return;
}
@@ -83,26 +74,13 @@
const authUser = await fetchUserProfile();
$ctx.auth = {...$ctx.auth, ready: true, user: authUser};
});
-
- const handleSignin = (method, data?: any) => {
- signInConfig = data;
- signinPopupVisible = true;
- signinMethod = method;
- }
{#if isReady}
{#if !user}
-
- handleSignin('login')}/>
- handleSignin('signup')}
- />
-
+
{:else }
{/if}
- {#if signinPopupVisible}
- signinPopupVisible = false}
- />
- {/if}
{/if}
diff --git a/src/lib/config/hosts.ts b/src/lib/config/hosts.ts
index be38e277..8961873c 100644
--- a/src/lib/config/hosts.ts
+++ b/src/lib/config/hosts.ts
@@ -11,7 +11,8 @@ export const TC_DOMAIN: string = {
}[HOST_ENV] || 'topcoder.com'
-export const WP_HOST_URL: string = `https://www.${TC_DOMAIN}`;
+export const WP_HOST_URL: string = `http://localhost:5173`;
+// export const WP_HOST_URL: string = `https://www.${TC_DOMAIN}`;
export const CHALLENGE_HOST: string = `https://www.${TC_DOMAIN}`;
export const COMMUNITY_HOST: string = `https://www.${TC_DOMAIN}`;
diff --git a/src/lib/config/index.ts b/src/lib/config/index.ts
index 7a30f4f4..9f9127f3 100644
--- a/src/lib/config/index.ts
+++ b/src/lib/config/index.ts
@@ -13,10 +13,17 @@ export const CUSTOMER_LOGIN: string = getEnvValue(
"VITE_PLATFORM_APP_HOST",
"https://app.topcoder.com"
);
+
export const CUSTOMER_SIGNUP: string = getEnvValue(
"VITE_CUSTOMER_SIGNUP",
"https://app.topcoder.com/signup"
);
+
+export const AUTH0_AUTHENTICATOR_URL: string = getEnvValue(
+ "VITE_AUTH0_AUTHENTICATOR_URL",
+ "https://accounts-auth0.topcoder.com"
+);
+
export const DISABLE_USERFLOW: string = getEnvValue('VITE_DISABLE_USERFLOW', '')
export const USERFLOW_ENVIRONMENT_TOKEN: string = getEnvValue('VITE_USERFLOW_ENVIRONMENT_TOKEN')
export const USERFLOW_TC_SIGNATURE: string = getEnvValue('VITE_USERFLOW_TC_SIGNATURE')
diff --git a/src/lib/config/nav-menu/all-nav-items.config.ts b/src/lib/config/nav-menu/all-nav-items.config.ts
index 37caece0..f4f2bcb1 100644
--- a/src/lib/config/nav-menu/all-nav-items.config.ts
+++ b/src/lib/config/nav-menu/all-nav-items.config.ts
@@ -13,9 +13,26 @@ import {
PLATFORM_APP_HOST,
WALLETAPP_HOST,
WORK_MANAGER_HOST,
+ AUTH0_AUTHENTICATOR_URL,
} from '..';
export const allNavItems: {[key: string]: NavMenuItem} = {
+ login: {
+ label: 'Login',
+ url: `${AUTH0_AUTHENTICATOR_URL}?retUrl=${encodeURIComponent(getWordpressUrl('/home'))}`
+ },
+ freelancer: {
+ label: 'I\'m a Freelancer',
+ url: getWordpressUrl('/freelancer'),
+ },
+ howItWorks: {
+ label: 'How it works',
+ url: getWordpressUrl('/how-it-works'),
+ },
+ customerStories: {
+ label: 'Customer Stories',
+ url: getWordpressUrl('/customer-stories'),
+ },
demo: {
label: 'Demo',
url: getWordpressUrl('/customer/demo'),
diff --git a/src/lib/config/nav-menu/footer-nav-items.ts b/src/lib/config/nav-menu/footer-nav-items.ts
index 1a484af1..d2d4c438 100644
--- a/src/lib/config/nav-menu/footer-nav-items.ts
+++ b/src/lib/config/nav-menu/footer-nav-items.ts
@@ -6,54 +6,47 @@ import { allNavItems } from "./all-nav-items.config";
export const footerNavItems: NavMenuItem = {
children: [
{
- label: 'Info',
+ label: 'For Clients',
children: [
{
- label: 'Customer Stories',
- url: getWordpressUrl('/customer/success-stories'),
- },
- {
- label: 'Blog',
- url: getWordpressUrl('/blog'),
+ label: 'How it Works',
+ url: getWordpressUrl('/how-it-works'),
},
{
- label: 'Release Notes',
- url: getWordpressUrl('/releasenotes'),
+ label: 'The Talent',
+ url: getWordpressUrl('/talent'),
},
{
- label: 'Privacy Policy',
- url: getWordpressUrl('/policy'),
- },
- {
- label: 'Terms & Conditions',
- url: getWordpressUrl('/terms-conditions'),
+ label: 'Customer Stories',
+ url: getWordpressUrl('/customer/success-stories'),
},
]
},
{
- label: 'Solutions',
+ label: 'For Freelancers',
children: [
{
- label: 'Product',
- url: getWordpressUrl('/customer/product'),
- },
- {
- label: 'Innovation Challenges',
- url: getWordpressUrl('/innovation-challenges'),
+ label: 'I\'m a Freelancer',
+ url: getWordpressUrl('/freelancer'),
},
{
- label: 'Expertise',
- url: getWordpressUrl('/ai'),
+ label: 'Blogs',
+ url: getWordpressUrl('/blog'),
},
- allNavItems.talent,
]
},
{
- label: 'Contact Us',
+ label: 'Resources',
children: [
- allNavItems.talkToAnExpert,
- allNavItems.bookADemo,
allNavItems.support,
+ {
+ label: 'Terms and Conditions',
+ url: getWordpressUrl('/community/how-it-works/terms')
+ },
+ {
+ label: 'Privacy Policy',
+ url: getWordpressUrl('/privacy')
+ },
]
},
]
diff --git a/src/lib/config/nav-menu/main-navigation.config.ts b/src/lib/config/nav-menu/main-navigation.config.ts
index 50997519..2a030893 100644
--- a/src/lib/config/nav-menu/main-navigation.config.ts
+++ b/src/lib/config/nav-menu/main-navigation.config.ts
@@ -3,14 +3,7 @@ import type { NavMenuItem } from "../../functions/nav-menu-item.model";
import { allNavItems } from "./all-nav-items.config";
export const mainNavigationItems: NavMenuItem[] = [
- {
- ...allNavItems.product,
- children: [
- allNavItems.bugHunt,
- allNavItems.platform,
- allNavItems.innovationChallenges,
- ],
- },
- allNavItems.demo,
+ allNavItems.howItWorks,
allNavItems.talent,
+ allNavItems.customerStories,
]
diff --git a/src/lib/config/nav-menu/marketing-nav-items.ts b/src/lib/config/nav-menu/marketing-nav-items.ts
index cc991955..fc51912e 100644
--- a/src/lib/config/nav-menu/marketing-nav-items.ts
+++ b/src/lib/config/nav-menu/marketing-nav-items.ts
@@ -8,3 +8,8 @@ export const marketingNavItems: NavMenuItem = {
...mainNavigationItems,
]
}
+
+export const marketingRightItems: NavMenuItem[] = [
+ allNavItems.freelancer,
+ allNavItems.login,
+]
diff --git a/src/lib/footer-navigation/FooterNavigation.module.scss b/src/lib/footer-navigation/FooterNavigation.module.scss
index 0de5c0cf..0c664afe 100644
--- a/src/lib/footer-navigation/FooterNavigation.module.scss
+++ b/src/lib/footer-navigation/FooterNavigation.module.scss
@@ -5,6 +5,12 @@
position: relative;
background: #0F172A;
padding: 72px 32px;
+
+ > * {
+ max-width: 1350px;
+ margin-left: auto;
+ margin-right: auto;
+ }
}
.footerInner {
@@ -22,7 +28,7 @@
}
.footerAbout {
- font-family: $roboto;
+ font-family: $nunito;
font-style: normal;
color: #FFFFFF;
font-size: 16px;
@@ -94,20 +100,20 @@
}
.menuSection {
- font-family: $roboto;
+ font-family: $nunito;
font-style: normal;
color: #FFF;
&Heading {
font-weight: 700;
- font-size: 12px;
+ font-size: 16px;
line-height: 24px;
letter-spacing: 1px;
color: #FFFFFF;
}
&Entry {
- font-size: 16px;
+ font-size: 14px;
line-height: 24px;
margin-top: 16px;
}
@@ -192,8 +198,8 @@
font-size: 16px;
line-height: 24px;
color: #FFFFFF;
- font-weight: 400;
- font-family: $roboto;
+ font-weight: 700;
+ font-family: $nunito;
padding-top: 48px;
border-top: 1px solid #F7F9FF;
@@ -201,10 +207,6 @@
}
.footerSocial {
- position: absolute;
- bottom: 0;
- right: 0;
-
display: flex;
align-items: center;
gap: 8px;
@@ -216,3 +218,20 @@
justify-content: center;
}
}
+
+.cta.cta {
+ display: flex;
+ border-radius: 4px;
+ align-items: center;
+ justify-content: center;
+ transition: .2s ease;
+ font-size: 14px;
+ font-family: $nunito;
+ padding: 8px 24px;
+ line-height: 1.3;
+ background: #fff;
+ color: #0b3d56;
+ font-weight: 700;
+ margin-top: 16px;
+ margin-bottom: 16px;
+}
diff --git a/src/lib/footer-navigation/FooterNavigation.svelte b/src/lib/footer-navigation/FooterNavigation.svelte
index be3e95ad..3fb7a42f 100644
--- a/src/lib/footer-navigation/FooterNavigation.svelte
+++ b/src/lib/footer-navigation/FooterNavigation.svelte
@@ -6,7 +6,7 @@
import { handleNavItemAction } from 'lib/utils/nav-item-action.handler';
import type { NavMenuItem } from 'lib/functions/nav-menu-item.model';
import styles from './FooterNavigation.module.scss'
- import { getPublicPath } from 'lib/utils/paths';
+ import { getPublicPath, getWordpressUrl } from 'lib/utils/paths';
import SocialIcon from './SocialIcon.svelte';
$: logoUrl = getPublicPath(`/assets/inverted-logo.svg`);
@@ -31,19 +31,51 @@
Over 25 years ago, Topcoder pioneered competitive coding, transforming coding into a sport by providing a platform for top developers worldwide to compete, enhance skills, and connect within a global community.
- Much like traditional sports, Topcoder offers a fair playing field, clear rules, and a scoring system. Participants are motivated by the thrill of competition, learning new skills, community engagement, earning credentials, and the chance for recognition and prizes.
+ Today, Topcoder enables businesses to access this vast pool of elite talent, harnessing the skills and expertise of our global community to solve complex problems, drive innovation, and deliver high-quality results faster.
diff --git a/src/lib/functions/marketing-navigation.provider.ts b/src/lib/functions/marketing-navigation.provider.ts
index 662e434c..0b9ae8de 100644
--- a/src/lib/functions/marketing-navigation.provider.ts
+++ b/src/lib/functions/marketing-navigation.provider.ts
@@ -12,3 +12,5 @@ export function getMainNavItems(isAuthenticated: boolean): NavMenuItem[] {
export function getActiveRoute(navItems: NavMenuItem[], index?: number): NavMenuItem[] {
return getActiveRouteUtil(navItems, index);
}
+
+export { marketingRightItems } from 'lib/config/nav-menu/marketing-nav-items'
diff --git a/src/lib/marketing-navigation/MarketingNavigation.svelte b/src/lib/marketing-navigation/MarketingNavigation.svelte
index fc66bb9e..0d0d7270 100644
--- a/src/lib/marketing-navigation/MarketingNavigation.svelte
+++ b/src/lib/marketing-navigation/MarketingNavigation.svelte
@@ -7,11 +7,13 @@
import { getAppContext } from 'lib/app-context';
import type { NavMenuItem } from 'lib/functions/nav-menu-item.model';
import { getActiveRoute, getMainNavItems } from 'lib/functions/marketing-navigation.provider'
- import UserArea from 'lib/components/user-area/UserArea.svelte';
import { isMobile } from 'lib/utils/window-size.store';
import { checkAndLoadFonts } from 'lib/utils/fonts';
import NavigationBar from './components/NavigationBar.svelte';
import Banner from 'lib/components/Banner.svelte';
+ import Button from 'lib/components/Button.svelte';
+ import { AUTH0_AUTHENTICATOR_URL } from 'lib/config';
+ import { allNavItems } from 'lib/config/nav-menu/all-nav-items.config';
const ctx = getAppContext()
$: ({auth} = $ctx)
@@ -30,6 +32,10 @@
let tertiaryRoute: NavMenuItem;
$: [primaryRoute, secondaryRoute, tertiaryRoute] = activeRoute
+ const handleLogin = () => {
+ window.location.href = `${AUTH0_AUTHENTICATOR_URL}?retUrl=${allNavItems.home.url}`
+ }
+
onMount(checkAndLoadFonts)
@@ -41,7 +47,5 @@
style='primary'
menuItems={menuItems}
isMobile={$isMobile}
- >
-