Skip to content

Commit 64280c9

Browse files
authored
feat(landing): compare footer column, sales solutions page, nav reshuffle, scheduled-tasks calendar hero (#5684)
1 parent eac7bf0 commit 64280c9

13 files changed

Lines changed: 664 additions & 149 deletions

File tree

apps/sim/app/(landing)/components/footer/footer.tsx

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import Link from 'next/link'
2+
import { ALL_COMPETITORS } from '@/app/(landing)/comparisons/utils'
23
import { SimWordmark } from '@/app/(landing)/components/navbar/components/sim-wordmark'
34
import { MODEL_PROVIDERS_WITH_CATALOGS } from '@/app/(landing)/models/utils'
45

@@ -41,7 +42,7 @@ const PRODUCT_LINKS: FooterItem[] = [
4142
const RESOURCES_LINKS: FooterItem[] = [
4243
{ label: 'Blog', href: '/blog' },
4344
{ label: 'Docs', href: 'https://docs.sim.ai', external: true },
44-
{ label: 'Compare', href: '/comparisons' },
45+
{ label: 'Library', href: '/library' },
4546
{ label: 'Careers', href: '/careers' },
4647
{ label: 'Changelog', href: '/changelog' },
4748
{ label: 'Contact', href: '/contact' },
@@ -56,17 +57,13 @@ const MODEL_LINKS: FooterItem[] = [
5657
})),
5758
]
5859

59-
const BLOCK_LINKS: FooterItem[] = [
60-
{ label: 'Agent', href: 'https://docs.sim.ai/workflows/blocks/agent', external: true },
61-
{ label: 'Router', href: 'https://docs.sim.ai/workflows/blocks/router', external: true },
62-
{ label: 'Function', href: 'https://docs.sim.ai/workflows/blocks/function', external: true },
63-
{ label: 'Condition', href: 'https://docs.sim.ai/workflows/blocks/condition', external: true },
64-
{ label: 'API Block', href: 'https://docs.sim.ai/workflows/blocks/api', external: true },
65-
{ label: 'Workflow', href: 'https://docs.sim.ai/workflows/blocks/workflow', external: true },
66-
{ label: 'Parallel', href: 'https://docs.sim.ai/workflows/blocks/parallel', external: true },
67-
{ label: 'Guardrails', href: 'https://docs.sim.ai/workflows/blocks/guardrails', external: true },
68-
{ label: 'Evaluator', href: 'https://docs.sim.ai/workflows/blocks/evaluator', external: true },
69-
{ label: 'Loop', href: 'https://docs.sim.ai/workflows/blocks/loop', external: true },
60+
/** Top comparison pages, sourced from the competitor catalog so labels/hrefs never drift. */
61+
const COMPARE_LINKS: FooterItem[] = [
62+
{ label: 'All Comparisons', href: '/comparisons' },
63+
...ALL_COMPETITORS.slice(0, 9).map((competitor) => ({
64+
label: competitor.name,
65+
href: `/comparisons/${competitor.id}`,
66+
})),
7067
]
7168

7269
const INTEGRATION_LINKS: FooterItem[] = [
@@ -153,7 +150,7 @@ export function Footer() {
153150

154151
<FooterColumn title='Product' items={PRODUCT_LINKS} />
155152
<FooterColumn title='Resources' items={RESOURCES_LINKS} />
156-
<FooterColumn title='Blocks' items={BLOCK_LINKS} />
153+
<FooterColumn title='Compare' items={COMPARE_LINKS} />
157154
<FooterColumn title='Integrations' items={INTEGRATION_LINKS} />
158155
<FooterColumn title='Models' items={MODEL_LINKS} />
159156
<FooterColumn title='Socials' items={SOCIAL_LINKS} />

apps/sim/app/(landing)/components/navbar/components/mobile-nav/mobile-nav.tsx

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,10 +43,7 @@ interface MobileNavProps {
4343
* a grouped section automatically - the sheet mirrors the desktop nav's
4444
* information architecture with no extra edit.
4545
*/
46-
const STANDALONE_LINKS = [
47-
{ label: 'Enterprise', href: '/enterprise' },
48-
{ label: 'Pricing', href: '/pricing' },
49-
] as const
46+
const STANDALONE_LINKS = [{ label: 'Pricing', href: '/pricing' }] as const
5047

5148
/** Shared row chrome for every tappable text link in the sheet. */
5249
const SHEET_ROW =

apps/sim/app/(landing)/components/navbar/components/nav-menu-chip/constants.ts

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,8 @@ export const PLATFORM_MENU: NavMenu = {
4141
}
4242

4343
/**
44-
* The Resources menu - learning and reference surfaces. Six items in a
45-
* three-column grid. Docs is the one off-site link.
44+
* The Resources menu - learning and reference surfaces plus the Enterprise
45+
* page. Six items in a three-column grid. Docs is the one off-site link.
4646
*/
4747
export const RESOURCES_MENU: NavMenu = {
4848
label: 'Resources',
@@ -59,9 +59,9 @@ export const RESOURCES_MENU: NavMenu = {
5959
href: '/blog',
6060
},
6161
{
62-
title: 'Library',
63-
description: 'Comparisons, how-tos, and roundups',
64-
href: '/library',
62+
title: 'Enterprise',
63+
description: 'Govern AI agents at enterprise scale',
64+
href: '/enterprise',
6565
},
6666
{
6767
title: 'Changelog',
@@ -82,15 +82,16 @@ export const RESOURCES_MENU: NavMenu = {
8282
}
8383

8484
/**
85-
* The Solutions menu - agent use cases by team. Six items in a three-column grid.
85+
* The Solutions menu - agent use cases by team, Sales first. Six items in a
86+
* three-column grid.
8687
*/
8788
export const SOLUTIONS_MENU: NavMenu = {
8889
label: 'Solutions',
8990
items: [
9091
{
91-
title: 'Enterprise',
92-
description: 'Govern AI agents at enterprise scale',
93-
href: '/enterprise',
92+
title: 'Sales',
93+
description: 'Automate outreach and CRM upkeep',
94+
href: '/solutions/sales',
9495
},
9596
{
9697
title: 'Engineering',

apps/sim/app/(landing)/components/navbar/navbar.tsx

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ import { DEMO_HREF, SIGNUP_HREF } from '@/app/(landing)/constants'
3434
* chip-height slot, chip-text color) → the {@link NAV_MENUS} mega-menus
3535
* (pure-CSS hover/focus dropdowns) → Pricing → GitHub stars. Right side: Log in
3636
* (default chip), Contact sales (outline chip), Sign up (filled chip).
37+
* Enterprise lives inside the Resources mega-menu, not as a standalone chip.
3738
*/
3839

3940
interface NavbarProps {
@@ -75,9 +76,6 @@ export function Navbar({ stars, logoOnly = false }: NavbarProps) {
7576
{NAV_MENUS.map((menu) => (
7677
<NavMenuChip key={menu.label} menu={menu} />
7778
))}
78-
<ChipLink href='/enterprise' itemProp='url'>
79-
Enterprise
80-
</ChipLink>
8179
<ChipLink href='/pricing' itemProp='url'>
8280
Pricing
8381
</ChipLink>
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export { ScheduledTasksCalendarLoop } from './scheduled-tasks-calendar-loop'
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
/**
2+
* The ScheduledTasksCalendarLoop's motion: a newly scheduled task pill stamps
3+
* in once when the parent clock mounts it on its calendar day. A one-shot
4+
* mount animation - the loop's restart unmounts and remounts the pills, so a
5+
* new cycle replays them naturally. Under prefers-reduced-motion the parent
6+
* renders the finished frame and this never plays.
7+
*/
8+
9+
.pillIn {
10+
animation: scheduled-tasks-pill-in 0.35s cubic-bezier(0.22, 1, 0.36, 1) backwards;
11+
}
12+
13+
@keyframes scheduled-tasks-pill-in {
14+
from {
15+
opacity: 0;
16+
transform: translateY(-4px);
17+
}
18+
to {
19+
opacity: 1;
20+
transform: translateY(0);
21+
}
22+
}
23+
24+
@media (prefers-reduced-motion: reduce) {
25+
.pillIn {
26+
animation: none;
27+
}
28+
}

0 commit comments

Comments
 (0)